最近我遇到了一种情况,我被困在 HTML 列表中使用
<ul>
,但我真正想要的是 <ol>
。我绞尽脑汁试图设置一个变量,以便我可以根据需要随时更改它。然后我突然意识到,我可以只使用 CSS ul.class {list-style-type: decimal;}
。这会让我得到我正在寻找的东西。
但后来我想,为什么我们还会有
<ol>
?难道不应该被废弃吗?列表类型不是一个独特的样式选择,因此属于样式表吗?至少,这始终是您无法从 HTML 页面复制和粘贴列表项目符号的原因。然后我进一步想知道<dl>
。是的,它稍微方便一些,但是您可以使用嵌套的 <div>
、<p>
、<ul>
或 <span>
轻松制作相同的效果。
在另一个问题中,似乎有人可以认为
<ol>
和<dl>
具有语义质量。我可以购买它,尤其是对于<dl>
,但它与不断被告知列表类型是风格而不是内容的情况背道而驰。还有更多我没有看到的原因吗?为什么它们还没有被弃用?
ul、ol 和 dl 之间的区别不仅仅在于这些元素渲染时的外观。语义上存在巨大差异。这就是为什么它们不能被弃用而代之以 ul。
我可以只使用CSS ul.class {list-style-type:decimal;}。这会 让我得到我正在寻找的东西。
看,这就是你的错误所在。你不会得到完全相同的结果。如果您仅因为它们的外观而使用 ol 或 dl,那么您就错了。
列表类型不是一种独特的风格选择吗
绝对不是。当你使用 html 标签时,你应该知道为什么要这样做。所有 3 种类型的列表都有其自己的含义和用途。
ul = 无序列表。 元素的顺序根本不重要。
一个基本的例子是购物清单。你不在乎先买什么,你只想买清单上的所有物品。
ol = 有序列表。 顺序非常具体,先到先得确实很重要。一个很好的例子是蛋糕的食谱。不能先烤了再添加配料。
dl = 描述列表。您通常使用它来包含键值对,因为它包含术语对及其定义的列表。
当然,当谈到这些列表的外观时,您可以将一个列表替换为另一个列表,然后只应用 CSS 规则。或者甚至使用几个 div/span 标签并从头开始创建它。
然而,当涉及到语义标记时,正如我所解释的那样,差异是巨大的。
HTML 中的标签不仅用于包装内容,而且还具有一定的含义。它们描述了我们正在处理的内容类型。例如,当您关心 SEO 时,这一点很重要。
样式表仅用于更改元素在浏览器中的外观,但在解释内容时它们毫无用处。例如,网络爬虫根本不关心 css。
它与不断被告知列表类型是样式而不是内容的说法背道而驰
谁说的? HTML 标记是语义,它传达含义。始终想象您在没有样式表上下文的情况下解析 HTML;比如说因为你是一个搜索引擎或者因为你正在挖掘数据。那么
ol
、ul
和 dl
之间的语义差异非常清晰且显着。
列表标记的类型不一定只是样式选择。作者可能希望使用“参见步骤 F.”来引用有序列表中的列表项。如果此列表标记样式 (
upper-alpha
) 仅在样式表中定义,则对于没有 CSS 支持的用户代理或使用自己的样式表的用户来说,它将失败。这就是为什么 ol
具有 type
属性¹。
但忽略这一点,ol
和
ul
之间存在语义差异,而不仅仅是表象差异。如果您想传达列表是(未)排序的,您必须在 HTML 级别上执行此操作²。列表标记样式与此无关;您可以有一个带有要点的有序列表。
对于
dl
:您无法使用 dt
/dd
/div
/p
元素或任何其他 HTML 元素(ul
除外)来传达 span
/table
组的语义,在某种程度上)。名称-值组可以有一个或多个名称 (dt
) 和一个或多个值 (dd
),它们代表替代项 (!)。
1 注意:正在讨论
type
在 HTML 5.1/5.2 中会发生什么。
² 它也可以是(虚构的)
list
元素(<list ordered>
、<list unordered>
)或其他任何元素的属性,只要它是 HTML 的一部分。因此,您只需将 (ul
)/ol
替换为其他一些 HTML 元素/属性即可。
³ 当然,可以重新定义其他现有的 HTML 元素来传达这个含义。但是,这又必须发生在 HTML 级别。因此,您只需将
dl
替换为其他一些 HTML 元素/属性即可。