HTML4中是否允许没有值的属性?

时间:2014-02-15 10:21:36

标签: html html4

我想知道HTML 4是否允许没有值的属性,因为它等同于具有空值的属性。例如:

<h2 section>foobar</h2>

代替:<h2 section="">foobar</h2>

这两个片段同样有效吗?如果没有,它们在HTML版本5中是否有效?

谢谢!

3 个答案:

答案 0 :(得分:11)

布尔属性,是的,它们完全有效。

From W3C: (在SGML和HTML上)

  

某些属性扮演布尔变量的角色(例如,所选属性)   OPTION元素的属性)。它们出现在开始标记中   元素的含义意味着属性的值为“true”。其   缺席意味着“假”的价值。

     

布尔属性可以合法地采用单个值:名称   属性本身(例如,selected="selected")。

这表明布尔属性在HTML4中也是有效的,但如果你使用类似的东西,则会无效..因为该布尔值属于option标签..感谢@Ronni Skansing澄清了疑问..

<p selected>Hello</p>

enter image description here


HTML5文档:

From W3C

空属性语法

  

可以通过仅提供属性来指定某些属性   名字,没有价值。


From W3C: (每晚HTML 5.1)

  

许多属性是布尔属性。存在的   元素上的boolean属性表示真值,而   缺少属性表示错误值。


<强> BUT

section 是一个无效的属性,如果你想定义自己的属性,HTML5提供了一种方法来做到这一点..你需要使用{ {3}}前缀,例如,您的 section 应写为data-section,这样您的属性将被计为有效。< / p>


如果您犹豫不决,我们总会有一个验证员来检查 - data-

enter image description here

^验证为HTML5


  

注意:虽然我提供的data-适用于HTML5,但使用自定义   HTML4中的属性无效,即使您定义data-也是如此   在属性名称之前,但是,布尔属性在HTML4中有效   同样。

答案 1 :(得分:3)

正式定义后,HTML 4不允许没有值的属性。通常被视为没有值的属性,如<input checked>,正式是没有属性名称的属性值(和等号)。虽然在HTML 4规范中使用特殊的最小化规则误导性地称为“布尔属性”,但这些规范规范地引用了SGML标准。

根据SGML标准,每当通过枚举唯一允许的值的关键字声明属性时,属性规范在某些条件下可以最小化到该值。这意味着在HTML 4中,标记<input checkbox>有效;该属性是type=checkbox的最小化形式。没有浏览器支持(它们将checkbox解析为属性名称),但在验证器中,构造通过。

实际上,浏览器支持的属性最小化规则的一部分仅包括将属性声明为仅允许单个关键字值的特殊情况,例如checked属性,该属性正式声明为

 <!ATTLIST INPUT checked     (checked)      #IMPLIED>

所以它取决于HTML 4规范中如何声明属性。

但这意味着最小化属性checked表示checked=checked。该值不为空,而是关键字checked。另一方面,浏览器将这些属性视为“存在属性”:重要的是元素是否具有该属性,而不是其值。

在HTML5中序列化为XHTML(即XML),事情很简单:每个属性规范必须是name =“value”或name ='value'的形式,所以等号是必需的,所以引号;从逻辑上讲,值始终存在,尽管它可以是空字符串,如alt=""

在HTML5序列化为HTML时,定义了一些属性,因此不需要属性值(和等号)。相当令人困惑的是,它们是被声明为“布尔属性”的属性(因为值truefalse 不允许,因此令人困惑,但名称部分反映了原则相应的DOM属性或它们调用的“IDL属性”具有真值truefalse作为唯一允许的值)。对于这些属性,根据定义,该值甚至是无关紧要的;只有属性的存在才重要。例如,对于checked属性,不使用任何值,但是如果给出了值,则它必须是空字符串(checked="")或与属性名称相同,不区分大小写(例如, checked=Checked)。任何其他值都是不一致的,但必须具有相同的含义(例如,checked=false表示与checked相同)。

关于具体示例,它在任何版本的HTML中都无效,因为没有声明属性section

答案 2 :(得分:0)

两个片段在html4和html5中在语法上都有效。第一个是无效的xhtml,因为在xhtml中需要一个属性值。

另一方面,section不是定义的属性,但它是html5中的有效标记。因此,您的代码无效。