【发布时间】:2012-02-14 15:44:04
【问题描述】:
这一直困扰着我一段时间,我想知道对于如何正确执行此操作是否有任何共识。当我使用 HTML 列表时,如何在语义上包含列表的标题?
一个选项是这样的:
<h3>Fruits I Like:</h3>
<ul>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
但从语义上讲,<h3> 标题与 <ul> 没有明确关联
另一种选择是:
<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>'s 只能包含一个或多个<li>'s
旧的“列表标题”<lh> 最有意义
<ul>
<lh>Fruits I Like:</lh>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
当然它不是 HTML 的正式组成部分
我听说它建议我们使用 <label> 就像一个表单:
<ul>
<label>Fruits I Like:</label>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
但这有点奇怪,无论如何都不会验证。
在尝试设置列表标题样式时很容易看到语义问题,我最终需要将我的 <h3> 标记放在第一个 <li> 中,并使用以下内容将它们定位为样式:
ul li:first-of-type {
list-style: none;
margin-left: -1em;
/*some other header styles*/
}
恐怖!但至少通过这种方式,我可以通过设置ul 标签的样式来控制整个<ul>、标题和所有内容。
这样做的正确方法是什么?有什么想法吗?
【问题讨论】:
-
有些人在使用 LH,但可能没有意识到他们实际上并没有使用“真正的”HTML 标签,而只是在制作一个随机标签名称。浏览器将这样的标签视为内联元素。有些会允许你在上面放一个类和css。
标签: html html-lists