Будет ли псевдоэлемент становиться ключевым селектором в этом случае?
Технически объектом селектора является *
, то есть в зависимости от того элемента подобран *
будет один генерации псевдо-элемент.
Термин «селектор ключей» не имеет четкого определения, когда речь идет о псевдоэлементах, плюс в отличие от концепции селекторов объектов, это на самом деле деталь реализации. Если «селектор ключей» означает «селектор, представляющий окно, которое визуализируется», то я полагаю, что вы могли сказать, что псевдоэлемент является селектором клавиш. Однако я не знаком с деталями реализации, поскольку я не разработчик.
В любом случае, можно с уверенностью предположить, что клиент проходит через DOM и для каждого элемента, который он выбирает:
Попытка соответствовать элементу против селектора, игнорируя псевдо-элемент для теперь (в данном случае, *
).
Если элемент соответствует селектору, попытка создать поле псевдо-элемент как дочернее поле этого элемента (в случае сгенерированных псевдо-элементов, таких как :before
и :after
), если это применимо (некоторые элементы не могут генерировать псевдо-элементы).
Применить стили к элементу псевдоэлемента и отобразить его как с любым другим полем.
Разница между двумя вашими селекторами заключается в том, что первый содержит псевдоэлемент, а последний - нет. Поскольку они имеют принципиально разные вещи, несправедливо сравнивать их по производительности.Тем не менее, они оба делают пытаются сопоставить любой элемент в DOM, поскольку оба они используют один и тот же универсальный селектор *
, поэтому, не допуская каких-либо специальных оптимизаций, можно с уверенностью предположить, что только накладные расходы, которые поставляются с *:after
, рендеринг псевдоэлемента.
Поскольку мы говорим о производительности, помните, что соответствие элемента *
почти мгновенно, поскольку это в основном гарантированное соответствие; это только тогда, когда вы объединяете его с более сложными селекторами, что он становится дороже на уровне селектора, и, в конечном счете, его производительность в наибольшей степени зависит от количества элементов, которые у вас есть в DOM, это все равно не так дорого, как на самом деле делает стили если у вас нет элементов в тысячах.
Что касается вашего случая использования, мое мнение таково, что вы, как правило, не нужно создавать псевдо-элементы для каждого элемента. Если вы рисуете что-то с помощью CSS, посмотрите, можете ли вы ограничить селектор контекстом, чтобы избежать ненужных полей во всей DOM, например. если вы только рисунок внутри элемента с определенным ID:
#mycanvas *:after,
#mycanvas *:before {
content:'';
}
Даже после того, как вы редактировали, я до сих пор не получить то, что вы пытаетесь сделать с помощью '*: after' –
@Mr. Alien: Я думаю, он спрашивает о сравнении эффектов стилизации фактического элемента против стилизации псевдоэлемента, и в этом случае субъект селектора не слишком уместен. – BoltClock
@BoltClock получил ясный сценарий сейчас, просто отредактировав свой ответ –