HTML 4中自闭合输入标签是否有效?

18
根据http://www.w3.org/TR/html401/interact/forms.html#h-17.4,输入元素应以单个>结尾,而不是/>。虽然大多数浏览器可以处理以/>结尾的输入元素,但这样的输入元素是否符合HTML语法规则?换句话说,像<input ... /><br />这样的元素在HTML 4中是否有效?
(此问题涉及HTML而非XHTML!)
3个回答

15
在一些情况下,这种语法是有效的,但不像在XHTML中意味着相同的东西,所以不要使用它们。 在HTML 4中,<foo />(其中foo是定义为EMPTY的元素的名称)的意思与<foo>>相同,其意思与<foo>&gt;相同(虽然几乎没有浏览器正确支持该语法,Emacs-W3曾经支持过,但为了呈现所谓的HTML兼容XHTML 1.0文件而破坏了标准)。因此,这在一些地方是有效的,比如任何允许<img>的地方,但在其他地方就不行了(例如作为<body>(在Strict模式下)的子元素的<hr>)。与可选的开始和结束标签规则的交互会增加更多的复杂性。在Transitional文档中,这是有效的:
<link …/>
<h1>Hello, world</h1>

and means:

并且的意思是:
<link>
</head>
<body>
&gt;
<h1>Hello, world</h1>

这种简写语法可能对以下方面很有用,或者至少可以节省时间:

<title/The quick brown fox/

可以使用更简洁的方式,代替更冗长的写法:

<title>The quick brown fox</title>

...但是该语法从未得到很好的支持,而且规范建议应避免使用。


你知道Emacs-W3是否完全支持NET语法吗? - Alohci
@Alohci — 没有头绪,我只是在2000年左右在我的XHTML文档中出现了大量>字符时感到震惊(这促使我学习了很多关于NET在HTML中的“工作方式”)。 - Quentin
Lynx至今仍支持简写语法。 - user1686

2
实际上已经解决了...根据W3C HTML 4验证器,最好不要在HTML 4中使用这种写法来命名元素:
NET-enabling start-tag requires SHORTTAG YES
<br />
The sequence <FOO /> can be interpreted in at least two different ways, 
depending on the DOCTYPE of the document. For HTML 4.01 Strict, the '/' terminates 
the tag <FOO (with an implied '>'). However, since many browsers don't interpret it 
this way, even in the presence of an HTML 4.01 Strict DOCTYPE, it is best to avoid 
it completely in pure HTML documents and reserve its use solely for those written in XHTML.

1
是的,正如Rowland Shaw所指出的那样,“它是可以接受的,但不是有效的”。 - fmark
2
@fmark - 你搞错了,它是有效的(有时),但不可接受。上面引用的验证器消息是一个警告,而不是一个错误。 - Quentin
@DavidDorward -- 看起来你是对的,根据HTML规范。我承认错误! - fmark

-1

来自HTML兼容性指南

在空元素的结尾处,例如<br /><hr /><img src="karen.jpg" alt="Karen" />,请在/>之前加上一个空格。此外,请对空元素使用最小化标记语法,例如<br />,因为XML允许的替代语法<br></br>在许多现有的用户代理中会产生不确定的结果。


让浏览器将XHTML作为HTML处理的指南与HTML中的有效内容并没有太大关系(因为它们处理的是浏览器的行为,而不是应该做什么)。 - Quentin
同意。我的回答更多是作为对相关主题的有趣评论,而不是明确的答案。我想下次应该把它写成评论。 - Sjoerd

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