Поиск…


Вступление

Селекторы 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)

Заметки:

  1. Значение атрибута может быть окружено кавычками или двойными кавычками. Никакие кавычки вообще не могут работать, но это не действует в соответствии со стандартом CSS и не рекомендуется.

  2. Не существует единой интегрированной спецификации 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>

Живая демонстрация на JSBin

[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>

Живая демонстрация на JSBin

[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>

Живая демонстрация на JSBin

[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>

Живая демонстрация на JSBin

[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>

Живая демонстрация на JSBin

[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>

Живая демонстрация на JSBin

[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>

Живая демонстрация на JSBin

[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>

Живая демонстрация на JSBin

Специфика селекторов атрибутов

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>

Живая демонстрация на JSBin

В приведенном выше примере первые два элемента <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>

Живая демонстрация на JSBin

Вышеприведенный 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>

Живая демонстрация на JSBin

В приведенном выше примере выбираются только те элементы <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>

Живая демонстрация на JSBin

В приведенном выше примере выбираются все элементы <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;
}

Живая демонстрация на JSBin

См. Синтаксис фона здесь .

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> .

Живая демонстрация на JSBin

Селектор 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>

введите описание изображения здесь

jsFiddle



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow