2015-07-10 2 views
6

Есть куча псевдо элементов и классов:Выбрать все элементы псевдо классы и

Pseudo Elements:

:: после :: перед тем, :: первой буквы, :: первой линии , :: выбор, :: фон

Pseudo Classes:

: активный,: проверено,: по умолчанию,: dir(),: disabled,: empty,: enabled,: first,: first-child,: first-of-type,: fullscreen,: focus,: hover,: indeterminate,: in-range,: invalid,: lang(),: last-child,: last-of-type,: left,: link,: not(),: nth-child(),: nth-last-child(),: nth-last-of-type(),: nth-of-type(),: only-child,: only-of-type,: optional,: out-of-range,: read-only,: read-write,: required,: right, : root,: scope,: target,: valid,: visited

И еще такие как: - webkit-input-placeholder, :: - moz-placeholder и так далее. Я не знаю, какие они есть. Но я думаю, что они псевдоэлементы, поскольку у него двойные двоеточия.

Для выбора всех элементов, находящихся внутри , есть звездочка *.

Теперь мне интересно узнать, почему нет единого селектора для выбора всех псевдоэлементов и псевдо классов, которые находятся за пределами DOM-дерева, даже в css3 или css4?

*pseudo{ 
    color: red; 
} 

ответ

4

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

Например, * будет соответствовать какой-либо элемент, независимо от того, является ли оно :first-child, :last-child, или оба (которое само по себе может быть выражено с использованием либо :only-child или :first-child:last-child). Он также будет соответствовать любой ссылке, независимо от того, является ли он незапланированным (:link) или посещен (:visited), и соответствует ли он одному или нескольким из :hover/:active/:focus.

Если вы ищете способ переопределить любые правила CSS с псевдоклассами для данного элемента (что может быть полезно в случае динамических псевдоклассов, таких как ссылки для ссылок), единственное способы использования селектора ID, встроенного атрибута стиля или !important.

* не соответствует псевдоэлементам, так как это simple selector, а простой селектор соответствует только фактическим элементам. См. Мой ответ на this question для подробного объяснения.

Вероятная причина, по которой не существует селектора для сопоставления всех псевдоэлементов, состоит в том, что нет смысла иметь его, поскольку разные псевдоэлементы работают по-разному и имеют разные ограничения относительно того, какие свойства CSS могут быть применяется к ним. Например, content и display не применяются к ::first-letter, ::first-line или ::selection. Но универсальный селектор существует, потому что сами элементы не определяют, какие свойства CSS применимы (not usually, во всяком случае); что касается CSS, то каждый элемент более или менее одинаковый.

+1

Я так не считаю. Если вы видите вопрос и ответ [здесь] (http://stackoverflow.com/questions/31317238/why-use-selector-in-combination-with-before-and-after/31317299#31317299) поймут ... * не выбирает псевдоэлементы. –

+0

@BhojendraNepal: Вот что говорит BoltClock. Простой селектор соответствует только ** фактическим ** элементам. – Harry

+0

ой! неправильно понятый. Благодарю. –

Смежные вопросы