源码家族
当前位置:首页 > 资讯中心

资讯中心

【 不借助后台和 JS 怎样用CSS实现 让一个列表编号倒序 】

发布时间:2021-07-24 09:44:48 阅读次数:99

在项目中,我们经常会遇到项目排序的问题,怎样不借助后台和 JS来实现列表的排序呢?

最终结果类似如下:

  1. C

  2. B

  3. A

接着,我们来看看有哪些实现的方式。

HTML中的reversed 属性

简单,最直接的解决方案是HTML中的reversed属性。

<ol reversed>
  <li>C</li>
  <li>B</li>
  <li>A</li>
</ol>

clipboard.png

reversed 属性是一个布尔属性,reversed 属性规定列表顺序为降序 (9, 8, 7...),而不是升序 (1, 2, 3...)。

reversed 属性除了 IE 大多数的浏览器都支持,如果你只想要解决方法,用这种就够了。

如果你好奇还有哪些实现方式,请继续阅读。

HTML中的value属性

另一种方法就是使用 value 属性:

<ol>
  <li value="3">C</li>
  <li value="2">B</li>
  <li value="1">A</li></ol>

clipboard.png

这种方式虽然比较冗长,但我们对列表也有更多控制权,比如,我们还可以这样操作:

<ol>
  <li value="6">C</li>
  <li value="4">B</li>
  <li value="2">A</li></ol>

clipboard.png

最好还是不要这样做,因为跳过数字可能会让用户感到困惑。

CSS 自定义的 counter()

第三种方式就是使用CSS的 counter 计算器, 要倒序计数器的顺序,我们有两件事要做:将计数器重置为非0的值,并以负数递增计数器。

<ol>
  <li>C</li>
  <li>B</li>
  <li>A</li>
</ol>
ol {  counter-reset: my-custom-counter 4;  list-style: none;
}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;
}

clipboard.png

如果我们不知道确切的列表数量,则可以将counter-reset属性移到HTML中:

<ol style="counter-reset: my-custom-counter {{ items.length + 1 }}">
  <li>C</li>
  <li>B</li>
  <li>A</li></ol>
ol {  list-style: none;
}ol li {  counter-increment: my-custom-counter -1;
}ol li::before {  content: counter(my-custom-counter) ". "}

一些文章建议使用Flexbox或类似的技术来反转 CSS 中列表顺序。我们不应该这样做,因为它看起来是正确的,但 DOM 的顺序保持不变。在 CSS 中改变顺序对DOM顺序没有影响。

<ol>
  <li>A</li>
  <li>B</li>
  <li>C</li>
</ol>
ol {  display: flex;  flex-direction: column-reverse;
}

clipboard.png

页面上看好像是我们想要的结果,但你按 F12 打开调试模式,检查该 DOM 的顺序,你会我发现 DOM 的顺序是 “ABC”而不是“CBA”的顺序渲染列表。 另外,如果我们复制并粘贴列表,浏览器可能会以其原始顺序“ABC”复制它。

另外我还在 StackOverflow 上找到的另一个非常有创意的解决方案。其结果与Flexbox的解决方案类似,但也有更多的缺点(例如,它会干扰滚动)。

<ol>
  <li>A</li>
  <li>B</li>
  <li>C</li>
</ol>
ol {  transform: rotate(180deg);
}ol > li {  transform: rotate(-180deg);
}

涓涓细流,汇成大海。从小事做起,持之以恒。

上一篇:Go语言中切片复制
下一篇:Go语言从切片中删除元素