关于前端:一个有意思的方案不借助后台和-JS-只用-CSS-让一个列表编号倒序你会怎么做

31次阅读

共计 2087 个字符,预计需要花费 6 分钟才能阅读完成。

作者:Manuel Matuzovic
译者:前端小智
起源:matuzo

点赞再看,微信搜寻 【大迁世界】 关注这个没有大厂背景,但有着一股向上踊跃心态人。本文 GitHub https://github.com/qq44924588… 上曾经收录,文章的已分类,也整顿了很多我的文档,和教程材料。

我正在做一个我的项目,其中有一个倒序的列表。列表创立工夫降序排序的,这里我想在语义和视觉上都能体现进去(让列表显示对应的编号,编号越大示意是最新的)。网上做了一些钻研,找到了一些乏味的解决办法,有些很好,有些就不那么好了。

最终后果相似如下:

  1. C
  2. B
  3. A

接着,咱们来看看有哪些实现的形式。

HTML 中的reversed 属性

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

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

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>

这种形式尽管比拟简短,但咱们对列表也有更多控制权,比方,咱们还能够这样操作:

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

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

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;
}

如果咱们不晓得确切的列表数量,则能够将 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;
}

页面上看如同是咱们想要的后果,但你按 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);
}

当然这预计在失望中没方法了,才会这么做,咱们最好还是不要这样搞。

本期的分享就到这了,感激的大家的观看,咱们下期分享在见过。

人才们的 【三连】 就是小智一直分享的最大能源,如果本篇博客有任何谬误和倡议,欢送人才们留言,最初,谢谢大家的观看。


代码部署后可能存在的 BUG 没法实时晓得,预先为了解决这些 BUG,花了大量的工夫进行 log 调试,这边顺便给大家举荐一个好用的 BUG 监控工具 Fundebug。

原文:https://dzone.com/articles/ht…


交换

文章每周继续更新,能够微信搜寻 【大迁世界】 第一工夫浏览,回复 【福利】 有多份前端视频等着你,本文 GitHub https://github.com/qq449245884/xiaozhi 曾经收录,欢送 Star。

正文完
 0