CSS-селекторы. Виды CSS селекторов

14.07.2019

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

1. Селекторы по тэгам : h1

2. Селектор по id : #main

3. Селекторы по классам : .hidden

4. Селектор по нескольким классам

Записываются слитно без пробелов. Селекторы удовлетворяющие одновременно сразу нескольким условиям (логическое “И”). Стили будут применяться ко всем элементам, которые одновременно имеют и класс.hidden и класс.closed .

Hidden.closed

5. Контекстные селекторы

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

P strong ul .selected .header .menu a

6. Соседние селекторы

Выделяет последующий элемент. Записываются с помощью знака + . Читается как: применить свойства к селектор2 который должен быть сразу после селектор1 .

Стили применяются к элементу, подходящему под селектор2 , только если перед ним расположен элемент, подходящий под селектор1 .

  • ... .green + .selected {}

    В примере.green + .selected применит стили ко второму элементу, т.к. перед ним есть элемент с классом.green . Селектор.green + li тоже применит стили ко второму элементу, а селектор.selected + .green не сработает.

    7. Родственные селекторы

    Выделяет последующие элементы. Похожи на предыдущий, но с тем различием, что выбираются все следующие элементы , а не только первый элемент.

    • item

    Selected too

    Not selected ... ul ~ p {}

    В данном примере будут выбраны все элементы p, идущие за ul. В то время, как при использовании селектора ul + p будет выбран только первый элемент.

    8. Дочерние селекторы

    Записываются с помощью знака > и распространяются только на элементы первого уровня вложенности. На элементы вложенные в другие элементы не распространяются.

    Ul > li {}

    В случае контекстных селекторов они влияют на всех потомков (например если задать ul li) что не всегда удобно. Дочерние селекторы позволяют задать стили только для элементов первого уровня вложенности.

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

    9. Селекторы атрибутов

    Чаще всего используются при работе с формами. Селекторы атрибутов записываются с использованием квадратных скобок элемент[атрибут] .

    Примеры селекторов атрибутов:

    Input input div a a a a

    В примере выше ~ позволяет выделить определенный атрибут из списка атрибутов, разделенных запятой, например из:

    10. Глобальный селектор

    Селектор * выберет все элементы. Его также можно использовать для выделения дочерних элементов:

    * { margin: 0; padding: 0; } .content * { outline: none; }

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

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

    A:link a:visited a:active a:hover input:checked .clearfix:after {} div:not(#container) p::first-line p::first-letter

    Псевдокласс отрицания:not бывает очень полезным. Например, когда необходимо выбрать все div, за исключением того, который имеет id container.

    Селектор определяет, к какому элементу применять то или иное CSS-правило.

    Базовые селекторы

    Селекторы по элементу Этот базовый селектор выбирает элемент, к которому будем применятся правило.
    Синтаксис: элемент
    Пример: селектор input выберет все элементы используется для создания интерактивных элементов управления в веб-формах."> . Селекторы по классу Этот базовый селектор выбирает элементы, основываясь на значении их атрибута class .
    Синтаксис: .имяКласса
    Пример: селектор .index выберет все элементы с соответствующим классом (который был определен в атрибуте class="index" или похожем). Селекторы по идентификатору Этот базовый селектор выбирает элементы, основываясь на значении их id атрибута. Не забывайте, что идентификатор должен быть уникальным, т. е. использоваться только для одного элемента в HTML-документе.
    Синтаксис: #имяИдентификатора
    Пример: селектор #toc выберет элемент с идентификатором toc (который был определен в атрибуте id="toc" или похожем). Универсальный селектор Этот базовый селектор выбирает все элементы. Он также существует в варианте для локального и глобального пространств имен.
    Syntax: * ns|* *|*
    Example: селектор * выберет все эелементы. Селекторы по атрибуту Этот базовый селектор выбирает элементы, основываясь на одном из их атрибутов и/или его значении.
    Синтаксис:
    Пример: селектор выберет все элементы с атрибутом autoplay (независимо от его значения).

    Комбинаторы

    Комбинатор "+" выбирает элемент, который находится непосредственно после указанного элемента, если у них общий родитель.
    Синтаксис: A + B
    Пример: селектор ul + li выберет любой элемент, который находится непосредственно после элемента
      . Родственные селекторы Комбинатор"~" выбирает элементы, которые находятся после указанного элемента, если у них общий родитель.
      Синтаксис: A ~ B
      Пример: p ~ span выберет все элементы , которые находятся после элемента определяет собой абзац текста.">

      внутри одного родителя. Дочерние селекторы Комбинатор ">" выбирает элементы, которые являются дочерними непосредственно по отношению к указанному элементу.
      Синтаксис: A > B
      Пример: селектор ul > li выберет все элементы , которые находятся внутри элемента

        element. Вложенные селекторы Комбинатор " " выбирает элементы, которые находятся внутри указанного элемента (вне зависимости от уровня вложенности).
        Синтаксис: A B
        Пример: селектор div span выберет все элементы , которые находятся внутри элемента ) является базовым контейнером для элементов основного потока (flow content). Он не влияет на контент или формат пока не стилизован, используя CSS. Являясь "> по своему существу не представляет ничего. Между тем, он используется для группировки контента, что позволяет легко его стилизовать, используя ">
        .

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

        Псевдоэлементы являются абстрактными, в отличие от элементов HTML, отвечающих за представление. Например, в HTML нет отдельных элементов для обозначения первой буквы или первой строчки текста, или маркера для неупорядоченного списка. Псевдоэлементы обозначают такие объекты и дают возможность стилизовать их с помощью CSS.

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

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

        Спецификации

        Спецификация Статус

        CSS селекторы – одна из главных особенностей языка CSS. Селекторы позволяют обратиться как к группе элементов, так и к только одному из них.

        Селекторы в CSS

        Селекторы нужны для того, чтобы указать браузеру, к каким элементам применять стили, описанные в фигурных скобках.

        P{ Стили… }

        В данном случае селектором выступает p – тег абзацев. Такое правило добавит стили для всех абзацев на веб-странице.

        Какими бывают css селекторы?

        Селектор тега – самый простой . Он был продемонстрирован в примере. Чтобы записать его в css, нужно написать имя тега без угловых скобок. Стили будут применены ко всем элементам с таким тегом.
        Table{} – стили для всех таблиц
        Li{} – стили для всех пунктов списка
        A{} – стили для всех ссылок

        Стилевой класс – к любому элементу на веб-странице можно привязать стилевой класс. Даже к одной букве. Потом в css-файле можно обратиться к этому элементу, прописав для него собственные стили. Для этого нужно поставить точку и написать имя стилевого класса после нее. Примеры:
        .about{} – правила применятся ко всем элементам, которые имеют атрибут class = "about"
        .down{} – правила применятся ко всем элементам, которые имеют атрибут class = "down"
        .float{} – правила применятся ко всем элементам, которые имеют атрибут class = "float"

        Как видите, главное поставить точку. Стилевой класс можно привязывать к неограниченному количеству элементов. Элементу можно прописать несколько классов.

        Идентификатор – еще один вид селекторов. Один идентификатор можно задать только одному элементу. Он не может иметь двух идентификаторов, а также id привязанный к этому элементу, не может быть прописан нигде более.

        Задается он так:

        Абзац

        То есть также, как и класс, только используется атрибут id в качестве значения которого используется любое слово.

        Чтобы обратиться к элементу с идентификатором через css нужно написать значение id и перед ним поставить решетку.

        #first{ Font-size: 22px }

        Мы обратились к абзацу с id = first . Стиль применится только к нему. У остальных абзацев размер шрифта не изменится.

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

        В CSS есть один интересный вид селекторов – псевдоклассы. То есть классы, которые по умолчанию есть у элементов и их не нужно дополнительно задавать. Некоторые из них работают только для ссылок, а некоторые можно применить ко всем элементам. В любом случае css псевдоклассы сильно облегчают работу веб-разработчику.

        Псвевдокласс – это стилевой класс элемента, который мы на самом деле не задавали сами, просто он есть сам по себе. Например, увидев в html такой код:

        Абзац

        Вы абсолютно точно можете сказать, что у этого абзаца есть класс special , потому что он там прописан. Но псевдоклассы не нужно писать, они есть у элементов по умолчанию и в этом их преимущество в данном случае. Далее давайте рассмотрим самые популярные из них.

        Для ссылок

        Для полей ввода и ссылок

        :focus – стиль применяется к элементу, который получает фокус ввода.
        На самом деле для полей ввода появилось очень много новых классных псевдоклассов, но все они впервые введены в CSS3 , а в этой статье я хотел бы обсудить только самые простые. О CSS3 селекторах обязательно будет статья в дальнейшем.

        Для всех элементов

        1. :hover – стиль применяется при наведении на элемент
        2. :first-child – выбрать первый дочерний элемент
        3. :last-child – последний дочерний элемент
        4. :nth-child() – в скобках записывается число или формула, которая определяет, какие элементы будут выбраны.
        5. :first-of-type, :last-of-type, :nth-of-type() – работают практически аналогично предыдущим псевдоклассам. Разница только в том, что здесь учитывается тип элемента. Разницу можно почувствовать на примере:
          li:first-child – будет выбран первый пункт списка, но только в том случае, если в родительском блоке элемент li идет первым. Если до него стоит другой тег, не выберется ничего.
        6. li:first-of-type – будет выбран первый пункт списка из всех, что есть в родителе. При этом не важно, где они располагаются в коде. Надеюсь, разница понятна.
        7. :nth-last-child – работает аналогично:nth-child, но отсчет ведется от последнего элемента, а не от первого.
        8. :nth-last-of-type – аналогично:nth-last-child, но с учетом типа элемента.

        Это не все псевдоклассы, но самые популярные и необходимые. Собственно, все псевдоклассы помечаются в css одинаково, через двоеточие. К тому же можно комбинировать селекторы и получать интересные возможности:
        a:visited:active – стили для уже посещенной ссылки, на которую кликают.
        div:first-child:hover – стили для всех первых блоков в их родителях, на которые наводят курсор.

        Как видите, такие селекторы дают большие возможности в плане стилизации элементов. Используйте их и сможете без труда дотянуться до любых элементов.

        Объединение селекторов

        Еще одно важное правило, о котором нужно знать. Селекторы стилевых классов можно записать, не отделяя их друг от друга. Например:
        .class1.class2 – выберет те элементы, у которых есть оба этих класса.
        .class1.class3.class8 – выберет элементы, к которым привязаны все три стилевых класса.

        Вложенные селекторы

        Если отделять селекторы друг от друга пробелами, то можно оттянутся до нужного нам элемента. Примеры:
        Table td – выберет все ячейки, лежащие в таблицах
        Ul li a – выберет все ссылки, лежащие в пунктах списков (а пункты списков в свою очередь лежат в самих списках)
        .class1 p – выберет все абзацы с атрибутом class = “class1”
        .class2 p span – выберет все содержимое тегов , лежащее в абзацах с классом class2.

        Вкладывать и комбинировать таким образом можно сколько угодно раз. Примеры:
        #header .logo span:first-letter{} – выберет первую букву в спане логотипа, который расположен в шапке
        .class1.class2:hover{} – определит стиль при наведении мышки для элементов, которые имеют оба стилевых класса.

        Дочерние селекторы

        Если вам нужно задать стили для элементов родителя, которые являются НАПРЯМУЮ дочерними , то нужно прописать это так:
        Ul > li{} – выберет пункты списка, которые вложены в него напрямую, а не лежат в других тегах
        P > a{} – выберет только те ссылки в абзацах, которые лежат непосредственно в них, а не вложены в другие теги (которые, в свою очередь, уже вложены в абзацы)
        Пример:

        Если прописать такой селектор P > a , то применятся ли стили к ссылке в вышеприведенном примере? Нет, потому что она еще вложена в другой тег, то есть не является напрямую дочерней.

        Соседние селекторы

        Последнее, что мы сегодня рассмотрим. Если прописать в css так:
        .class1 + .class4 {} , то этот селектор выберет элемент с атрибутом class = "class4" , и этот элемент должен стоять в HTML-коде сразу же за элементом с классом class1. Только в этом случае все будет работать. Опять же рассмотрим на примере:

        Сработает ли вышеуказанный селектор (.class1 + .class4 {})? Нет, потому что элементы не стоят рядом. Между ними находится тег img . Вот если его удалить, тогда все заработает.

        Итак, мы с вами рассмотрели самые основные и наиболее простые селекторы. Наверняка этих знаний вам хватит, чтобы решить 95% проблем. В следующей статье я опишу некоторые более специфические css селекторы.

        Селекторы атрибутов

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

        Селекторы атрибутов, это те селекторы, в которых в квадратных скобках записывается атрибут, либо атрибут со значением. Несколько примеров, чтобы было понятно:
        * – выбирает все элементы, которые имеют атрибут href с любым значением.
        input – выбирает все input-элементы, у которых есть атрибут disable (все отключенные поля).
        input – выбирает все поля, тип которых password , то есть поля для ввода пароля.
        img – выбирает картинку, у которой задан атрибут src = "/logo.png" .

        Как видите, прописывать css селекторы атрибутов не так уж и сложно. Их самое главное отличие – квадратные скобки, в которых записывается либо просто атрибут, либо атрибут с его точным значением. Но на этом функционал этих селекторов не заканчивается.

        Продвинутые css селекторы атрибутов

        Все нижеперечисленные селекторы чувствительны к регистру.
        Поиск в начале строки
        div – выбирает все div-ы, у которых есть стилевой класс, начинающийся на "block" . Таким образом, будут выбраны, например, такие блоки: "block-head", "block-3", "blocknote" . Главное, чтобы в начале значения было ключевое слово.

        Поиск в конце строки
        A – выбирает все ссылки, у которых адрес заканчивается на.rar . Таким образом, если у вас на сайте можно что-то скачать, то вы можете добавить иконку рядом со всеми ссылками на архивные файлы.

        Поиск подстроки везде в значении
        span – выберет все теги span, у которых в имени класса в любом месте этого имени содержится “art”. Таким образом, будут выбраны, например, спаны с такими классами: party, clart, art-1.

        Поиск префиксов
        p – выберет абзацы со стилевым классом, которые имеют имя, либо точно совпадающее с “first”, либо содержащие префикс first- , с которого начинается имя класса.

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

        Последние два варианта редко где применяются и едва ли вам часто пригодятся, но для общего развития все-таки можно о них знать.

        Для чего могут пригодиться селекторы атрибутов

        С помощью подобных селекторов можно выбирать многие html-элемента, не задавая им стилевых классов. В некоторых случаях благодаря такому способу можно сократить код и упростить себе работу. Например, выше я приводил пример с иконкой для архивов. Тут появилась еще одна идея. Например, на своем сайте вы часто ссылаетесь на один другой ресурс (википедию, скажем) и хотите рядом с ссылками на википедию отображать специальную иконку, которой у других ссылок быть не должно.

        Реализовать это можно так:

        A {css-правила}

        На самом деле способов применения селекторов атрибутов можно придумать еще много. Они могут в какой-то мере упростить работу там, где это нужно. Используйте css и подписывайтесь на блог, чтобы узнавать больше о веб-разработке.

        Css3 селекторы и псевдоклассы

        О новых css3 селекторах, о которых не писал в прошлых статьях.

        Улучшение работы с формами

        Это новые псевдоклассы. В основном все они касаются новых возможностей форм.
        :enabled – псевдокласс выберет все активные поля. То есть те, в которые можно что-то записать или они хотя бы доступны для чтения.
        :disabled – противоположный псевдокласс, выбирает все заблокированные поля. Соответственно, с его помощью вы можете добавить дополнительные стили таким полям.
        :read-only – выбор всех input , которые доступны только для чтения.
        :read-write – выбираются все поля, которые доступны для редактирования.

        Добавление стилей с учетом валидности

        Также появились очень интересные псевдоклассы, с помощью которых вы можете назначить стили в зависимости от валидности или невалидности введенного значения. Раньше это можно было сделать только с помощью JavaScript .
        :valid – выбирает все поля, введенное значение в которых удовлетворяет требованиям. Сами требования обычно задают с помощью атрибута pattern. Также может зависеть от типа поля. Например, поле, в котором пишется адрес электронной почты, будет считаться невалидным, если во введенном значении нет @ .
        :invalid – соответственно, выбирает все невалидные поля, в которых значение не соответствует тому, что ожидается. Например, вы можете сделать цвет текста в таких полях красным:

        Input:invalid{ Color: red; }

        Теперь если мы пишем неправильные значения в полях, текст становится красным. Соответственно, можно также использовать картинки галочки и крестика для того, чтобы показывать пользователю, правильно ли он заполнил все.

        Стили для обязательных полей

        Также хотел бы отметить, что соответствующий псевдокласс появился и для обязательных полей.
        :required – выберет элементы, у которых есть данный атрибут. То есть все поля, обязательные к заполнению.
        :optional – противоположный класс, выберет поля, которые являются необязательными.

        Псевдокласс:not

        :not является своего рода антиселектором, который позволяет определить, к каким элементам НЕ ПРИМЕНЯТЬ стили. Пару примеров.
        A:not(:last-child){} – выберет все ссылки на странице, кроме последней.
        .nav:not(li){} – выберет все элементы с классом nav , но это не должны быть пункты списка (li).
        #article p:not(.special:first-child) – выберет все абзацы в блоке article , кроме первого абзаца с классом special.

        Как видите, в круглых скобках для псевдокласса записывается условие: что именно нужно исключить из выбора. В условии также можно записывать комбинированные селекторы, так что вы можете выбрать и исключить все, что угодно.

        Вот такой вот нужный иногда псевдокласс, он нужен не только в теории, но и на практике. Ах да, еще же вы можете продолжить составление селектора после:not (). Например:
        Div:not(#header) .wrap – выбирает все дивы c классом wrap , кроме дива с id = "header"

        Это были селекторы, которые появились в CSS3.

        Приоритет css селекторов

        Чтобы определить, какие стили являются более приоритетными, пользуйтесь простыми правилами:
        Идентификатор является самым приоритетным селектором. Если у элемента есть стилевой класс и id , и в обоих назначены одинаковые свойства с разными значениями, то будет выполнены те стили, которые записаны для идентификатор.

        Класс является более приоритетным селектором, чем селектор тега (p, table, ul). Псевдокласс имеет такой же вес, что и простой класс. p:first-line приоритетнее, чем.firstline , потому что во втором селекторе просто класс, а в первом — селектор тега + псевдокласс.

        Еще одно полезное правило — чем конкретнее селектор, тем более приоритетными являются стили для него. Например, между body и p битву выигрывает абзац, поскольку это более конкретный селектор, чем body (потому что это вся страница, то есть не очень конкретно). Table p , в свою очередь, конкретнее, чем просто p . В общем, просто знайте о таких правилах.

        Итог

        В этой статье не были рассмотрены селекторы атрибутов, но вообще о них я уже писал ранее. Я же желаю вам успешно изучать сайтостроение, в том числе и css селекторы.

        Хочу еще добавить, что если вы используете jQuery, то там свои селекторы, хотя очень похожие на эти, но небольшие различия есть.

    Похожие статьи