Атрибут класса HTML с пробелами является допустимым классом W3C?

О атрибуте класса HTML, который присваивает тегу CSS класс (или классы?). Использование пробелов, например, в

<tag class="a b">....</tag>

действительно?

Этот синтаксис используется некоторыми веб-дизайнерами и происходит в экспортированный HTML-код Adobe InDesign (протестирован с версиями 5 и 6) и другое программное обеспечение для генерации HTML...

Он (class="a b") является допустимым синтаксисом W3C? Какие версии CSS и HTML? (начиная с какой версии вступил в силу?)


EDIT: естественное подзапрос "W3C сказать, как его интерпретировать?" (это "переопределение" или другое поведение визуализации?) был опубликован здесь.

Ответ 1

это два разных класса a и b, разделенные пробелом. см. w3c DOCS

class= cdata-list [CS]

этот атрибут присваивает имя класса или набор имен классов элемент. Любому числу элементов может быть присвоено одно и то же имя класса или имена. Несколько имен классов должны быть разделены пробелом символы.


Если у вас есть два класса

.a { font-weight: bold; }
.b { font-weight: normal; }

и назначьте в class= "ab" или class= "ba" , затем более поздний класс перезапишет предыдущий класс с тем же свойством, поэтому вес шрифта будет нормальным.

Если вы измените порядок определения CSS,

.b { font-weight: normal; }
.a { font-weight: bold; }

теперь более поздний класс выделен полужирным шрифтом, поэтому "перезаписать предыдущий класс с тем же свойством" результаты font weight bold.

Ответ 2

Это поддерживается в IE 7 и выше, включая все современные браузеры, отличные от IE. Как отмечали другие комментаторы, на самом деле это список классов, а не один класс с пробелами.

Лучший способ понять это - дать вашему примеру еще несколько опций:

<tag class="a b">....</tag>
<tag class="a">....</tag>
<tag class="b">....</tag>

.a.b {} в вашем css будет нацелен на первый тег.
.a {} будет нацелен на первый и второй теги.
.b {} будет нацелен на первый и третий теги.

Вот почему использование нескольких классов в одном элементе может быть очень полезным.

Для вопросов селекторов CSS и псевдоселекторов мне нравится использовать эту (слегка устаревшую) таблицу http://kimblim.dk/css-tests/selectors/

Ответ 3

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

Ответ 4

Это не будет работать в файле CSS или HTML. <div class="a b c"></div> означает, что элемент div имеет класс a и класс b AND class c.

Между тем, на стороне таблиц стилей .a b c { property: value; } недействительно, потому что буквально означает "элемент c с предком b с предком, имеющим класс a" (а b и c явно не являются допустимыми элементами HTML), а .a .b .c { property: value; } будет означать "элемент, имеющий класс c с элементом предка, имеющим класс b с элементом предка, имеющим класс a". Посмотрите правила CSS-специфики, если это не имеет для вас никакого смысла.

Используйте пробелы или символы подчеркивания вместо пробелов.