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

  • 17.05.2019

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

Простой селектор атрибута

Применяется для установления стиля атрибута, если значение атрибута не играет никакой роли. И имеет следующий синтаксис:

[атрибут] { свойство1: значение; ... } селектор [атрибут] { свойство1: значение; ... }

В качестве примера попробуйте например прописать в таблице стилей вот такую вот строчку:

P { color: red; /* Цвет текста */ }

Цвет текста поменяется лишь в том случае, когда к тегу p будет применен атрибут выравнивания текста align

Атрибут со значением

Применяется тогда, когда задан атрибут с определенным значением. Синтаксис применения следующий:

[атрибут="значение"] { свойство1: значение; ... } селектор [атрибут="значение"] { свойство1: значение; ... }

На практике можно применить например следующее:

P { color: red; /* Цвет текста */ } p { color: navy; /* Цвет текста */ }

Значение атрибута начинается с определенного текста

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

Img { margin:15px auto; }

Синтаксис для такого способа задания стилей имеет следующий вид:

[атрибут^="значение"] { свойство1: значение; ... } селектор [атрибут^="значение"] { свойство1: значение; ... }

Значение атрибута оканчивается определенным текстом

Применяется довольно редко. Обычно этот способ задания стилей применяют при окончании названия каких-либо ссылок или разрешения файлов. Общий синтаксис такой:

[атрибут$="значение"] { свойство1: значение; ... } селектор [атрибут$="значение"] { свойство1: значение; ... }

Можете применить этот способ вот так:

Img {/* Если разрешение файла изображения заканчивается на.png */ margin:10px auto; } a { /* Если ссылка заканчивается на.com */ padding-right: 25px; }

Значение атрибута содержит указанный текст

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

[атрибут*="значение"] { свойство1: значение; ... } селектор [атрибут*="значение"] { свойство1: значение; ... }

В качестве примера я применил стиль для изменения вида ссылок где встречается название «sdcvoy»:

Селекторы атрибутов {background:#CCC}

Самостоятельное создание сайта | Язык HTML | Известный поисковик

В результате у меня получилось следующее:

Одно из нескольких значений атрибута

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

[атрибут~="значение"] { свойство1: значение; ... } селектор [атрибут~="значение"] { свойство1: значение; ... }

Предлагаю посмотреть небольшой пример:

Блок h2 { color: red;} Заголовок красного цвета

В результате должно получиться следующее:

Дефис в значении атрибута

Очень часто название значений атрибутов состоит из нескольких слов разделенных дефисом. И бывает так что первое слово в названии повторяется. Так вот для таких атрибутов можно отдельно задать стили. Делается это очень просто. Например вот так:

Div a { color:green; /* Цвет ссылок */ padding: 15px; /* Поля */ }

Общий синтаксис применения такой:

[атрибут|="значение"] { свойство1: значение; ... } селектор [атрибут|="значение"] { свойство1: значение; ... }

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

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 селекторах обязательно будет статья в дальнейшем.

Для всех элементов
  • :hover – стиль применяется при наведении на элемент
  • :first-child – выбрать первый дочерний элемент
  • :last-child – последний дочерний элемент
  • :nth-child() – в скобках записывается число или формула, которая определяет, какие элементы будут выбраны.
  • :first-of-type, :last-of-type, :nth-of-type() – работают практически аналогично предыдущим псевдоклассам. Разница только в том, что здесь учитывается тип элемента. Разницу можно почувствовать на примере:
    li:first-child – будет выбран первый пункт списка, но только в том случае, если в родительском блоке элемент li идет первым. Если до него стоит другой тег, не выберется ничего.
  • li:first-of-type – будет выбран первый пункт списка из всех, что есть в родителе. При этом не важно, где они располагаются в коде. Надеюсь, разница понятна.
  • :nth-last-child – работает аналогично:nth-child, но отсчет ведется от последнего элемента, а не от первого.
  • :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, то там свои селекторы, хотя очень похожие на эти, но небольшие различия есть.

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

    Важно! IE6 не понимает этот селектор.

    Подробнее про селектор атрибутов Выбор по наличию атрибута

    Выбираем все элементы, у которых существует (задан в HTML) данный атрибут.

    Синтаксис:

    Element

    Тут и далее Element , это какой-либо простой селектор (div , p , .header , div#popup , * и т.д.). Отсутствие в коде Element обозначает, что в этом месте стоит , который, в этой ситуации можно опустить.

    Пример. Выделим жирным шрифтом все элементы, для которых задана всплывающая подсказка:

    { font-weight: bold; }

    Выбор по точному значению атрибута

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

    Синтаксис:

    Element

    Пример. Зададим цвет фона только для тех , значение атрибута которых в точности равно "submit" (для кнопки отправки формы):

    Input { background: #0f0; }

    Выбор по частичному значению атрибута

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

    Синтаксис:

    Element

    Пример. Зададим обтекание для тех элементов , в перечне значений атрибута , которых присутствует "sideBar" (вот это-то и есть, фактически, ):

    Div { float: left; }

    Выбор по конкретным значениям атрибутов

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

    Синтаксис:

    Element

    Пример. Зададим стили для всех элементов, язык которых задан в атрибутах, как английский (en, en-us, en-gb, en-au и т.д.):

    { /* какие-то стили */ }

    Новые селекторы атрибутов в CSS3

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

    Выбор по началу значения атрибута

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

    Синтаксис:

    Element

    Пример. Зададим стили для всех элементов, атрибут которых начинается со слова "Hint":

    { /* какие-то стили */ }

    Выбор по окончанию значения атрибута

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

    Синтаксис:

    Element

    Пример. Зададим стили для всех элементов , которые ссылаются на гифки:

    Img { /* какие-то стили */ }

    Выбор по подстроке в значении атрибута

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

    Синтаксис:

    Element

    Пример. Зададим стили для всех ссылок, в адресах которых есть подстрока "сайт":

    A { /* какие-то стили */ }

    Это тоже главная