Полное руководство по селекторам CSS
Это полное руководство по селекторам CSS создано для разработчиков, чтобы обеспечить быстрый и надежный доступ ко всем доступным селекторам в современном CSS. Руководство охватывает базовые селекторы, комбинаторы, атрибутные селекторы, псевдоклассы (структурные, действия пользователя, состояния форм, ссылки, логические), псевдоэлементы, расширенные селекторы и медиа-запросы. Оно содержит практические примеры с указанием поддержки браузеров, позволяя эффективно применять стили, избегать конфликтов, оптимизировать код и создавать современные адаптивные интерфейсы. Руководство удобно для быстрой справки во время разработки, проектирования сложных макетов и внедрения новых возможностей CSS.
📊 Basic Selectors
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
* | * | Универсальный селектор – выбирает все элементы | * { margin: 0; } | Все браузеры |
element | tagname | Селектор по типу – выбирает все элементы указанного типа | p { color: blue; } | Все браузеры |
.class | .classname | Селектор класса – выбирает элементы с указанным классом | .highlight { background: yellow; } | Все браузеры |
\#id | #idname | Селектор ID – выбирает элемент с указанным ID | #header { width: 100%; } | Все браузеры |
📊 Combinator Selectors
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
descendant | A B | Селектор потомка – выбирает B внутри A | div p { margin: 10px; } | Все браузеры |
child | A > B | Селектор дочернего элемента – выбирает прямого потомка B у A | ul > li { list-style: none; } | IE7+ |
adjacent sibling | A + B | Селектор смежного брата – выбирает B сразу после A | h1 + p { font-weight: bold; } | IE7+ |
general sibling | A \~ B | Селектор общих братьев – выбирает все B после A | h1 \~ p { color: gray; } | IE7+ |
📊 Attribute Selectors
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
\[attribute] | \[attr] | Выбирает элементы с указанным атрибутом | \[disabled] { opacity: 0.5; } | IE7+ |
\[attribute=value] | \[attr=val] | Выбирает элементы с атрибутом, равным значению | \[type="text"] { border: 1px solid; } | IE7+ |
\[attribute\~=value] | \[attr\~=val] | Выбирает элементы, атрибут которых содержит слово | \[class\~="button"] { cursor: pointer; } | IE7+ |
\[attribute^=value] | \[attr^=val] | Выбирает элементы, атрибут которых начинается с значения | \[href^="https"] { color: green; } | IE7+ |
\[attribute\$=value] | \[attr\$=val] | Выбирает элементы, атрибут которых заканчивается на значение | \[src\$=".jpg"] { border: 2px solid; } | IE7+ |
\[attribute*=value] | \[attr*=val] | Выбирает элементы, атрибут которых содержит значение | \[title*="important"] { font-weight: bold; } | IE7+ |
\[attribute="value" i] | \[attr="val" i] | Селектор атрибута без учета регистра | \[type="EMAIL" i] { text-transform: lowercase; } | Современные браузеры |
📊 Pseudo-class Selectors - Structural
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
:first-child | :first-child | Выбирает первый дочерний элемент | p:first-child { margin-top: 0; } | IE7+ |
:last-child | :last-child | Выбирает последний дочерний элемент | p:last-child { margin-bottom: 0; } | IE9+ |
:nth-child(n) | :nth-child(n) | Выбирает n-ый дочерний элемент | tr:nth-child(2n) { background: #f0f0f0; } | IE9+ |
:nth-last-child(n) | :nth-last-child(n) | Выбирает n-ый дочерний элемент с конца | li:nth-last-child(2) { color: red; } | IE9+ |
:nth-of-type(n) | :nth-of-type(n) | Выбирает n-ый элемент своего типа | h2:nth-of-type(odd) { color: blue; } | IE9+ |
:nth-last-of-type(n) | :nth-last-of-type(n) | Выбирает n-ый элемент типа с конца | p:nth-last-of-type(1) { font-weight: bold; } | IE9+ |
:first-of-type | :first-of-type | Выбирает первый элемент типа | img:first-of-type { float: left; } | IE9+ |
:last-of-type | :last-of-type | Выбирает последний элемент типа | p:last-of-type { margin-bottom: 20px; } | IE9+ |
:only-child | :only-child | Выбирает элемент, который единственный среди детей | p:only-child { text-align: center; } | IE9+ |
:only-of-type | :only-of-type | Выбирает элемент, который единственный среди своего типа | img:only-of-type { display: block; } | IE9+ |
:empty | :empty | Выбирает элементы без детей | div:empty { display: none; } | IE9+ |
📊 Pseudo-class Selectors - User Action
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
:hover | :hover | Выбирает элемент при наведении мыши | a:hover { color: red; } | Все браузеры |
:active | :active | Выбирает элемент при клике | button:active { transform: scale(0.95); } | Все браузеры |
:focus | :focus | Выбирает элемент с фокусом | input:focus { outline: 2px solid blue; } | Все браузеры |
:focus-visible | :focus-visible | Выбирает элемент при видимом фокусе | button:focus-visible { outline: 2px solid; } | Современные браузеры |
:focus-within | :focus-within | Выбирает элемент, содержащий элемент с фокусом | form:focus-within { border: 1px solid blue; } | Современные браузеры |
📊 Pseudo-class Selectors - Form States
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
:enabled | :enabled | Выбирает активные элементы формы | input:enabled { background: white; } | IE9+ |
:disabled | :disabled | Выбирает неактивные элементы формы | input:disabled { background: #f5f5f5; } | IE9+ |
:checked | :checked | Выбирает отмеченные чекбоксы/радио | input:checked + label { font-weight: bold; } | IE9+ |
:indeterminate | :indeterminate | Выбирает неопределенные чекбоксы | input:indeterminate { opacity: 0.5; } | IE9+ |
:valid | :valid | Выбирает валидные элементы формы | input:valid { border-color: green; } | IE10+ |
:invalid | :invalid | Выбирает невалидные элементы формы | input:invalid { border-color: red; } | IE10+ |
:required | :required | Выбирает обязательные поля | input:required { border-left: 3px solid red; } | IE10+ |
:optional | :optional | Выбирает необязательные поля | input:optional { border-left: 3px solid gray; } | IE10+ |
:read-only | :read-only | Выбирает элементы только для чтения | input:read-only { background: #f9f9f9; } | Современные браузеры |
:read-write | :read-write | Выбирает редактируемые элементы | input:read-write { background: white; } | Современные браузеры |
:placeholder-shown | :placeholder-shown | Выбирает элементы с отображаемым плейсхолдером | input:placeholder-shown { font-style: italic; } | Современные браузеры |
:in-range | :in-range | Выбирает элементы с допустимым диапазоном значения | input:in-range { border-color: green; } | Современные браузеры |
:out-of-range | :out-of-range | Выбирает элементы с недопустимым диапазоном значения | input:out-of-range { border-color: red; } | Современные браузеры |
📊 Pseudo-class Selectors - Link States
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
:link | :link | Выбирает непосещенные ссылки | a:link { color: blue; } | Все браузеры |
:visited | :visited | Выбирает посещенные ссылки | a:visited { color: purple; } | Все браузеры |
:any-link | :any-link | Выбирает все ссылки | a:any-link { text-decoration: underline; } | Современные браузеры |
:target | :target | Выбирает элемент, являющийся целью URL | :target { background: yellow; } | IE9+ |
📊 Pseudo-class Selectors - Logical
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
:not(selector) | :not(sel) | Выбирает элементы, не соответствующие селектору | p:not(.special) { color: gray; } | IE9+ |
:is(selector) | :is(sel1, sel2) | Выбирает элементы, соответствующие любому селектору | :is(h1, h2, h3) { margin-top: 0; } | Современные браузеры |
:where(selector) | :where(sel1, sel2) | Как :is, но с нулевой специфичностью | :where(h1, h2) { color: blue; } | Современные браузеры |
:has(selector) | :has(sel) | Выбирает элементы, содержащие другой селектор | div:has(img) { border: 1px solid; } | Современные браузеры |
📊 Pseudo-element Selectors
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
::before | ::before | Вставляет контент перед элементом | p::before { content: "→ "; } | IE9+ (:before IE8+) |
::after | ::after | Вставляет контент после элемента | p::after { content: " ←"; } | IE9+ (:after IE8+) |
::first-line | ::first-line | Выбирает первую строку текста | p::first-line { font-weight: bold; } | |
::first-letter | ::first-letter | Выбирает первую букву текста | p::first-letter { font-size: 2em; } | IE9+ (:first-letter IE6+) |
::selection | ::selection | Выбирает выделенный текст | ::selection { background: yellow; } | IE9+ |
::placeholder | ::placeholder | Выбирает текст плейсхолдера | input::placeholder { color: #999; } | Современные браузеры |
::backdrop | ::backdrop | Выбирает фон полноэкранного элемента | dialog::backdrop { background: rgba(0,0,0,0.5); } | Современные браузеры |
::marker | ::marker | Выбирает маркеры списка | li::marker { color: red; } | Современные браузеры |
📊 Advanced Selectors
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
:root | :root | Выбирает корневой элемент документа | :root { --main-color: blue; } | IE9+ |
:scope | :scope | Выбирает элемент области видимости | :scope > p { margin: 0; } | Современные браузеры |
:defined | :defined | Выбирает определенные кастомные элементы | custom-element:defined { opacity: 1; } | Современные браузеры |
:host | :host | Выбирает shadow host элемент | :host { display: block; } | Современные браузеры |
:host(selector) | :host(sel) | Выбирает shadow host, соответствующий селектору | :host(.active) { color: red; } | Современные браузеры |
:host-context(selector) | :host-context(sel) | Выбирает host в конкретном контексте | :host-context(.dark) { color: white; } | Современные браузеры |
::slotted(selector) | ::slotted(sel) | Выбирает контент слота | ::slotted(p) { margin: 0; } | Современные браузеры |
📊 Media Query Selectors
Selector | Syntax | Description | Example | Browser Support |
---|---|---|---|---|
@media | @media (condition) | Применяет стили в зависимости от медиа-условий | @media (max-width: 768px) { .nav { display: none; } } | IE9+ |
@supports | @supports (property: value) | Применяет стили, если браузер поддерживает свойство | @supports (display: grid) { .layout { display: grid; } } | Современные браузеры |
@container | @container (condition) | Применяет стили в зависимости от размера контейнера | @container (min-width: 400px) { .card { flex-direction: row; } } | Современные браузеры |
Quick Examples
css/* Базовые селекторы */
.header nav ul li a:hover {
color: #007bff;
text-decoration: none;
}
/* Атрибутные селекторы для форм */
input\[type="email"]:focus:valid {
border-color: green;
box-shadow: 0 0 5px rgba(0,255,0,0.3);
}
/* Псевдоэлементы для улучшенной стилизации */
.quote::before {
content: "“";
font-size: 2em;
color: #999;
}
/* Расширенные структурные селекторы */
.grid-item:nth-child(3n+1) {
margin-left: 0;
}
/* Современные логические селекторы */
:is(h1, h2, h3):not(.no-margin) {
margin-top: 2rem;
}
Рекомендации и лучшие практики:
Используйте специфические селекторы, чтобы избежать нежелательных конфликтов стилей. Предпочитайте классы вместо ID для повторного использования. Эффективно комбинируйте селекторы для уменьшения размера CSS. Тестируйте псевдоклассы в разных браузерах. Используйте :not() аккуратно, так как это может влиять на производительность. Помните, что псевдоэлементы создают виртуальные элементы в DOM. Учитывайте специфичность при использовании сложных комбинаций селекторов. Используйте атрибутные селекторы для динамического оформления форм. Проверяйте новые селекторы :has() и :is() на поддержку браузеров. Группируйте связанные селекторы для лучшей организации кода. Используйте селекторы-потомки умеренно, чтобы избежать чрезмерного вложения. Некоторые псевдоклассы работают только с определенными элементами.
🧠 Проверьте Свои Знания
Reference Knowledge Check
Проверьте свои знания CSS селекторов и их применения.
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху