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

Является ли пустой атрибут class допустимым HTML в следующих форматах:

<p class="">something</p>
<p class>something</p>

Я нашел этот вопрос, который похож, но задает конкретно о пользовательских атрибутах данных.

Ответ 1

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

<p class> не разрешено

спецификация атрибутов, раздел 3.2.3.1 о синтаксисе пустых атрибутов, содержит следующее:

Пустым атрибутом является тот, где значение было опущено. Это синтаксическая стенограмма для указания атрибута с пустым значением и обычно используется для логических атрибутов. Этот синтаксис может использоваться в синтаксисе HTML, но не в синтаксисе XHTML.

(...)

Этот синтаксис разрешен только для логических атрибутов.

Увидев, что описание атрибута атрибута class (очевидно) не упоминает, что он является логическим атрибутом, опускание значения не разрешено.

<p class=""> разрешено

Из раздела в классе мы узнаем, что:

Каждый элемент HTML может иметь указанный атрибут класса.

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

и из определения разделенных пробелами токенов:

Набор разделенных пространством токенов - это строка, содержащая ноль или несколько слов (называемых токенами), разделенных одним или несколькими символами пробела, где слова состоят из любой строки из одного или нескольких символов, ни один из которых не является символами пробела.

мы можем заключить, что значение атрибута может быть пустым (т.е. содержать нулевые токены).

Ответ 2

На странице справки HTML5, раздел 3.2.3 Атрибуты:

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

Итак, чтобы ответить на ваш вопрос,

Invalid:

<p class>

Действительное (пустое значение)

<p class="">

См. http://dev.w3.org/html5/html-author/ Для справки относительно HTML5 вам нужно.

Ответ 3

Отсутствие каких-либо значений не сделает его недействительным. Я тестировал его в http://validator.w3.org/#validate_by_input

Поместите этот код и проверьте:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div class>Validiity
       <input type="text" disabled>
    </div>
</body>
</html>

Без кавычек просто имена атрибутов создаются для логического атрибута типа disabled, required

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

Подробнее здесь: https://html.spec.whatwg.org/#boolean-attributes

Прочтите этот вопрос Q/A при обсуждении логических атрибутов - Что это означает в HTML 5, когда атрибут является логическим атрибутом?

Ответ 4

Класс должен содержать значение. без значения его недействительным. но он не влияет на рендеринг.