这困扰了我一段时间,我想知道如何正确地做到这一点是否有任何共识。当我使用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>
内,并将其定位为样式,如:< / p>
ul li:first-of-type {
list-style: none;
margin-left: -1em;
/*some other header styles*/
}
恐怖!但至少通过这种方式,我可以通过设置<ul>
标记的样式来控制整个ul
,标题和所有内容。
这样做的正确方法是什么?有什么想法吗?
答案 0 :(得分:71)
正如Felipe Alsacreations已经说过的那样,第一种选择很好。
如果您想确保列表下方没有任何内容被解释为属于该标题,那么这正是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. -->
答案 1 :(得分:49)
在这种情况下,我会使用定义列表:
<dl>
<dt>Fruits I like:</dt>
<dd>Apples</dd>
<dd>Bananas</dd>
<dd>Oranges</dd>
</dl>
答案 2 :(得分:9)
你的第一个选择是好的选择。这是问题最少的一个,你已经找到了正确的理由,为什么你不能使用其他选项。
顺便说一下,你的标题明确与<ul>
相关联:它就在列表前面! ;)
编辑:W3C HTML5和5.1的编辑之一Steve Faulkner已经概述了lt
element的定义。这是他将讨论HTML 5.2的unofficial draft,仅此而已。
答案 3 :(得分:5)
a&lt; div&gt;在你的内容中是一个逻辑划分,从语义上来说,如果我想将标题与列表分组,这将是我的第一选择:
<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...
答案 4 :(得分:1)
您还可以使用<lxml.etree._ElementTree object at 0x10e95bcc8>
元素将标题链接到列表,如下所示:
<figure>
来源:https://www.w3.org/TR/2017/WD-html53-20171214/single-page.html#the-li-element(例162)
答案 5 :(得分:0)
尝试在css中定义一个新类ulheader。 p.ulheader~ul选择紧跟在My Header
之后的所有内容
p.ulheader ~ ul {
margin-top:0;
{
p.ulheader {
margin-bottom;0;
}
答案 6 :(得分:-1)
根据w3.org(请注意此链接位于long-expired draft HTML 3.0 spec):
无序列表通常是项目符号列表。 HTML 3.0 使您能够自定义项目符号,无需项目符号 并为多列水平或垂直包装列表项 列表。
开场清单标记必须为
<UL>
。随后是一个可选列表 标题(<LH>
标题</LH>
),然后是第一个列表项(<LI>
)。对于 例如:<UL> <LH>Table Fruit</LH> <LI>apples <LI>oranges <LI>bananas </UL>
可以呈现为:
餐桌水果
- 苹果
- 桔子
- 香蕉
注意:以前的某些旧文档可能包含标题或纯文本 第一个LI元素。建议使用HTML 3.0用户代理的实现者 以满足这种可能性,以处理糟糕的遗产 文档。
答案 7 :(得分:-9)
我把标题放在ul里面。没有规则说UL必须只包含LI元素。