Почему в CSS нет родительского селектора

«Почему в CSS нет родительского селектора» — вопрос из категории CSS, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Однако есть обходные пути:

  1. :has() (новый селектор) — позволяет выбрать родителя по условию потомка (пока поддержка неполная):
.parent:has(.child:hover) {
  background: red;
}
  1. JavaScript — для сложных случаев динамического изменения родителя.

  2. CSS-переменные — потомки могут изменять переменные, которые родитель использует:

.parent {
  --bg-color: blue;
  background: var(--bg-color);
}
.child:hover {
  --bg-color: red;
}

Основная причина — архитектурное решение для предсказуемости и производительности рендеринга.