Селекторы, псевдоклассы и псевдоэлементы

↑ 1.3 CSS и SASS · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: junior

Зачем это на собесе

Знание селекторов влияет на специфичность и качество CSS; спрашивают :is, :where, :has.

Объяснение

СелекторПримерСмысл
Тип, класс, iddiv, .card, #appпо тегу, классу, идентификатору
Атрибут[type="text"], [href^="https"], [data-x~="a"]по атрибуту (^= начало, $= конец, *= содержит)
Потомок / дочернийa b, a > bлюбой уровень / прямой потомок
Соседиa + b, a ~ bследующий / все следующие
Группаh1, h2несколько
Универсальный*все

Псевдоклассы (состояние):

:hover, :focus, :focus-visible, :active, :disabled, :checked, :first-child, :last-child, :nth-child(2n+1), :not(.x), :is(h1, h2), :where() (нулевая специфичность), :has(> img) (родитель по потомку), :empty, :root, :valid/:invalid.

Псевдоэлементы (часть элемента): ::before, ::after (с content), ::first-line, ::first-letter, ::placeholder, ::selection, ::marker.

.btn:not(:disabled):hover { background: var(--accent); }
.card:has(img) { display: grid; }
li:nth-child(odd) { background: #f5f5f5; }
.tag::before { content: "#"; opacity: .6; }

Синтаксис одним двоеточием — псевдокласс, двумя — псевдоэлемент (::before).

Нюансы и подводные камни

  • :nth-child считает по всем сиблингам, :nth-of-type — по типу.
  • ::before/::after не отображаются без content и не для замещаемых элементов (img).
  • Селектор :has() — мощный, но следите за производительностью на больших деревьях.
  • Слишком длинные селекторы связывают CSS со структурой DOM.
  • :focus против :focus-visible: последний показывает фокус только при клавиатурной навигации.

Практика

  1. Оформите таблицу «зебра» через :nth-child.
  2. Реализуйте иконку через ::before без лишней разметки.
  3. Выделите карточки с изображением через :has().

Вопросы с ответами

Связанные темы