Нет, это невозможно. В документах, использующих CSS, встроенный атрибут style
может содержать только объявления свойств; тот же набор операторов, который появляется в каждом наборе правил в таблице стилей. Из спецификации атрибутов стиля :
Значение атрибута style должно соответствовать синтаксису содержимого блока объявления CSS (исключая разделительные скобки), формальная грамматика которого приведена ниже в терминах и соглашениях Базовая грамматика CSS :
declaration-list
: S* declaration? [ ';' S* declaration? ]*
;
Ни селекторы (включая псевдоэлементы), ни at-rules, ни какие-либо другие конструкции CSS не допускаются.
Думайте о встроенных стилях как о стилях, применяемых к какому-то анонимному сверхспецифическому селектору идентификаторов: эти стили применяются только к тому самому элементу с атрибутом style
. (Они также имеют приоритет над селектором идентификаторов в таблице стилей, если этот элемент имеет этот идентификатор.) Технически это не работает так; это просто для того, чтобы помочь вам понять, почему атрибут не поддерживает псевдоклассы или стили псевдоэлементов (это больше связано с тем, как псевдоклассы и псевдоэлементы обеспечивают абстракции дерева документа, которые не могут быть выражены в язык документа).
Обратите внимание, что встроенные стили участвуют в том же каскаде, что и селекторы в наборах правил, и имеют самый высокий приоритет в каскаде (несмотря на !important
). Таким образом, они имеют преимущество даже над псевдоклассами. Разрешение псевдоклассов или любых других селекторов во встроенных стилях может привести к появлению нового каскадного уровня, а с ним и нового набора сложностей.
Также обратите внимание, что очень старые версии спецификации атрибутов стиля первоначально предлагали разрешить это , однако оно было отменено, предположительно по причине, указанной выше, или потому, что его реализация не была жизнеспособной.