CSS
Селекторы
Поиск…
Вступление
Селекторы CSS идентифицируют определенные HTML-элементы в качестве целей для стилей CSS. В этом разделе рассказывается о том, как селектор CSS нацелен на элементы HTML. Селекторы используют широкий диапазон из более чем 50 методов выбора, предлагаемых языком CSS, включая элементы, классы, идентификаторы, псевдоэлементы и псевдоклассы и шаблоны.
Синтаксис
- # id
- , имя_класса
- : псевдо-имя класса
- :: псевдо-elementname
- [ attr ] / * имеет атрибут attr . * /
- [ attr = " value "] / * имеет атрибут attr , а его значение точно « value ». * /
- [ attr ~ = " значение "] / * имеет атрибут attr , а его значение при разбиении по пробелу содержит « значение ». * /
- [ attr | = " value "] / * имеет атрибут attr , а его значение точно « value », или его значение начинается с « value - ». * /
- [ attr ^ = " value "] / * имеет атрибут attr , а его значение начинается с " value ". * /
- [ attr $ = " value "] / * имеет атрибут attr , а его значение заканчивается « значением ». * /
- [ attr * = " значение "] / * имеет атрибут attr , а его значение содержит « значение ». * /
- имя элемента
- *
замечания
- Иногда вы видите двойные двоеточия (
::
:) вместо одного (:
. Это способ отделить псевдоклассы от псевдоэлементов . - Старые браузеры, как Internet Explorer 8, поддерживают только один двоеточие (
:
) для определения псевдо-элементов. - В отличие от псевдоклассов, для каждого селектора может использоваться только один псевдоэлемент, если он присутствует, он должен появляться после последовательности простых селекторов, которые представляют объекты селектора (будущая версия спецификации W3C может допускать множественные псевдоэлементы на селектор ).
Селекторы атрибутов
обзор
Селекторы атрибутов могут использоваться с различными типами операторов, которые соответствующим образом меняют критерии выбора. Они выбирают элемент, используя наличие заданного атрибута или значения атрибута.
Селектор (1) | Соответствующий элемент | Выбирает элементы ... | Версия CSS |
---|---|---|---|
[attr] | <div attr> | С атрибутом attr | 2 |
[attr='val'] | <div attr="val"> | Где атрибут attr имеет значение val | 2 |
[attr~='val'] | <div attr="val val2 val3"> | Где val появляется в список attr разделенных attr | 2 |
[attr^='val'] | <div attr="val1 val2"> | Где значение attr начинается с val | 3 |
[attr$='val'] | <div attr="sth aval"> | Где значение attr заканчивается значением val | 3 |
[attr*='val'] | <div attr="somevalhere"> | Где attr содержит val где угодно | 3 |
[attr|='val'] | <div attr="val-sth etc"> | Где значение attr равно точно val , или начинается с val и сразу затем - (U + 002D) | 2 |
[attr='val' i] | <div attr="val"> | Если attr имеет значение val , игнорируя буквенный корпус val . | 4 (2) |
Заметки:
Значение атрибута может быть окружено кавычками или двойными кавычками. Никакие кавычки вообще не могут работать, но это не действует в соответствии со стандартом CSS и не рекомендуется.
Не существует единой интегрированной спецификации CSS4, поскольку она разделяется на отдельные модули. Тем не менее, существуют модули уровня 4. См. Поддержку браузера .
подробности
[attribute]
Выбирает элементы с заданным атрибутом.
div[data-color] {
color: red;
}
<div data-color="red">This will be red</div>
<div data-color="green">This will be red</div>
<div data-background="red">This will NOT be red</div>
[attribute="value"]
Выбирает элементы с заданным атрибутом и значением.
div[data-color="red"] {
color: red;
}
<div data-color="red">This will be red</div>
<div data-color="green">This will NOT be red</div>
<div data-color="blue">This will NOT be red</div>
[attribute*="value"]
Выбирает элементы с заданным атрибутом и значением, где данный атрибут содержит заданное значение где угодно (в качестве подстроки).
[class*="foo"] {
color: red;
}
<div class="foo-123">This will be red</div>
<div class="foo123">This will be red</div>
<div class="bar123foo">This will be red</div>
<div class="barfooo123">This will be red</div>
<div class="barfo0">This will NOT be red</div>
[attribute~="value"]
Выбирает элементы с заданным атрибутом и значением, где данное значение отображается в списке, разделенном пробелами.
[class~="color-red"] {
color: red;
}
<div class="color-red foo-bar the-div">This will be red</div>
<div class="color-blue foo-bar the-div">This will NOT be red</div>
[attribute^="value"]
Выбирает элементы с заданным атрибутом и значением, где данный атрибут начинается со значения.
[class^="foo-"] {
color: red;
}
<div class="foo-123">This will be red</div>
<div class="foo-234">This will be red</div>
<div class="bar-123">This will NOT be red</div>
[attribute$="value"]
Выбирает элементы с заданным атрибутом и значением, где данный атрибут заканчивается заданным значением.
[class$="file"] {
color: red;
}
<div class="foobar-file">This will be red</div>
<div class="foobar-file">This will be red</div>
<div class="foobar-input">This will NOT be red</div>
[attribute|="value"]
Выбирает элементы с заданным атрибутом и значением, где значение атрибута является точно заданным значением или является точно заданным значением, за которым следует -
(U + 002D)
[lang|="EN"] {
color: red;
}
<div lang="EN-us">This will be red</div>
<div lang="EN-gb">This will be red</div>
<div lang="PT-pt">This will NOT be red</div>
[attribute="value" i]
Выбирает элементы с заданным атрибутом и значением, где значение атрибута может быть представлено как Value
, VALUE
, vAlUe
или любая другая возможность vAlUe
регистра.
[lang="EN" i] {
color: red;
}
<div lang="EN">This will be red</div>
<div lang="en">This will be red</div>
<div lang="PT">This will NOT be red</div>
Специфика селекторов атрибутов
0-1-0
То же, что и селектор классов и псевдоклассы.
*[type=checkbox] // 0-1-0
Обратите внимание, что это означает, что селектор атрибутов может использоваться для выбора элемента по его идентификатору на более низком уровне специфичности, чем если бы он был выбран с помощью селектора ID : [id="my-ID"]
нацелен на тот же элемент, что и #my-ID
но с более низкой специфичностью.
Подробнее см. Раздел «Синтаксис» .
Комбинаторы
обзор
селектор | Описание |
---|---|
div span | Селектор потомков (все <span> s, которые являются потомками <div> ) |
div > span | Селектор детей (все <span> s, которые являются прямым дочерним элементом <div> ) |
a ~ span | Общий селектор Sibling (все <span> s, которые являются братьями и сестрами после <a> ) |
a + span | Смежный селектор (все <span> s, которые сразу после <a> ) |
Примечание. Селектор селектора отображает целевые элементы, которые появляются после них в исходном документе. CSS, по своей природе (он каскадирует), не может ориентироваться на предыдущие или родительские элементы. Однако, используя свойство flex
order
, предыдущий селектор для сиблинга может быть смоделирован на визуальных носителях .
Комбинатор потомков: selector selector
Комбинатор потомков, представленный по меньшей мере одним пространственным символом ( ), выбирает элементы, которые являются потомками определенного элемента. Этот комбинатор выбирает всех потомков элемента (из дочерних элементов вниз).
div p {
color:red;
}
<div>
<p>My text is red</p>
<section>
<p>My text is red</p>
</section>
</div>
<p>My text is not red</p>
В приведенном выше примере первые два элемента <p>
выбираются, поскольку они оба являются потомками <div>
.
Детский комбинатор: selector > selector
Ребенок ( >
) комбинатор используются для выбора элементов , которые являются детьми, или прямыми потомками, указанного элемента.
div > p {
color:red;
}
<div>
<p>My text is red</p>
<section>
<p>My text is not red</p>
</section>
</div>
Вышеприведенный CSS выбирает только первый элемент <p>
, так как он является единственным абзацем, непосредственно выходящим из <div>
.
Второй элемент <p>
не выбран, потому что он не является прямым дочерним элементом <div>
.
Смежный сиблинг-комбинатор: selector + selector
Смежный смежный ( +
) комбинатор выбирает элемент-сиблинг, который немедленно следует за определенным элементом.
p + p {
color:red;
}
<p>My text is not red</p>
<p>My text is red</p>
<p>My text is red</p>
<hr>
<p>My text is not red</p>
В приведенном выше примере выбираются только те элементы <p>
которым непосредственно предшествует другой элемент <p>
.
Общий сиблинг Combinator: selector ~ selector
Комбинатор общего родства ( ~
) выбирает всех братьев и сестер, следующих за указанным элементом.
p ~ p {
color:red;
}
<p>My text is not red</p>
<p>My text is red</p>
<hr>
<h1>And now a title</h1>
<p>My text is red</p>
В приведенном выше примере выбираются все элементы <p>
которым предшествует другой элемент <p>
, независимо от того, находятся ли они непосредственно рядом.
Селектора имен классов
Селектор имен классов выбирает все элементы с именем целевого класса. Например, имя класса .warning
будет выбирать следующий элемент <div>
:
<div class="warning">
<p>This would be some warning copy.</p>
</div>
Вы также можете комбинировать имена классов с целевыми элементами более конкретно. Давайте рассмотрим пример выше, чтобы продемонстрировать более сложный выбор класса.
CSS
.important {
color: orange;
}
.warning {
color: blue;
}
.warning.important {
color: red;
}
HTML
<div class="warning">
<p>This would be some warning copy.</p>
</div>
<div class="important warning">
<p class="important">This is some really important warning copy.</p>
</div>
В этом примере все элементы с .warning
класса будут иметь синий цвет текста, элементы с .important
класса с имеют оранжевый цвет текста, а также все элементы , которые имеют как .important
и .warning
имени класса будут иметь красный текст цвет.
Обратите внимание, что внутри CSS объявление .warning.important
не имеет пробелов между двумя именами классов. Это означает , что он будет найти только элементы , которые содержат оба названия класса warning
и important
в своем class
атрибута. Эти имена классов могут быть в любом порядке элемента.
Если бы пространство было включено между двумя классами в объявлении CSS, оно будет выбирать только элементы, которые имеют родительские элементы с .warning
классов .warning
и дочерними элементами с именами .important
class.
Селекторы идентификаторов
Селекторы идентификаторов выбирают элементы DOM с целевым идентификатором. Для выбора элемента по определенному идентификатору в CSS используется префикс #
.
Например, следующий элемент HTML div
...
<div id="exampleID">
<p>Example</p>
</div>
... можно выбрать с помощью #exampleID
в CSS, как показано ниже:
#exampleID {
width: 20px;
}
Примечание . Спецификации HTML не позволяют использовать несколько элементов с одинаковым идентификатором
Псевдо-классы
Псевдоклассы - это ключевые слова, которые позволяют выбирать на основе информации, которая находится за пределами дерева документов или которая не может быть выражена другими селекторами или комбинаторами. Эта информация может быть связана с определенным состоянием ( состояние и динамические псевдо-классы), в местах ( структурные и нацелены на псевдо-классы), к отрицанию прежнего ( отрицание псевдо-класса) или на языках ( языки псевдо-класса). Примеры включают, была ли соблюдена ссылка ( :visited
), мышь над элементом ( :hover
), флажок установлен ( :checked
отмечен) и т. Д.
Синтаксис
selector:pseudo-class {
property: value;
}
Список псевдоклассов:
название | Описание |
---|---|
:active | Применяется к любому элементу, который активирован (т.е. нажат) пользователем. |
:any | Позволяет создавать наборы связанных селекторов, создавая группы, которые включенные элементы будут соответствовать. Это альтернатива повторению всего селектора. |
:target | Выбирает текущий активный элемент #news (нажата на URL-адрес содержащий это имя привязки) |
:checked | Применяется к радио, флажкам или элементам опций, которые отмечены или переключается в состояние «включено». |
:default | Представляет собой элемент пользовательского интерфейса, который по умолчанию используется для группы аналогичные элементы. |
:disabled | Применяется к любому элементу пользовательского интерфейса, находящемуся в отключенном состоянии. |
:empty | Применяется к любому элементу, у которого нет детей. |
:enabled | Применяется к любому элементу пользовательского интерфейса, который находится в разрешенном состоянии. |
:first | Используется в сочетании с правилом @page , это выбирает первую страницу в печатный документ. |
:first-child | Представляет собой любой элемент, который является первым дочерним элементом его родителя. |
:first-of-type | Применяется, когда элемент является первым из выбранного типа элемента внутри его родителя. Это может быть или не быть первым ребенком. |
:focus | Применяется к любому элементу, который имеет фокус пользователя. Это может быть дано клавиатура пользователя, события мыши или другие формы ввода. |
:focus-within | Может использоваться для выделения целого раздела, когда один элемент внутри него сфокусирован. Он соответствует любому элементу, который соответствует совпадению псевдокласса: фокус или имеет направленный потомок. |
:full-screen | Применяется к любому элементу, отображаемому в полноэкранном режиме. Он выбирает весь стек элементов, а не только элемента верхнего уровня. |
:hover | Применяется к любому элементу, наводимому указательным устройством пользователя, но не активирован. |
:indeterminate | Применяет элементы интерфейса радио или флажка, которые не проверяются ни не контролируются, но находятся в неопределенном состоянии. Это может быть связано с атрибут элемента или DOM-манипуляция. |
:in-range | Псевдокласс класса :in-range соответствует, когда элемент имеет его атрибут значения внутри указанных ограничений диапазона для этого элемента. Это позволяет странице дать обратную связь, что значение, определенное в настоящее время использование элемента находится в пределах диапазона. |
:invalid | Применяется к элементам <input> , значения которых недопустимы в соответствии с тип, указанный в атрибуте type= . |
:lang | Применяется к любому элементу, у которого есть элемент <body> обозначенный lang= attribute. Для того чтобы псевдокласс был действительным, он должен содержат действительный двух- или трехбуквенный код языка. |
:last-child | Представляет любой элемент, который является последним дочерним элементом его родителя. |
:last-of-type | Применяется, когда элемент является последним из выбранного типа элемента внутри его родитель. Это может быть или не быть последним ребенком. |
:left | Используется в сочетании с правилом @page , это выбирает все левое страниц в печатном документе. |
:link | Применяется к любым ссылкам, которые не были посещены пользователем. |
:not() | Применяется ко всем элементам, которые не соответствуют значению, переданному ( :not(p) или :not(.class-name) например. Оно должно иметь значение, которое должно быть действителен и может содержать только один селектор. Однако вы можете объединить несколько :not селекторов. |
:nth-child | Применяется, когда элемент является n элементом его родителя, где n может быть целым числом, математическим выражением (например, n+3 ) или ключевыми словами odd или even . |
:nth-of-type | Применяется, когда элементом является n элемент его родительского элемента тот же тип элемента, где n может быть целым числом, математическим выражение (например, n+3 ) или ключевые слова odd или even . |
:only-child | Псевдокласс класса :only-child представляет любой элемент который является единственным ребенком его родителя. Это то же самое, что и :first-child:last-child или :nth-child(1):nth-last-child(1) , но с более низкой специфичностью. |
:optional | :optional псевдо-класс CSS представляет любой элемент который не имеет требуемого атрибута, установленного на нем. Это позволяет формы, чтобы легко указывать необязательные поля и соответственно их стиль. |
:out-of-range | Псевдокласс класса :out-of-range соответствует, когда элемент имеет свой value за пределами указанных ограничений диапазона для этого элемента. Он позволяет странице дать обратную связь, что значение, определяемое в настоящее время с помощью элемент выходит за пределы диапазона. Значение может быть вне диапазона, если оно либо меньше, либо больше максимального и минимального значений. |
:placeholder-shown | Экспериментальный. Применяется к любому элементу формы, отображающему текст заполнителя. |
:read-only | Применяется к любому элементу, который не редактируется пользователем. |
:read-write | Применяется к любому элементу, который редактируется пользователем, например, <input> . |
:right | Используется в сочетании с правилом @page , это выбирает все правильные страницы в печатный документ. |
:root | соответствует корневому элементу дерева, представляющего документ. |
:scope | CSS-псевдокласс сопоставляет элементы, которые являются ссылочными точка для выбора. |
:target | Выбирает текущий активный элемент #news (нажата на URL-адрес содержащий это имя привязки) |
:visited | Применяется к любым ссылкам, которые были посещены пользователем. |
:visited
pseudoclass не может быть использован для большинства стиля во многих современных браузерах больше , потому что это дыра в безопасности. См. Эту ссылку для справки.
Основные селекторы
селектор | Описание |
---|---|
* | Универсальный селектор (все элементы) |
div | Селектор тегов (все элементы <div> ) |
.blue | Селектор классов (все элементы с классом blue ) |
.blue.red | Все элементы с классом blue и red (тип составного селектора) |
#headline | Селектор ID (элемент с атрибутом «id», установленным в headline ) |
:pseudo-class | Все элементы с псевдоклассом |
::pseudo-element | Элемент, который соответствует псевдоэлементу |
:lang(en) | Элемент, который соответствует: lang-декларации, например <span lang="en"> |
div > p | дочерний селектор |
Примечание . Значение идентификатора должно быть уникальным на веб-странице. Нарушением стандарта HTML является использование значения идентификатора более одного раза в одном и том же дереве документов.
Полный список селекторов можно найти в спецификации CSS Selectors Level 3 .
Как стиль ввода диапазона
HTML
<input type="range"></input>
CSS
эффект | Псевдоселектор |
---|---|
Большой палец | input[type=range]::-webkit-slider-thumb, input[type=range]::-moz-range-thumb, input[type=range]::-ms-thumb |
трек | input[type=range]::-webkit-slider-runnable-track, input[type=range]::-moz-range-track, input[type=range]::-ms-track |
OnFocus | input[type=range]:focus |
Нижняя часть дорожки | input[type=range]::-moz-range-progress, input[type=range]::-ms-fill-lower (невозможно в браузерах WebKit в настоящее время - требуется JS) |
Глобальное логическое значение с флажком: проверено и ~ (общий комбинированный блок)
С помощью селектора вы можете легко реализовать глобальное доступное логическое значение без использования JavaScript.
Добавить boolean как флажок
В самом начале вашего документа добавьте столько булевых, сколько хотите, с уникальным id
и hidden
набором атрибутов:
<input type="checkbox" id="sidebarShown" hidden />
<input type="checkbox" id="darkThemeUsed" hidden />
<!-- here begins actual content, for example: -->
<div id="container">
<div id="sidebar">
<!-- Menu, Search, ... -->
</div>
<!-- Some more content ... -->
</div>
<div id="footer">
<!-- ... -->
</div>
Измените значение boolean
Вы можете переключить логическое значение, добавив label
с набором атрибутов for
:
<label for="sidebarShown">Show/Hide the sidebar!</label>
Доступ к логическому значению с помощью CSS
Обычный селектор (например .color-red
) указывает свойства по умолчанию. Их можно переопределить, следуя селекторам true
/ false
:
/* true: */
<checkbox>:checked ~ [sibling of checkbox & parent of target] <target>
/* false: */
<checkbox>:not(:checked) ~ [sibling of checkbox & parent of target] <target>
Обратите внимание, что <checkbox>
, [sibling ...]
и <target>
должны быть заменены соответствующими селекторами. [sibling ...]
может быть конкретным селектором (часто, если вы ленивы) просто *
или ничего, если цель уже является братом этого флажка.
Примерами приведенной выше структуры HTML являются:
#sidebarShown:checked ~ #container #sidebar {
margin-left: 300px;
}
#darkThemeUsed:checked ~ #container,
#darkThemeUsed:checked ~ #footer {
background: #333;
}
В бою
Смотрите эту скрипту для реализации этих глобальных логических элементов.
CSS3: пример выбора диапазона
<style>
input:in-range {
border: 1px solid blue;
}
</style>
<input type="number" min="10" max="20" value="15">
<p>The border for this value will be blue</p>
Псевдокласс класса :in-range
соответствует, когда элемент имеет свой атрибут значения внутри указанных ограничений диапазона для этого элемента. Он позволяет странице дать обратную связь, что значение, определяемое в настоящее время с помощью элемента, находится в пределах диапазона. [1]
Детский псевдокласс
«Псевдо-класс: nth-child (a + b) CSS соответствует элементу, у которого есть дочерние элементы + b-1 перед ним в дереве документов, для заданного положительного или нулевого значения для n" - MDN: nth-child
псевдо-селектор | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|
:first-child | ✔ | |||||||||
:nth-child(3) | ✔ | |||||||||
:nth-child(n+3) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
:nth-child(3n) | ✔ | ✔ | ✔ | |||||||
:nth-child(3n+1) | ✔ | ✔ | ✔ | ✔ | ||||||
:nth-child(-n+3) | ✔ | ✔ | ✔ | |||||||
:nth-child(odd) | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
:nth-child(even) | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
:last-child | ✔ | |||||||||
:nth-last-child(3) | ✔ |
Выберите элемент, используя свой идентификатор, без высокой специфичности идентификатора
Этот трюк помогает вам выбрать элемент с использованием идентификатора в качестве значения для селектора атрибутов, чтобы избежать высокой специфичности селектора идентификаторов.
HTML:
<div id="element">...</div>
CSS
#element { ... } /* High specificity will override many selectors */
[id="element"] { ... } /* Low specificity, can be overridden easily */
A. The: не пример псевдокласса & B.: focus-in CSS псевдокласс
A. Синтаксис представлен выше.
Следующий селектор соответствует всем <input>
элементам в HTML-документе, которые не отключены и не имеют класса .example
:
HTML:
<form>
Phone: <input type="tel" class="example">
E-mail: <input type="email" disabled="disabled">
Password: <input type="password">
</form>
CSS:
input:not([disabled]):not(.example){
background-color: #ccc;
}
Псевдокласс класса :not()
также будет поддерживать разделенные запятыми селектора в Selectors Level 4:
CSS:
input:not([disabled], .example){
background-color: #ccc;
}
См. Синтаксис фона здесь .
B. Псевдокласс класса CSS.
HTML:
<h3>Background is blue if the input is focused .</p>
<div>
<input type="text">
</div>
CSS:
div {
height: 80px;
}
input{
margin:30px;
}
div:focus-within {
background-color: #1565C0;
}
Пример селектора псевдо-класса с единственным дочерним элементом
:only-child
CSS
псевдо-класс представляет собой любой элемент , который является единственным потомком своего родителя.
HTML:
<div>
<p>This paragraph is the only child of the div, it will have the color blue</p>
</div>
<div>
<p>This paragraph is one of the two children of the div</p>
<p>This paragraph is one of the two children of its parent</p>
</div>
CSS:
p:only-child {
color: blue;
}
В приведенном выше примере выбирается элемент <p>
который является единственным дочерним элементом из его родителя, в этом случае a <div>
.
Селектор last-of-type
:last-of-type
выбирает элемент, который является последним дочерним элементом определенного типа его родителя. В приведенном ниже примере css выбирает последний абзац и последний заголовок h1
.
p:last-of-type {
background: #C5CAE9;
}
h1:last-of-type {
background: #CDDC39;
}
<div class="container">
<p>First paragraph</p>
<p>Second paragraph</p>
<p>Last paragraph</p>
<h1>Heading 1</h1>
<h2>First heading 2</h2>
<h2>Last heading 2</h2>
</div>