Считается ли CSS-селектор вредным (и почему)?

Влияет ли селектор звезд в CSS на производительность рендеринга страницы?

Есть ли какие-то предостережения, использующие его?

* {
  margin:0;
  padding:0;
}

4 ответа

Решение

Когда дело доходит до представления, Стив Соудерс - человек:

Бесстыдная цитата из одного из докладов:

Ключом к оптимизации CSS-селекторов является фокусировка на крайнем правом селекторе, также называемом селектором клавиш (совпадение?). Вот намного более дорогой селектор: A.class0007 * {}. Хотя этот селектор может показаться более простым, браузер может сравниться дороже. Поскольку браузер перемещается справа налево, он начинает с проверки всех элементов, которые соответствуют ключевому селектору "*". Это означает, что браузер должен попытаться сопоставить этот селектор со всеми элементами на странице.

[жирный акцент мой]

Для некоторых свойств, использующих * может дать неожиданные результаты.

* { color: blue }
li { color: red }

Сейчас дано <li><i>text</i></li>текст будет синим!

Одна точка зрения заключается в том, что проблема не в том, что * это проблема производительности, а в том, что старый добрый фаворит - проблема с IE. Это влияет на IE 5, 5.5 и 6, а также на варианты Macintosh. По сути, существует нечто, называемое ошибкой выбора звезды HTML, которое применяется следующим образом:

* html

Это следует интерпретировать как отсутствие совпадения элементов, поскольку html является корневым и не может быть дочерним элементом. IE интерпретирует это как HTML.

* * body

Опять же, не должно соответствовать ни одному элементу, потому что тело не может быть элементом внука, даже если это дочерний элемент HTML. IE интерпретирует это как * тело.

* html body

Это не должно соответствовать ни одному элементу, но IE интерпретирует это как тело HTML.

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

Поскольку я использую одно и то же правило в каждом из моих проектов, и ни у одного из них нет серьезных проблем с производительностью, я бы сказал: нет, не так, как я знаю.

Другие вопросы по тегам