一個有意思的方案:不借助后臺和 JS ,只用 CSS 讓一個列表編號倒序,你會怎么做?
我正在做一個項目,其中有一個倒序的列表。列表創建時間降序排序的,這里我想在語義和視覺上都能體現出來(讓列表顯示對應的編號,編號越大表示是最新的)。網上做了一些研究,找到了一些有趣的解決辦法,有些很好,有些就不那么好了。
最終結果類似如下:
3.C
4.B
5.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);
- }
當然這估計在絕望中沒辦法了,才會這么做,我們最好還是不要這樣搞。
本期的分享就到這了,感謝的大家的觀看,我們下期分享在見過。
作者:Manuel Matuzovic 譯者:前端小智 來源:matuzo 原文:https://dzone.com/articles/html-5-reverse-ordered-lists
本文轉載自微信公眾號「大遷世界」,可以通過以下二維碼關注。轉載本文請聯系大遷世界公眾號。