为什么<ol>和<dl>没有被弃用?

3
最近我遇到一种情况,我被迫使用HTML列表的<ul>,但我真正想要的是<ol>。我一直在努力设置一个变量,以便在需要时随时更改它。然后我想到了一个办法,我可以使用CSS ul.class {list-style-type: decimal;}。这样可以完全满足我的需求。
但之后我想,为什么我们还需要<ol>呢?它不应该被废弃吗?列表类型是一个独立的样式选择,因此应该属于样式表中。至少对于为什么不能从HTML页面复制和粘贴列表符号的解释始终如一。然后我进一步思考了<dl>。是的,它略微方便一些,但您可以轻松地使用嵌套的<div><p><ul><span>实现相同的效果。
这个问题中,似乎可以争辩说<ol><dl>具有语义质量。我可以理解这一点,尤其是对于<dl>来说,但这与不断被告知列表类型是样式而不是内容的说法相矛盾。它们为什么还没有被废弃,难道还有其他原因吗?

5
将这个论点推到极端,我们实际上只需要一个带有大量自定义类和长达数英里的样式表的div元素... - deceze
@deceze 另一个极端是完全放弃样式表。你的观点是什么? - user1934286
有一件事似乎你没有考虑到,那就是可访问性——不要忘记并非每个人都以相同的方式理解内容,使用屏幕阅读器的人依赖标签的语义含义。 - skyline3000
@skyline3000 屏幕阅读器可以识别list-style-type属性,并相应地宣读列表标记。但我不确定它们是否仅依赖该属性。 - user1934286
为什么要保留ul呢?列表样式可以应用于任何具有display: list-item属性的元素,因此理论上你可以只使用div来重新创建这种效果,就像你所说的可以使用dl元素一样。@deceze最初的观点并不像听起来那么极端,即使他以那种方式描述它。 - BoltClock
3个回答

10
    ,
      之间的区别不仅在于它们渲染时的外观,而是在于它们的语义差异。这就是为什么不能简单地弃用
        而使用其他元素的原因。

      我可以只使用CSS ul.class {list-style-type: decimal;}。这样会得到我想要的结果。

      你错了。你不会得到完全相同的结果。如果你只是因为外观而使用

        ,那就错了。

        难道列表类型不是一种独特的样式选择吗?

        绝对不是。当你使用HTML标签时,你应该清楚自己为什么这样做。所有三种类型的列表都有自己的含义和用途。

          无序列表
        。元素的顺序并不重要
        一个基本的例子是购物清单。你不关心先买什么,你只想买清单上的所有物品。

          有序列表
        。顺序非常具体,先后顺序很重要。一个好的例子是蛋糕的配方。你不能先烤再添加配料。

        描述列表
        。通常用于包含键值对,因为它包含一系列术语和它们的定义。

        当涉及到这些列表的外观时,你可以交换其中一个并应用CSS规则。甚至可以使用几个

        /标签从头开始创建它。
        然而,当涉及到语义标记时,差异是巨大的,正如我所解释的那样。

        HTML中的标签不仅仅是用来包装内容的,它们还承载着意义。它们描述了我们正在处理的内容类型。例如,当你关心SEO时,这是很重要的。

        样式表只是用来改变元素在浏览器中的外观,但它们在说明内容方面是无用的。例如,网络爬虫根本不关心CSS。


你会说原因,可能是唯一的原因,是语义上的吗? - user1934286
2
@fredsbend,是的。因为这些列表涉及不同的事物,所以你不能用一个代替另一个。你可以改变它的外观,但标签的含义将保持不变。如果你希望ul看起来像ol,那么你应该立即使用ol。 - walther
1
网页爬虫就是这样,根本不在意 CSS。额……不过谷歌越来越在意了。无论如何,回答不错。 - deceze
@deceze,Google开始使用CSS来确定元素/内容的含义了吗?我承认,作为一个主要不是前端开发人员的人,对此可能有所误解。 - walther
1
无论他们是否评估列表样式,@deceze,都没关系。无序列表就是无序列表,有序列表就是有序列表。我不知道为什么一开始就引入了CSS。 - BoltClock
显示剩余2条评论

4

这与我们一直被告知列表类型是样式而非内容的说法相悖

谁会这么说呢?HTML标记是语义的,它传达了意义。始终要想象你在没有样式表的情况下解析HTML;比如因为你是搜索引擎或数据挖掘等。那么oluldl之间的语义差异就非常明显和重要了。


1
我同意。即使没有任何CSS,一个网站仍然应该能够合理地使用。 - Niet the Dark Absol
我并没有说HTML标记不具有语义性。你引用了我实际说过的话,如果你在帖子的前面读过,这就是我被告知的在查看HTML页面时无法复制和粘贴项目符号的原因。我觉得你对某个问题过于固执,没有真正回答问题。 - user1934286
@fredsbend 复制粘贴是客户端实现的事情,与HTML的本意无关。没有任何根本性的原因不能复制和粘贴列表;只需要你的操作系统剪贴板以及源应用程序和目标应用程序适当地支持列表标记。顺便说一句,在OS X上完全正常工作:http://imgur.com/a/j1ADg - deceze
@fredsbend 你似乎在替我证明我的观点...!?老实说,我不知道你的观点和我的有什么区别,但显然我们不是一个频道上的。 - deceze
1
@fredsbend 嗯,是的,当然。但是如果浏览器/剪贴板/目标根本不支持列表样式或其他任何东西,作为网站作者,你无法修补那种行为。此外,你链接的那篇文章基本上说的是「通过CSS/Javascript添加越多非标准标记和乱七八糟的东西,复制粘贴行为就会变得越不可预测」。 - deceze
显示剩余2条评论

1
列表标记的类型并不仅仅是一个样式选择。作者可能想要在有序列表中引用一个列表项,例如“请见步骤F”。如果这个列表标记样式(upper-alpha)只在样式表中定义,那么对于没有CSS支持的用户代理或使用自己的样式表的用户来说就会失败。这就是为什么 ol 有一个 type 属性¹。
但是,忽略这一点,olul 之间存在一个语义上的差异,而不仅仅是一种表现形式上的差异。如果您想要传达一个列表是有序还是无序的,您必须在HTML级别上进行此操作²。列表标记样式与此无关;您可以使用项目符号创建有序列表。
对于dl:您无法使用div/p/ul/span元素(除了在某种程度上使用table)或任何其他HTML元素来传达dt/dd组的语义³。名称-值组可以有一个或多个名称(dt)和一个或多个值(dd),它们表示替代方案(!)

¹ 注意:目前正在讨论HTML 5.1/5.2中type属性的命运。

² 它也可能成为一个(虚构的)list元素的属性(<list ordered><list unordered>),只要它是HTML的一部分。因此,您可以用其他HTML元素/属性来替换(ul)/ol

³ 其他现有的HTML元素可以被重新定义以传达这个意思,当然。但是,再次强调,这必须在HTML层面上发生。因此,您可以用其他HTML元素/属性来替换dl


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接