我正在做一个项目,其中有一个倒序的列表。列表创建时间降序排序的,这里我想在语义和视觉上都能体现出来(让列表显示对应的编号,编号越大表示是最新的)。网上做了一些研究,找到了一些有趣的解决办法,有些很好,有些就不那么好了。
最终结果类似如下:
C
B
A
接着,我们来看看有哪些实现的方式。
HTML中的reversed 属性
简单,最直接的解决方案是HTML中的reversed属性。
- C
- B
- A
reversed 属性除了 IE 大多数的浏览器都支持,如果你只想要解决方法,用这种就够了。
如果你好奇还有哪些实现方式,请继续阅读。
HTML中的value属性
另一种方法就是使用 value 属性:
- C
- B
- A
- C
- B
- A
CSS 自定义的 counter()
第三种方式就是使用CSS的 counter 计算器, 要倒序计数器的顺序,我们有两件事要做:将计数器重置为非0的值,并以负数递增计数器。
- C
- B
- A
ol li {
counter-increment: my-custom-counter -1;
}
ol li::before {
content: counter(my-custom-counter) ". ";
color: #f23c50;
font-size: 2.5rem;
font-weight: bold;
}
不借助后台和 JS,只用 CSS 让一个列表编号倒序,你会怎么做?
如果我们不知道确切的列表数量,则可以将counter-reset属性移到HTML中:
- C
- B
- A
ol li {
counter-increment: my-custom-counter -1;
}
ol li::before {
content: counter(my-custom-counter) ". "
}
一些文章建议使用Flexbox或类似的技术来反转 CSS 中列表顺序。我们不应该这样做,因为它看起来是正确的,但 DOM 的顺序保持不变。在 CSS 中改变顺序对DOM顺序没有影响。
- A
- B
- C
另外我还在 StackOverflow 上找到的另一个非常有创意的解决方案。其结果与Flexbox的解决方案类似,但也有更多的缺点(例如,它会干扰滚动)。
- A
- B
- C
ol > li {
transform: rotate(-180deg);
}