Баннер мобильный (3) Пройти тест

CSS-селекторы: что это такое и зачем нужны

Fun fact: конфликты бывают даже у CSS-селекторов

Разбор

25 июня 2024

Поделиться

Скопировано
CSS-селекторы: что это такое и зачем нужны

Содержание

    CSS-селекторы — важный инструмент в разработке сайтов. Благодаря им можно «разговаривать» с HTML-элементами — задавать им стили, внешний вид. Рассказываем, какие CSS-селекторы бывают и как ими пользоваться.

    Что такое CSS

    CSS — Cascading Style Sheets, «каскадные таблицы стилей». Это язык программирования, который необходим для управления внешним видом, стилями веб-страниц. Он позволяет произвольно менять цвета, шрифты, размер и расположение элементов, вставлять анимированные блоки — то есть делать веб-сайт «цепляющим» и «живым».

    CSS развивали Хокон Ли и Берт Бос с 1994 года. Они стремились создать стандартный язык для оформления веб-страниц, чтобы избавить разработчиков от необходимости писать код стилей непосредственно в HTML. HTML был не слишком гибким в вопросах стилизации. 

    В то время веб-сайты выглядели довольно скучно: простой текст, минимум оформления и никакой интерактивности — практически страницы из «Блокнота», никаких дополнительных интересных «фишек».

    первый сайт без CSS
    Так выглядел первый сайт в интернете. Только HTML, без CSS. Источник

    Целью создания CSS было разделить контент в HTML и стили в CSS, чтобы сделать веб-разработку более организованной и гибкой. Вместо того чтобы вставлять стили прямо в HTML-код, программист пишет CSS-файл и применяет его ко всем необходимым составляющим сайта.

    С течением времени фронтенд-разработка стала сложнее и продолжает динамично развиваться. Сегодня веб-сайт в стиле «Блокнота» не сможет заинтересовать даже посетителей старшего поколения: без форматирования, выделения нужных элементов и блоков им попросту неудобно пользоваться. Люди сегодня ожидают от веб-страниц удобства, красоты и интерактивности. И если они не получают желаемого, то уходят с сайта навсегда. 

    CSS-стили
    На нашем сайте тоже много CSS-стилей. Источник

    CSS помогает реализовать все эти ожидания и решает несколько ключевых задач:

    • Разделение контента и стилей: HTML отвечает за структуру веб-страницы и ее контент, а CSS — за ее оформление. Это делает код более читабельным, организованным и удобным для редактирования.
    • Управление стилями на всей веб-странице: CSS позволяет работать сразу со всеми элементами, которые обладают нужным свойством. Это упрощает настройку внешнего вида сайта.
    • Создание динамичных и интерактивных страниц: CSS дает возможность создавать анимации, переходы, изменять стили в зависимости от действий пользователя и многое другое, что делает сайт более интересным и взаимодействующим.
    • Обеспечение доступности: правильно примененный CSS делает сайт доступным для людей с ограниченными возможностями, что очень важно в современном мире.

    При чем здесь каскады

    Представьте, что вы одеваетесь слоями: сначала футболка, потом рубашка, а сверху куртка. Если вдруг стало жарко, вы снимаете куртку, и тогда видно рубашку. 

    Каскадирование в CSS работает похожим образом. Это способ управления стилями на веб-странице, когда правила CSS «накладываются» друг на друга по определенным приоритетам. 

    Представьте, что у вас есть несколько правил: 

    h1 { color: red; } #все заголовки первого уровня красные;
    
    h1.important { color: blue; } #заголовки с классом important синие;
    
    #special-title { color: green; } #заголовок с идентификатором special-title зеленый.

    Если у вас есть заголовок <h1>, у которого есть класс important и идентификатор special-title, то какой цвет будет у него в итоге? 

    Правило с идентификатором имеет самый высокий приоритет, поэтому заголовок будет зеленым. CSS-селекторы помогают определить приоритет правил и указать, какое правило «победит» в соревновании. 

    Каскадирование дает разработчику возможность усложнить оформление веб-страницы, сделать его более насыщенным и разнообразным, при этом упростив код.

    Что такое селекторы в CSS

    CSS-селекторы — инструмент языка CSS, который дает возможность легко управлять внешним видом сайта. По сути, это адреса, которые позволяют разработчикам точно указать, к каким элементам HTML-страницы нужно применить те или иные стили. Представьте, что вы пишете письмо: вы указываете адрес получателя, чтобы оно попало именно к нему, а не к кому-то другому. Точно так же CSS-селекторы позволяют указать, какие элементы нужно «одеть» в новые стили.

    Селекторы используются в CSS-правилах, которые имеют следующую структуру:

    селектор {
    
     свойства: значения;
    
    }

    В этой структуре:

    • селектор — указывает, какие элементы нужно стилизовать;
    • свойства — определяют, какие атрибуты нужно изменить;
    • значения — указывают конкретные значения для каждого свойства.

    Типы селекторов CSS

    Существует несколько типов селекторов, каждый из которых имеет свой способ выбора элементов:

    1. Универсальный селектор (*): практически как универсальный солдат — может все. Поэтому применяется к каждому элементу на странице. Например: 
    * {
    
     font-family: sans-serif;
    
     }

    Изменит шрифт всех элементов на странице.

    1. Селектор по имени тега (h1, p, div): представьте, что вы позвали друга на оживленной улице — и на ваше «Петя!» обернулись все мужчины, которых зовут так же. Селектор тоже выбирает из массива элементы с заданным именем. Например:
    h1 {
    
     color: blue;
    
     }

    Изменит цвет всех заголовков первого уровня на синий.

    1. Селектор по классу (.my-class): выбирает все элементы с указанным классом. Например, вы можете перекрасить все имеющиеся кнопки на странице:
    .button {
    
     background-color: red;
    
     color: white;
    
      }

    Изменит цвет фона и текста для всех элементов с классом button.

    1. Селектор по идентификатору (#my-id) можно сравнить с паспортной системой: серия и номер паспорта всегда указывают на конкретного человека. Так и селектор выбирает единственный элемент с указанным идентификатором. Например:
    #main-title {
    
     font-size: 3em;
    
     }

    Увеличит размер шрифта для элемента с идентификатором main-title.

    1. Селектор по атрибуту ([href], [title*=»example»]): в некоторых школах существует система дежурств среди учеников, и ученики дежурного класса носят отличительный знак — бейдж или повязку. Так все понимают, что эти школьники сегодня следят за порядком. Селектор аналогично выбирает элементы по наличию конкретных атрибутов или их значениям. Например:
    a[href*="example.com"] {
    
     color: green;
    
     }

    Изменит цвет ссылок, содержащих example.com в атрибуте href.

    Псевдоклассы и псевдоэлементы CSS

    Псевдоклассы и псевдоэлементы — это мощные инструменты CSS, которые позволяют стилизовать элементы более гибко и создавать более интересные для пользователя веб-страницы.

    Псевдоклассы

    Псевдоклассы — это специальные «имена», которые позволяют выбрать элементы в определенном состоянии или при определенном событии. 

    Примеры псевдоклассов:

    :hover — выбирает элемент, когда на него наведен курсор мыши;

    :active — выбирает элемент, когда по нему щелкают мышью;

    :focus — выбирает элемент, когда он получает фокус клавиатуры;

    :first-child — выбирает первый элемент из списка дочерних в родительском контейнере;

    :last-child — выбирает последний элемент из списка дочерних в родительском контейнере;

    :nth-child(n) — выбирает n-й элемент из списка дочерних в родительском контейнере.

    Пример CSS-кода:

    a:hover {
    
     text-decoration: underline;
    
    }

    Это правило устанавливает подчеркивание для текста ссылки при наведении курсора мыши (псевдокласс :hover).

    Псевдоэлементы

    Псевдоэлементы — это «виртуальные элементы», которых нет в HTML-коде, но их можно стилизовать с помощью CSS. 

    Примеры псевдоэлементов:

    ::before — добавляет содержимое перед элементом.

    ::after — добавляет содержимое после элемента.

    ::first-letter — выбирает первую букву текста в элементе.

    ::first-line — выбирает первую строку текста в элементе.

    Пример CSS-кода:

    h1::before {
    
     content: "★ ";
    
     color: gold;
    
    }

    Это правило добавляет звездочку золотого цвета перед текстом заголовка <h1> с помощью псевдоэлемента ::before.

    Специфичность селекторов

    Представьте, что вы в магазине и хотите купить футболку. Продавец предлагает несколько вариантов:

    • «просто футболка»: самая обычная, без дополнительных элементов;
    • «с принтом»: с интересным рисунком спереди;
    • «с капюшоном»: с уютным капюшоном;
    • «с принтом и капюшоном»: и с рисунком, и с капюшоном — самый интересный вариант.

    Специфичность CSS-селекторов — как тип футболки, особенности, которые делают ее более интересной и привлекательной для покупателя. 

    Чем более специфичен селектор, тем вероятнее, что он будет отвечать за стилизацию элемента. Например:

    • p — самый простой селектор, он выбирает все абзацы на странице; 

    • .my-class — более специфичный, он выбирает только абзацы с классом my-class;

    • #my-id — еще более специфичный, он выбирает только один абзац с идентификатором my-id.

    Если есть несколько правил CSS для одного и того же элемента, то применяется правило с более специфичным селектором. 

    Пример:

    p { color: red; } #все абзацы красные;
    
    .special { color: blue; } #абзацы с классом special синие.

    Если у вас есть абзац с классом special, то он будет синим, потому что селектор .special более специфичен, чем p. Специфичность помогает разработчикам управлять стилями на веб-странице и убедиться, что правила применяются верно.

    Комбинации селекторов CSS

    CSS-селекторы дают возможность точно указать, к каким элементам HTML-страницы применяются заданные стили. Но что, если нам нужно оформить не все элементы конкретного типа, а только те, которые обладают дополнительными характеристиками? В этом случае нужно использовать несколько селекторов одновременно. Комбинации разных селекторов позволяют создавать более детальные правила стилизации с помощью отбора элементов по нужному признаку. Существует несколько основных способов комбинировать селекторы:

    Пространственное сочетание

    parent descendant — выбирает все элементы descendant, которые являются потомками элемента parent.

    div p {
    
     font-style: bold;
    
     }

    Этот селектор выберет все абзацы <p>, которые находятся в <div>.

    Непосредственное сочетание 

    parent > child — выбирает все дочерние элементы child, которые являются непосредственными потомками элемента parent.

    ul > li {
    
     margin-left: 20px;
    
     }

    Этот селектор укажет на все элементы <li> списка, которые являются прямыми потомками элемента <ul>. 

    Соседнее сочетание

    sibling + next-sibling — выбирает все элементы next-sibling, которые являются непосредственными соседями элемента sibling.

    h2 + p {
    
     font-size: 1.2em;
    
     }

    Этот селектор выберет все абзацы <p>, которые следуют непосредственно за заголовком <h2>.

    Общий родственный комбинатор

    sibling ~ general-sibling — выбирает все элементы general-sibling, которые являются братьями элемента sibling, не обязательно непосредственными.

    .container ~ p {
    
     color: gray;
    
     }

    Этот селектор выберет все абзацы <p>, которые являются братьями элемента с классом .container, не важно, сколько элементов между ними.

    Приоритет в стиле: как CSS-селекторы решают споры

    Представьте, что у вас есть несколько друзей, каждый из которых хочет подарить вам футболку. Один предлагает красную, другой — синюю, а третий — зеленую. Какую футболку вы выберете? 

    В CSS со стилями происходит примерно то же самое. Если для одного элемента существует несколько правил стилизации, нужно определить, какое из них будет применено. 

    Приоритет селекторов CSS — это механизм, который решает, какое правило будет применено, если несколько правил конфликтуют. Факторы, влияющие на приоритет:

    • Специфичность: чем более специфичен селектор, тем выше его приоритет. Например, селектор #my-id более специфичен, чем .my-class, который более специфичен, чем p.
    • Важность: некоторые правила имеют более высокий приоритет по умолчанию — например, правила, определенные в style атрибуте HTML-элемента.
    • Порядок записи: правила, записанные позже в CSS-файле, имеют более высокий приоритет, если их специфичность одинакова.

    Чтобы измерить специфичность селекторов, используется концепция «веса» селектора. Вес вычисляется по следующей формуле:

    **0, 0, 0:** универсальный селектор * и селекторы по имени тега, например p;

    **0, 1, 0:** селекторы по классу .my-class;

    **1, 0, 0:** селекторы по идентификатору #my-id;

    **1, 1, 0:** комбинация селекторов по имени тега и классу, например h1.special.

    Например представьте, что у вас есть два правила:

    p { color: red; } #все абзацы красные;
    
    .important { color: blue; } #абзацы с классом important синие.

    Вес первого селектора (0, 0, 0), а второго (0, 1, 0). Второй селектор более специфичен, поэтому он «победит» и абзац с классом important будет синим.

    Подведем итог

    Селекторы в CSS — это своеобразные «адреса» для элементов HTML-страницы, позволяющие управлять их оформлением. Существуют различные типы селекторов — от простых, например «все абзацы», до более сложных, позволяющих выбирать элементы по их классам, идентификаторам и даже состоянию — например, при наведении курсора мыши. 

    Все они имеют разный вес, а также специфичность. Благодаря каскадированию и правилам приоритизации селекторов можно «решить» любые конфликты между правилами стилизации и сделать сайт более предсказуемым и управляемым.

    CSS-селекторы — многофункциональный инструмент, который позволяет создавать «цепляющие» и современные веб-страницы. Понимание принципов их работы — must know для фронтенд-разработчиков и веб-дизайнеров. Освоив использование селекторов, вы сможете эффективно и быстро управлять внешним видом сайта, чтобы сделать его привлекательным и «отзывчивым» к действиям посетителей.

    Перед тем как начать изучение CSS, стоит освоить основы HTML, понять, как работает язык, который определяет структуру веб-страницы. Используйте онлайн-курсы, учебники, чтобы практиковаться и углубить свои знания по HTML и CSS. Но не забывайте, что самый эффективный способ изучения CSS — практика! Создавайте простые веб-страницы, экспериментируйте со стилями, анализируйте код готовых сайтов. 

    Не бойтесь экспериментировать и делать ошибки. CSS — это язык творчества, и чем больше вы практикуетесь, тем лучше будете владеть им!

    Полезные ссылки

    Разбор

    Поделиться

    Скопировано
    0 комментариев
    Комментарии