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

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

Есть ли какие-либо оговорки, использующие его?

* {
  margin:0;
  padding:0;
}

Ответ 1

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

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

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

[смелый акцент мой]

Ответ 2

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

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

Теперь данный <li><i>text</i></li>, текст будет синим!

Ответ 3

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

* html

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

* * body

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

* html body

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

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

Ответ 4

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