CSS Псевдокласи з вбудованими стилями


131

Чи можливо мати псевдокласи, використовуючи стилі вбудованого?


Приклад:

<a href="http://www.google.com" style="hover:text-decoration:none;">Google</a>

Я знаю, що вищевказаний HTML не працюватиме, але чи є щось подібне?

PS Я знаю, що я повинен використовувати зовнішній аркуш стилів, і це роблю. Мені було просто цікаво, чи можна це зробити, використовуючи стилі вбудованої форми.


Відповіді:


114

Ні, це неможливо. У документах, що використовують CSS, вбудований styleатрибут може містити лише декларації про властивості; той самий набір висловлювань, який з’являється у кожному наборі правил у таблиці стилів. З специфікації атрибутів стилю :

Значення атрибуту стилю повинно відповідати синтаксису вмісту блоку декларацій CSS (за винятком розмежувальних дужок), формальна граматика яких наведена нижче в термінах та конвенціях основної граматики CSS :

declaration-list
  : S* declaration? [ ';' S* declaration? ]*
  ;

Ні селектори (включаючи псевдоелементи), ні at-правила, ні будь-яка інша конструкція CSS не допускаються.

Подумайте про вбудовані стилі як про стилі, застосовані до деякого анонімного суперспецифічного селектора ідентифікаторів: ці стилі застосовуються лише до того самого елемента з styleатрибутом. (Вони також мають перевагу над селектором ідентифікаторів в таблиці стилів, якщо цей елемент має цей ідентифікатор.) Технічно він не працює так; це просто, щоб допомогти вам зрозуміти, чому атрибут не підтримує стилі псевдокласу або псевдоелементів (це більше стосується того, як псевдокласи та псевдоелементи надають абстракції дерева документів, які не можуть бути виражені в мова документа).

Зауважте, що стилі вбудованої форми беруть участь у тому ж каскаді, що і селектори в наборах правил, і мають найвищий пріоритет у каскаді ( !importantнезважаючи на це). Тому вони мають перевагу навіть над псевдокласовими станами. Дозволення псевдокласів або будь-яких інших селекторів в стилях вбудованого типу, можливо, може ввести новий рівень каскаду, а з цим і новий набір ускладнень.

Зауважимо також, що дуже старі версії специфікації стильових атрибутів спочатку пропонували це дозволити , однак це було знято, мабуть, з причини, зазначеної вище, або тому, що реалізація не була життєздатною можливістю.


45

Не CSS, а вбудований:

<a href="#" 
   onmouseover = "this.style.textDecoration = 'none'"
   onmouseout  = "this.style.textDecoration = 'underline'">Hello</a>

Див. Приклад →


2
Так, я думаю, це інший варіант. Це не CSS, але він працює для: наведення курсору миші та миші,: фокусування за допомогою фокуса та onblur та: активного використання onclick.
Web_Designer

1
Чи вважатиметься це JavaScript? У мене є проект, який вимагає вбудованого CSS та без Javascript.
Акіл Фернандес

7
Так, це JavaScript.
Джоел Мерфі

1
Це хороший варіант. Використання зовнішнього аркуша CSS проти принципу OO (об'єктно-орієнтованого). Стиль елемента слід поєднувати з елементом.
Еван Ху

1
Іншим моментом для стилів вбудованих даних є зниження часу візуалізації за допомогою віртуальної DOM. CSS потрібно буде сканувати весь документ на предмет змін та застосувати його стилі. Це усувається за допомогою вбудованих стилів.
Фредерік Краутвальд

26

Замість того, щоб вам потрібен вбудований текст, ви можете використовувати внутрішній CSS

<a href="http://www.google.com" style="hover:text-decoration:none;">Google</a>

Ви можете мати:

<a href="http://www.google.com" id="gLink">Google</a>
<style>
  #gLink:hover {
     text-decoration: none;
  }
</style>

1
Чи допустимо використання внутрішнього css зовнішнього головного елемента?
Таїна

4
@Thaina Зараз, в HTML5: html5doctor.com/the-scoped-attribute
Асон

2
@Thaina Funny, наштовхнувся на інше питання, де я вирішив зробити таке, і з’ясував, що scopedатрибут вилучено із специфікацій .... developer.mozilla.org/en/docs/Web/HTML/Element/style
Ason

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.