这个问题困扰我已经有一段时间了,我想知道对于如何正确处理这个问题是否存在共识。在使用 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>
只能包含一个或多个 <li>
旧的“列表标题”<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
标签。
正确的方法是什么? 有什么想法吗?