← Назад к вопросам

Что будет выбрано, если указать селектор *?

1.8 Middle🔥 83 комментариев
#HTML и CSS

Комментарии (3)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Селектор * — универсальный селектор в CSS

Селектор *, также известный как универсальный селектор или селектор-звездочка, выбирает все элементы в документе, независимо от их типа, класса, идентификатора или других атрибутов. Давайте подробно разберем его поведение, особенности использования и практическую значимость.

Что именно выбирает *?

* соответствует любому элементу HTML в пределах области действия (scope), в которой он применяется. Например:

/* Выберет ВСЕ элементы на странице */
* {
  margin: 0;
  padding: 0;
}

Этот код удалит все стандартные отступы и поля у каждого элемента — от <html> и <body> до мельчайших <span> и <a>.

Область действия и комбинирование

Универсальный селектор может использоваться как самостоятельно, так и в комбинации с другими селекторами для уточнения области выбора:

/* Выберет все элементы внутри div с классом .container */
.container * {
  border: 1px solid #ccc;
}

/* Выберет все дочерние элементы первого уровня в section */
section > * {
  padding: 10px;
}

/* Комбинация с псевдоклассами — выберет все элементы при наведении */
*:hover {
  transition: all 0.3s ease;
}

Особенности и подводные камни

  1. Производительность: Исторически считалось, что * — медленный селектор, так как браузер должен проверить каждый элемент на странице. В современных браузерах это не является критической проблемой для большинства случаев, но при работе с очень большими DOM-деревьями стоит быть осторожным.

  2. Наследование CSS-правил: Важно понимать, что не все свойства наследуются. Например, * { border: 1px solid red; } задаст рамку каждому элементу, а * { color: blue; } изменит цвет текста для всех, но это свойство и так наследуется.

  3. Влияние на псевдоэлементы: По умолчанию * не выбирает псевдоэлементы (::before, ::after). Для их включения нужно явно указать:

    *,
    *::before,
    *::after {
      box-sizing: border-box; /* Популярный сброс */
    }
    

Практическое применение

1. Сброс стилей (CSS Reset/Normalize)

Одно из самых распространенных использований — обнуление margin и padding для кроссбраузерной согласованности:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

2. Изменение боксовой модели

Установка box-sizing: border-box для всех элементов (включая псевдоэлементы) упрощает расчеты размеров:

*,
*::before,
*::after {
  box-sizing: border-box;
}

3. Глобальные настройки

Например, плавная прокрутка для всей страницы:

* {
  scroll-behavior: smooth;
}

4. Отладка

Временное выделение всех элементов для визуальной проверки структуры:

* {
  outline: 1px solid rgba(255, 0, 0, 0.1);
}

Специфичность (Specificity)

Универсальный селектор имеет нулевую специфичность (0,0,0,0), что означает:

  • Он не увеличивает вес правила
  • Его легко переопределить любым другим селектором
* { color: black; }   /* Специфичность: 0,0,0,0 */
div { color: blue; }  /* Специфичность: 0,0,0,1 — победит */
.text { color: red; } /* Специфичность: 0,0,1,0 — победит */

Отличие от :where() и :is()

В современных CSS появились функциональные псевдоклассы, которые тоже имеют нулевую специфичность:

/* Оба правила имеют специфичность 0, но :where() более явно выражает intent */
* { color: black; }
:where(*) { color: black; }

Заключение

Универсальный селектор * — мощный инструмент, который выбирает абсолютно все элементы в своей области видимости. Несмотря на кажущуюся простоту, он требует осмысленного применения:

  • Используйте для глобальных настроек, сброса стилей, изменения боксовой модели
  • Избегайте в сложных комбинаторах в больших проектах, где возможны проблемы с производительностью
  • Помните о нулевой специфичности и легкости его переопределения
  • Учитывайте современные альтернативы типа :where() для более семантичного кода

Правильное использование * может значительно упростить базовую стилизацию и обеспечить единообразие в проекте, но как и любой мощный инструмент, он требует взвешенного подхода.