如何在语义上将标题添加到列表中
这一直困扰着我,我想知道如何正确地做到这一点是否有共识。 当我使用HTML列表时,如何在语义上包含列表的标题?
一个select是这样的:
<h3>Fruits I Like:</h3> <ul> <li>Apples</li> <li>Bananas</li> <li>Oranges</li> </ul>
但是在语义上<h3>
标题并不明确地与<ul>
关联
另一个select是这样的:
<ul> <li><h3>Fruits I Like:</h3></li> <li>Apples</li> <li>Bananas</li> <li>Oranges</li> </ul>
但是这似乎有点肮脏,因为标题并不是真正的列表项目之一。
这个选项是W3C不允许的:
<ul> <h3>Fruits I Like:</h3> <li>Apples</li> <li>Bananas</li> <li>Oranges</li> </ul>
因为<ul>
只能包含一个或多个<li>
旧的“列表标题” <lh>
是最有意义的
<ul> <lh>Fruits I Like:</lh> <li>Apples</li> <li>Bananas</li> <li>Oranges</li> </ul>
但它当然不是HTML的正式组成部分
我听说它build议我们使用<label>
就像一个表单:
<ul> <label>Fruits I Like:</label> <li>Apples</li> <li>Bananas</li> <li>Oranges</li> </ul>
但是这有点奇怪,无论如何也不会validation。
当试图devise我的列表头文件时,很容易看到语义问题,最终我需要将<h3>
标签放在第一个<li>
,并将它们定位为如下所示的样式:
ul li:first-of-type { list-style: none; margin-left: -1em; /*some other header styles*/ }
恐怖! 但至less这样我可以通过deviseul
标签来控制整个<ul>
,标题和全部。
什么是正确的方法来做到这一点? 有任何想法吗?
正如Felipe Alsacreations所说,第一种select是好的。
如果您想确保列表下方的任何内容都不会被解释为属于标题,那么这正是HTML5分段内容元素的作用。 所以,比如你可以这样做
<h2>About Fruits</h2> <section> <h3>Fruits I Like:</h3> <ul> <li>Apples</li> <li>Bananas</li> <li>Oranges</li> </ul> </section> <!-- anything here is part of the "About Fruits" section but does not belong to the "Fruits I Like" section. -->
在这种情况下,我会使用一个定义列表:
<dl> <dt>Fruits I like:</dt> <dd>Apples</dd> <dd>Bananas</dd> <dd>Oranges</dd> </dl>
你的第一个select是好的。 这是问题最less的问题,您已经find了无法使用其他选项的正确原因。
顺便说一下,你的标题是显式地与<ul>
相关联的:它就在列表之前! ;)
编辑:W3C HTML5和5.1的编辑之一Steve Faulkner 勾画出一个 lt
元素 的定义 。 这是一个非正式的草案 ,他将讨论HTML 5.2,现在还没有。
一个<div>是你的内容中的一个逻辑划分,在语义上这是我的第一select,如果我想与列表标题:
<div class="mydiv"> <h3>The heading</h3> <ul> <li>item</li> <li>item</li> <li>item</li> </ul> </div>
那么你可以使用下面的CSS来将所有的东西放在一起作为一个单元
.mydiv{} .mydiv h3{} .mydiv ul{} .mydiv ul li{} etc...
根据w3.org (请注意,这个链接是在过期的草稿HTML 3.0规范 ):
无序列表通常是项目的项目列表。 HTML 3.0使您能够自定义项目符号,没有项目符号,并为多列列表水平或垂直地包装列表项目。
开始列表标记必须是
<UL>
。 后面是一个可选的列表标题(<LH>
标题</LH>
),然后是第一个列表项(<LI>
)。 例如:<UL> <LH>Table Fruit</LH> <LI>apples <LI>oranges <LI>bananas </UL>
可以呈现为:
表水果
- 苹果
- 桔子
- 香蕉
注意:一些遗留文档可能在第一个LI元素之前包含标题或纯文本。 build议HTML 3.0用户代理的实现者为了处理糟糕的遗留文档而迎合这种可能性。
尝试在CSS中定义一个新的类,ulheader。 p.ulheader〜ulselect紧跟在My Header之后的所有内容
p.ulheader ~ ul { margin-top:0; { p.ulheader { margin-bottom;0; }
我把标题放在ul里面。 没有规定说UL必须只包含LI元素。