一个空的class属性是否是有效的HTML?

26

以下格式中,空的class属性是否为有效的HTML?

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

我发现了这个问题,它类似于所提出的问题,但是具体询问的是自定义数据属性是否有效。


3
HTML5规范的相关部分可以在此链接中找到:http://www.w3.org/TR/html5/dom.html#classes。 - 200_success
1
@200_success:谢谢。你指引了我正确的方向,我成功在规范中找到了答案。 - Thorkil Holm-Jacobsen
4个回答

27

在查看其他答案提及的规范之后,我找到了实际回答问题的部分。

<p class> 不被允许使用

属性规范上的3.2.3.1节关于空属性语法的说明如下:

空属性是指省略了值的属性。这是指定带有空值的属性的一种语法简写,通常用于布尔属性。这种语法可以在HTML语法中使用,但不能在XHTML语法中使用。

(...)

此语法仅允许用于布尔属性。

鉴于class属性的描述(显然)没有提到它是布尔属性,因此不允许省略该值。

<p class="">允许使用的

关于class的部分,我们可以得知:

每个HTML元素都可以指定一个class属性。

如果指定了该属性,则必须将其值设置为一组以空格分隔的标记,表示该元素所属的各种类别。

而从以空格分隔的标记的定义中:

一组以空格分隔的标记是一个包含零个或多个单词(称为标记)的字符串,这些单词由一个或多个空格字符分隔,其中单词由任何一个或多个字符的字符串组成,其中没有空格字符。

我们可以得出结论,属性值实际上可以为空(即包含零个标记)。


“属性规范链接”指向http://dev.w3.org/html5/html-author/,这是五年前编辑的草案。它基本上是“某个人写的”,没有正式地位。对于非布尔属性,语法在2010年可能是无效的,但在今天不是这样。 - Alohci
我没有意识到它是草稿。如果您能找到相关规范的部分,请发布答案。 - Thorkil Holm-Jacobsen
规范中相关的部分在http://www.w3.org/TR/html5/syntax.html#attributes-0,但它并没有说空属性语法允许用于非布尔属性,只是没有禁止它。 - Alohci

2

从HTML5参考页面,第3.2.3节属性:

元素可以具有用于指定有关它们的其他信息的属性。某些属性在全局范围内定义,并可用于任何HTML元素,而其他属性仅为特定元素定义。每个属性必须具有用于标识其的属性名称。每个属性还具有相关联的属性值,具体取决于属性的定义,可能代表几种不同类型之一。每个属性的允许语法取决于给定值。

因此,回答您的问题:

无效:

<p class>

有效(空值)

<p class="">

请查看http://dev.w3.org/html5/html-author/,这是您需要的HTML5参考资料。

1
你引用了一个关于属性的通用部分,并得出 <p class> 是无效的结论。然而,肯定有一些属性不需要显式值 (<input disabled>),那么你是如何得出这个结论的呢?我是否漏掉了什么?你引用的部分没有涵盖布尔属性吗? - Thorkil Holm-Jacobsen
你说得对。有些属性确实有像“disabled”这样的特殊情况,但这并不适用于“class”属性。 - Georgios Dimitriadis

0

没有任何值不会使其无效。我已经在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>

没有引号,只有属性名被用于布尔属性,例如disabledrequired

许多属性都是布尔属性。元素上存在布尔属性表示为真值,而属性的缺失表示为假值。

更多信息请参考:https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes

阅读关于布尔属性讨论的问答 - HTML 5中的布尔属性是什么意思?


省略值实际上是不允许的。请参见我的答案。 - Thorkil Holm-Jacobsen
明白了,所以引号是必须的,这将把值设置为空或null。 - absqueued
抱歉,我没有完全听懂。你能再说一遍吗? - Thorkil Holm-Jacobsen
我的意思是类属性仍然可以在没有值的情况下使用,但不仅仅是作为布尔值,而是作为class = ""。用引号表示值为空或null。 - absqueued

-1

Class属性应该包含一个值。如果没有值,它就不是有效的属性。但在渲染时不会显示任何影响。


3
你对那个主张有任何依据吗? - Thorkil Holm-Jacobsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接