这有效:
<link rel="stylesheet" type="text/css" href="xxx.css" />
但这不是:
<script type="text/javascript" src="xxx.js"/>
你真的需要:
<script type="text/javascript" src="xxx.js"></script>
为何这种不一致?这有什么理由可以帮助我记住它吗?
我了解link
永远不会有内容,并且该脚本可以在<script>
和</script>
之间设置内联脚本(之后不会src
)。
但是:<script ... />
语法会有足够的信息告诉解析器:这里没有内容,我现在正在关闭
那么,为什么不支持?
答案 0 :(得分:3)
仅当标签中不存在子元素时才使用自闭标签。
例如<script type="text/javascript">...</script>
可能包含一些代码。
但是<link rel="stylesheet" type="text/css" href="xxx.css" />
不能有任何子元素,所以它是自我关闭的。
在此处查找自闭元素列表:http://www.w3.org/TR/html5/syntax.html#void-elements
...只允许这些标签自动关闭。
要记住的规则几乎没有标签,除了上面列表中的标签。请记住最重要的一些。
答案 1 :(得分:1)
HTML建立在SGML之上。 SGML使用DTD来描述元素。
DTD可以限制哪种内容元素具有。这包括“空”元素,这些元素永远不会有内容(您称之为“自我关闭”的元素)。
这与可以包含内容的元素不同,但不会发生。
因此:<p></p>
是一个内容为零长度的段落,而<img>
是一个永远不会有内容的空元素。
两者之间有严格的区别可以简化事情并消除歧义。特别是有一些元素的结束标记可以从上下文中推断出来(这就是我认为的“自我关闭”)。因此,例如<div><p>Paragraph 1<p>Paragraph 2</div>
是有效的HTML并且完全等同于<div><p>Paragraph 1</p><p>Paragraph 2</p></div>
(尽管我建议明确)。允许和元素为空或者不会混淆该元素的空示例与没有明确结束标记但具有内容的空白示例之间的差异。
因此允许你忽略</script>
会是一个坏主意。
您使用的格式为/>
,这是一种空格或无内容元素的XML格式。现在可以将HTML序列化为XML一段时间了,这里的规则有点不同。 XML不允许省略任何结束标记(因此我上面给出的2段示例无效)并且允许/>
结束空元素(不能有内容)和可以使用的元素有内容但没有(如你的情况)。因此,XHTML规则确实允许<script src="someScript.js"/>
。如果内容类型是将实体描述为application/xhtml+xml
而不是text/html
,那么浏览器应该接受该形式。
基于XML的规则可以允许它,因为它们在某些元素上没有可选结束标记规则,这些元素基于SGML(以及后来构建在其上但不严格遵守SGML的表单)形式有
(在/>
之前带有空格的/
表单是一个用于兼容两种表单的表单,XML表单中的空元素需要/
,而其他形式将/
组合视为可忽略的东西。)