为什么一些不具有关闭标记(自闭合)的非自动关闭HTML元素将不会显示这些元素,但有些元素会显示

时间:2017-08-01 02:03:18

标签: html5

  1. <textarea>不是自闭元素,对吗?如果是这样,当我在此w3school code example中移除</textarea>时,为什么它仍然有用?

  2. 根据this explanation,只有12个自闭元素?完成了吗?这是否意味着我们必须添加结束标记,除了这12个自闭元素?如果没有,那么元素无法正确显示?

2 个答案:

答案 0 :(得分:1)

自我结束标记伴随void elements,不允许其中包含任何内容。

空白元素包括<area><base><br><col><embed><hr><img>,{ {1}},<input><keygen><link><menuitem><meta><param><source>和{{1 }}

考虑<track>。那是自我关闭,因为它包含内容是有意义的;用户输入的文字。

相反,请考虑<wbr>。这是自我关闭,因为它是一个换行符;在新线的开始和结束之间永远不会有任何东西。

如果省略,则无效元素具有隐含结束标记;你可以在写标签时安全地将它遗漏。 <textarea> Text </textarea><br />一样有效。

省略 -void元素的结束标记在某些情况下仍然有效。事实上,有一个 optional start and end tags 列表,其中包含<br><br />等内容。这是因为您不能拥有省略这些标签的有效HTML文档,如果您选择自行省略它们,解析器将自动尝试将它们放入您的位置。使用 F12 Debugger 进行检查会发现,如果省略这些结束标记,则会自动创建。

显然,对于解析器来说,这可能是令人困惑,并且您可以自己添加标签更安全。否则,您最终可能会得到无效标记。您可以使用 W3 Markup Validation 服务来测试您的标记是否有效。

希望这有帮助! :)

答案 1 :(得分:1)

省略</textarea>结束标记时,它不起作用。相反,@ Kaiido在上面提到,“</body>\n</html>”作为文本添加到textarea元素的内容中。看:

screenshot showing textarea eating markup

正如您所见,“</body>\n</html>”已成为textarea内容的一部分。

也就是说,通过删除</textarea>结束标记,您已将源中的所有剩余HTML标记解析为不是标记,而是作为textarea元素的文本内容。 / p>

虽然对于某些元素来说,解析器会推断出结束标记的位置并将其添加到DOM中,但解析器永远不会为{{1}执行此操作} element。

  

根据this explanation,只有12个自闭元素?完成了吗?这是否意味着我们必须添加结束标记,除了这12个自闭元素?如果没有,那么元素无法正确显示?

检查https://html.spec.whatwg.org/multipage/form-elements.html#the-textarea-element,您会看到标记省略 html 部分,其中显示的是textarea元素:

  

这两个标签都没有遗漏。

规范中的每个元素在text / html 部分都有类似的标记省略,解释了您是否可以省略该元素的结束标记或开始标记。