【问题标题】:Is an empty class attribute valid HTML?空的类属性是有效的 HTML 吗?
【发布时间】:2015-06-10 06:39:32
【问题描述】:

是一个空的class属性有效的HTML格式如下:

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

我发现this question 类似,但专门询问自定义数据属性。

【问题讨论】:

标签: html


【解决方案1】:

在查看其他答案中提到的规范后,我找到了确实回答所提出问题的部分。

&lt;p class&gt; 不允许

空属性语法上的specification on attributes 3.2.3.1 节规定如下:

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

(...)

这种语法只允许用于布尔属性。

看到description of the class attribute(显然)没有提到它是布尔属性,因此不允许省略该值。

&lt;p class=""&gt; 允许的

the section on class 我们了解到:

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

该属性(如果指定)必须具有一个值,该值是一组以空格分隔的标记,表示该元素所属的各种类。

space-seperated tokens的定义:

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

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

【讨论】:

  • “属性规范”的链接是dev.w3.org/html5/html-author,一个五年前的编辑草稿。它基本上是“某些人写的”,没有正式地位。语法 可能 在 2010 年对非布尔属性无效,但今天并非如此。
  • 我没有意识到这是草稿。如果您能找到规范的相关部分,请发布答案。
  • 规范的相关位在w3.org/TR/html5/syntax.html#attributes-0,但它并没有说非布尔属性允许空属性语法,它只是不允许它。
【解决方案2】:

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

元素可能具有用于指定有关它们的附加信息的属性。一些属性是全局定义的,可以在任何 HTML 元素上使用,而其他属性仅用于特定元素。每个属性都必须有一个用于标识它的属性名称。每个属性也有一个关联的属性值,根据属性的定义,它可能代表几种不同类型中的一种。每个属性的允许语法取决于给定的值。

所以回答你的问题,

无效:

<p class>

有效(空值)

<p class="">

请参阅http://dev.w3.org/html5/html-author/,了解您需要的有关 HTML5 的所有参考资料。

【讨论】:

  • 您引用了有关属性的一般部分并得出结论认为&lt;p class&gt; 无效。但是,肯定有些属性不需要显式值(&lt;input disabled>),那么您如何得出这个结论呢?我在这里缺少什么吗?您引用的部分是否未涵盖布尔属性?
  • 你是对的。某些属性确实有特殊情况,例如“禁用”。这不适用于“类”属性。
【解决方案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>

没有引号,只为布尔属性起草属性名称,如disabledrequired

许多属性是布尔属性。元素上存在布尔属性表示真值,不存在该属性表示假值。

更多:https://html.spec.whatwg.org/#boolean-attributes

阅读关于布尔属性讨论的 Q/A - What does it mean in HTML 5 when an attribute is a boolean attribute?

【讨论】:

  • 省略该值实际上是不允许的。请参阅我自己的答案。
  • 知道了,所以引号必须是有效的,这会将值设置为空或 null。
  • 抱歉,我不太明白。能改一下吗?
  • 我的意思是类属性仍然可以在没有值的情况下使用,但不仅仅是布尔值,而是 class=""。用引号表示该值为空或 null。
【解决方案4】:

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

【讨论】:

  • 你的说法有依据吗?
猜你喜欢
  • 2012-11-28
  • 1970-01-01
  • 2014-09-15
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 2012-12-27
  • 2013-09-24
  • 2019-09-05
相关资源
最近更新 更多