Встраиваемые CSS-псевдоклассы

Я всегда думал, что вы не можете добавить в строку стили :hover{..} для элемента, однако я столкнулся с this не так давно, где я вижу такие вещи.

<a href="#" onclick="location.href='http://www.w3.org/'; return false;"
          style="{color: #900}
          :link {background: #ff0}
          :visited {background: #fff}
          :hover {outline: thin red solid}
          :active {background: #00f}">...</a>

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

Есть одна проблема: она не работает.

Кто-нибудь знает, почему это не работает? Chrome не реализовал его или что-то еще?

Демо

Демо-код от w3.org

Ответ 1

В самом деле, тот же документ был указан в другом вопросе здесь. Вот что я должен был сказать об этом:

Этот документ, на который вы ссылаетесь, представляет собой 10-летний проект.

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

Мой ответ на вопрос, связанный в комментариях, подсказывает, почему такая функция считалась нежизнеспособной - она ​​просто несовместима с текущим состоянием CSS как языка:

Обратите внимание, что встроенные стили участвуют в одном и том же каскаде в качестве селекторов в наборах правил и имеют наивысший приоритет в каскаде (!important несмотря на это). Поэтому они имеют приоритет даже над псевдоклассовыми состояниями. Предоставление псевдоклассов или любых других селекторов в встроенных стилях могло бы ввести новый каскадный уровень, а вместе с ним и новый набор осложнений.

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

Это также объясняет, почему ни один браузер не реализовал такую ​​функцию (или, что более вероятно, отсутствие реализации было одним из факторов, заставляющих его пересматривать и затем в конечном итоге отбрасывать, давая поставщикам еще больше причины не начинать внедрение теперь, когда спецификация достигла статуса CR).

Урок здесь - никогда не ссылаться на старые версии технических документов W3C в качестве канона. Всегда помните, чтобы просмотреть последние спецификации; вы должны иметь возможность найти ссылку в заголовке документа.