如果您想在网站上按顺序对内容进行编号,有序列表 (<ol>
) 就是您的最佳选择。 您也可能希望对这些数字进行样式设置。 奇怪的是,在 CSS 中对这些列表数字进行样式设置并不是一件容易的事。 值得庆幸的是,这也不是不可能的。 Roger Johansson 在 一篇教程 中展示了如何使用 :before
伪元素来实现,该元素可以将 counter
作为 content
属性的值。

但需要知道的是,应用编号计数器不仅限于有序列表。 例如,假设您想对常见问题解答列表中的问题和答案对进行编号。
您的标记将类似于此
<dl class="faq">
<dt>How much wood would a wood chuck chuck if a wood chuck could chuck wood?</dt>
<dd>1,000,000</dd>
<dt>What is the air-speed velocity of an unladen swallow?</dt>
<dd>What do you mean? An African or European swallow?</dd>
<dt>Why did the chicken cross the road?</dt>
<dd>To get to the other side</dd>
</dl>
每个新的 <dt>
元素都是一个新问题,因此我们应该在此应用编号。 它与以下代码一样简单
.faq {
counter-reset: my-badass-counter;
}
.faq dt:before {
content: counter(my-badass-counter);
counter-increment: my-badass-counter;
}
根据需要对 :before
元素进行样式设置。 例如

我只想让大家了解这种能力。 一旦您理解了它,就会想到各种需要进行编号的事物。 例如,我最近 发布了我最喜欢的食谱之一的博客文章,并用方块罗马数字对每个步骤/图片进行了编号。

list-style-type
支持的任何东西。 即
disc (• • •)
circle (○ ○ ○)
square (▪ ▪ ▪)
decimal (1 2 3)
decimal-leading-zero (01, 02, 03)
lower-roman (i ii iii)
upper-roman (I II III)
lower-greek (α β γ)
lower-latin (a b c)
upper-latin (A B C)
armenian (Ա Բ Գ)
georgian (ა ბ გ)
lower-alpha (a b c)
upper-alpha (A B C)
您只需在计数器值本身中指定哪一个
content: counter(my-counter, lower-roman);
未来
上面的内容很酷,属于“今天可以使用”™ 类别。 但是,当您看到 CSS3 列表 的进步时,它几乎感觉像是黑客手段。 一旦浏览器对它的支持到来,我们就可以自由地对列表的标记进行定位
/*
Examples from THE FUTURE
No browser support at the time of this writing
*/
li::marker {
width: 30px;
text-align: right;
margin-right: 10px;
display: inline-block;
}
ol {
list-style: symbols("*" "\2020" "\2021" "\A7");
}
ul {
list-style-type: "★";
}
对列表和定义的精彩解读! 我能想到很多情况下这将派上用场。
我以前不知道这可以用纯 CSS 实现 - 很棒的教程(一如既往),Chris!
您好,您能否添加 (发布) 第一幅图片 (图像) 的 HTML 和 CSS 代码?
我喜欢第一幅图片中的设计。
谢谢。
哦,抱歉,那里有一个链接。 因此,什么也不用做。 谢谢。
Chris... 根据 Wolfram Alpha(其来源已给出) - 土拨鼠可以搬运 361,9237001 立方厘米的木材 -(如果它可以搬运木材的话) - 而不是您列出的“1,000,000”。 仅供参考,如果您想纠正您显然无意的错误。
ps - 很高兴您回来并继续生活:我们想念您!
显然那是每天 361.9237001 cc。
抱歉,正确答案实际上是“一土拨鼠搬运量”。
正确答案实际上是
土拨鼠会搬运的木材。 是土拨鼠可以搬运的木材。 如果土拨鼠可以搬运木材。
在过去几年中,我在适当的时候多次使用过它,因为它在外观方面非常出色且非常灵活。
但值得注意的是,必须将 list-style-type 设置为 none,这意味着它实际上只适合您只想像列表一样进行样式设置的内容。
任何实际上应该是列表的内容都不应该移除其列表样式(如果您能避免的话),因为这会大大降低大多数辅助技术的语义理解。
我最近有一个项目需要“倒计时”。 我使用此技术使列表倒序计数(从 10 到 1)
$trade; => ™
哇。 这对我来说很新鲜 :(o)
不错! 谢谢
它的兼容性如何?
非常有用,但为什么您肉loaf 食谱的配料没有标记为列表?
不错,哥们! 非常感谢!
我每天都在学习新东西! 感谢您的提示!
我喜欢这个想法,我最近在尝试使列表项内容的左填充相等时自己偶然发现了它,试图使“hello”垂直对齐
6 hello
66 hello
666 hello
但使用 :before,我们可以引入 :inline-block 并设置宽度!
http://jsfiddle.net/sQaeR/
Chris,我检查了
counter-reset
CSS 属性,W3Schools 说它属于 CSS2。 这种属性在设计师中如此不受关注,真是太奇怪了。说实话,这是我第一次遇到这个属性。 您是否有该属性定义的 W3 规范的参考资料?
这篇文章确实很有帮助,但需要进行一个更正
土拨鼠会搬运尽可能多的木材,只要它能搬运木材。
很棒的文章,Chris! 我实际上在几天前发布了一篇类似的文章(相对来说) - 将 :pseudo-elements 用作 list-style-image 的替代方案。
很高兴知道,谢谢,Chris!
对于询问此方法兼容性的用户,它在所有主要浏览器中都能正常工作,除了 IE7(以及之前的版本)。 IE7 不支持 :before/:after 伪元素。
但 IE7 在全球的份额不到 5%!
http://gs.statcounter.com/#browser_version-ww-monthly-201111-201111-bar
很棒且非常有用。
谢谢
很棒的文章;看起来 CSS3 列表的未来值得关注。
发现一个拼写错误:“One browser support for that comes along” -> “Once browser support…”
很棒的教程,一如既往的好内容
好文章..
我几天前就看到了这种文章..
我尝试了许多方法来自动获取倒计时,但什么也没用,有什么想法吗?
如果有人想寻找更多使用此技术的自定义列表的灵感,请查看 这篇文章!
由于 Web 可访问性方面的 WCAG 2.0 要求,不建议使用这种技术。聋哑或盲人用户如何知道列表实际上是 3 个中的第 1 个,因为这种技术不会生成包含数字的实际文本或值。我强烈建议不要使用这种技术。