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