【发布时间】:2013-08-16 08:22:14
【问题描述】:
我知道在 HTML5 中不允许将 div 嵌套在 li 中,尽管你可以并且它可以工作。这是否意味着我不应该使用它? dls中嵌套div的标准是什么?
【问题讨论】:
-
你从哪里“得知”这是不允许的?
-
好吧,据我记得,Visual Studio 2012 中的 html 验证并没有验证代码。
标签: html
我知道在 HTML5 中不允许将 div 嵌套在 li 中,尽管你可以并且它可以工作。这是否意味着我不应该使用它? dls中嵌套div的标准是什么?
【问题讨论】:
标签: html
此信息不正确 - div 元素被视为 flow content 并且很好地允许在 li 元素中。您可能会将它与 ul/ol 元素混淆,后者可能只包含相应的 lis。
HTML5 的变化在于,它不再具有块级和内联元素。相反,elements into several categories 有更复杂的区别。
要查看根据 HTML5 在元素内允许的内容,请参阅特定标记的描述,其中 "Content model" 部分告诉您在此特定元素内允许哪些内容。
(根据2019-07-30的HTML生活标准)
列表有多种类型,最常见的是unordered (ul) 和ordered (ol) 列表。 ul 和 ol 是“容器”元素,仅将 list item (li) 作为子元素 - 不允许使用其他元素*。 li 元素本身可以包含任意 flow content。
*(从技术上讲,它们也可以包含 "script-supporting" elements
<ol>
<li></li>
...more li elements
</ol>
<ul>
<li></li>
...more li elements
</ul>
对于description lists (dl),过去有相同的限制,即它们只能包含各自的子元素dt 和dd,但最近的更改也允许div 子元素,只要那些divs 本身包含 dt 或 dd。
<dl>
<dt>term</dt><dd>description</dd>
</dl>
// the following is now valid as well:
<dl>
<div><dt>term</dt><dd>description</dd></div>
</dl>
作为助记符:容器元素应该只包含它们各自的子元素,而这些子元素可以包含您喜欢的任何内容。
【讨论】:
dl 当然不能,就像ul 不能一样。 dt 和 dd 可以。
li 可以保存流内容,dl(描述列表)只能包含dt 或dd 元素,它们本身可以包含流内容(但dt 没有切片或标题内容)。就像ul 和ol 一样,也只能容纳li 元素。
divs 现在被允许作为dl 的子元素。我想这是为了总体上为框架和样式提供一些灵活性。但是请注意设置限制的重要段落,div 本身必须包含 dt 或 dd 否则将被忽略。
完全允许将<div> 元素嵌套在<li> 和<dd> 元素中。 <li>/<dd> 元素可能包含流内容,<div> 元素就是。
规格:http://www.w3.org/TR/html5/grouping-content.html#the-li-element
【讨论】:
既然我和第二个问题有同样的问题:在dls中嵌套div的标准是什么?我会在这里回答:
根据 HTML5 (https://html.spec.whatwg.org/multipage/grouping-content.html#the-dl-element),
"dl 元素表示一个由零个或多个名称-值组组成的关联列表(一个描述列表)。一个名称-值组由一个或多个名称组成(dt 元素,可能作为 div 元素子元素的子元素)后跟一个或多个值(dd 元素,可能作为 div 元素子元素的子元素),忽略除 dt 和 dd 元素子元素之外的任何节点,以及作为 div 元素子元素的子元素的 dt 和 dd 元素。在单个 dl 元素中,每个名称不应有多个 dt 元素。”
甚至还有一个将 div 嵌套在 dl 中的示例,用于包装 dt 和 dd 元素。
【讨论】:
我不确定这是否被视为语义,但我很喜欢这样做:
<dl>
<li>
<dt>My Key</dt><dd>My Value</dd>
</li>
<li>
<dt>My Key</dt><dd>My Value</dd>
</li>
<li>
<dt>My Key</dt><dd>My Value</dd>
</li>
</dl>
【讨论】:
<li> 元素不允许在 <dl> 元素中。 w3.org/TR/2012/WD-html-markup-20120329/dl.html