在web設計中,使用一種層次分明的方法來展現數據是十分重要的,這樣用戶就能夠很清晰的理解網站所展現的數據結構和內容,使用有序列表就是實現數據有組織的展現的一種簡單方法。css
若是你須要更加深刻地控制有序列表數字的樣式,你可能會以爲必須經過增長更多的 html DOM
結構或者經過 JavaScript
才能作到。幸運的是,使用 CSS計數器
能夠更加容易的解決這個問題。html
在這篇教程中,咱們將學習到什麼是 CSS計數器
和一些使用案例。web
當你寫了一個以下的有序列表,瀏覽器會自動在列表項前面加上數字瀏覽器
<ol> <li>My First Item</li> <li>My Second Item</li> <li>My Third Item</li> </ol>
這看起來很好,可是它不容許你對數字進行樣式調整。假如,你須要把列表前的數字放進一個圓圈裏來修飾列表,你該怎麼作呢?數據結構
一種方法是徹底刪除列表,並本身手動添加數字。app
<div> <span>1</span> My First Item </div> <div> <span>2</span> My Second Item </div> <div> <span>3</span> My Third Item </div>
div { margin-bottom:10px; } div span { display:inline-flex; align-items:center; justify-content:center; width:25px; height:25px; border-radius:50%; background-color:#000; color:#fff; }
這確實是咱們想要作的效果,可是也有一些缺點。首先,手動添加數字是很麻煩的。若是你須要更改一個編號,你必須一個接一個地改變它們。面對這種狀況,你可使用 JavaScript
動態添加 <span>
標籤來解決這些問題,但這會爲 DOM
添加更多的節點,從而致使大量內存佔用。函數
在大多數狀況下,最好使用CSS計數器。讓咱們來看看緣由。學習
CSS計數器
是網頁範圍變量,其值可使用 CSS
規則更改。flex
首先,使用 counter-reset
屬性設置計數器。list-number
是此處使用的變量名。網站
div.list { counter-reset: list-number; }
接着,使用 counter-increment
屬性來增長計數器的值。
div.list div { counter-increment: list-number; }
如今,每次出現 div.listdiv
元素時,list-number
變量都會增長一。
最後,使用含有設置 content
屬性和 counter()
函數的 :before
僞元素來展現數字。
div.list div:before { content: counter(list-number); }
這裏是完整代碼:
<div class="list"> <div>My first item</div> <div>My second item</div> <div>My third item</div> </div>
div.list { counter-reset: list-number; } /** 能夠在:before 爲元素中使用 counter-increment **/ div.list div:before { counter-increment: list-number; content: counter(list-number); }
如今咱們尚未徹底達到目標。讓咱們對 :before
僞元素進行樣式設計,使其看起來更好。
div.list div:before { counter-increment: list-number; content: counter(list-number); margin-right: 10px; margin-bottom:10px; width:35px; height:35px; display:inline-flex; align-items:center; justify-content: center; font-size:16px; background-color:#d7385e; border-radius:50%; color:#fff; }
默認狀況下,counter-reset
會將計數器設置爲 0。當第一個 counter-increment
被調用後它的起始變爲1 能夠經過將一個整數做爲 counter-reset
函數的第二個參數來設置初始值。
div.list { counter-reset: list-number 1; }
若是你想從 0
開始,能夠將初始值設置爲 -1
。
div.list { counter-reset: list-number -1; }
默認狀況下,counter-increment
會使計數器的值增長一。就像 counter-reset
同樣,你能夠定義 counter-increment
屬性的偏移值。
在此示例中,counter-reset
將 list-number
設置爲 0
。每次調用 counter-increment
時,list-number
數值都會增長 2
,所以,你將會看到列表序爲 2
、4
和 6
。
div.list { counter-reset: list-number; } div.list div:before { counter-increment: list-number 2; // other styles }
counter()
函數能夠有兩個參數:counter-name
和 counter-format
。對於第二個參數,你可使用任何有效的列表類型值,包括:
decimal
(e.g., 1, 2, 3…)lower-latin
(e.g., a, b, c…)lower-roman
(e.g., i, ii, iii…)默認值爲數字。
例如,若是你像我同樣科學,你可使用 lower-greek
小寫希臘字母做爲編號的值。
div.list div:before { counter-increment: list-number; content: counter(list-number, lower-greek); // ... other styles }
使用嵌套訂單列表時,始終以這種格式顯示編號:
若是您須要子列表項目的數字編號(例如,1.1),您可使用具備 counters()
功能的 CSS計數器
。
<ol> <li> My First Item <ol> <li>My Nested First Item</li> <li>My Nested Second Item</li> </ol> </li> <li>My Second Item</li> </ol>
ol { list-style-type:none; counter-reset:list; } ol li:before { counter-increment:list; content: counters(list, ".") ". "; }
注意,咱們使用的是 counters()
函數,而不是 counter()
函數。
counters()
函數的第二個參數是鏈接字符串。它還能夠有第三個參數來設置格式(例如,希臘數字或羅馬數字)。
元素,如 <h1>
,<h2>
不嵌套在文檔中。它們以不一樣的元素出現,但仍表明一種層次結構。下面介紹如何將嵌套數字設置到標題中:
body { counter-reset:h1; } h1 { counter-reset:h2; } h1:before { counter-increment: h1; content: counter(h1) ". "; } h2:before { counter-increment:h2; content: counter(h1) "." counter(h2) ". "; }
每次找到<h1>
時,<h2>
計數器都會重置。<h2>
在文檔中得到的編號和 <h1>
相關。
值得慶幸的是,CSS
計數器自與 CSS2
一塊兒推出以來,獲得了瀏覽器的普遍支持。雖然在內容之外的屬性中使用 counter()
函數仍然是實驗性的,但你能夠堅決果斷地執行本教程中涵蓋的全部例子。
您準備好迎接涉及CSS計數器的簡單挑戰了嗎?
使用 CSS計數器
在 10
行代碼中顯示 1
到 1000
及其羅馬字符。
若是你被難倒了,下面是你如何作到這一點:
要建立 1000
個 div
元素,可使用如下內容。
for (var i = 0; i < 1000; i++) { document.body.appendChild( document.createElement("div") ); }
CSS計數器:
body { counter-reset:number; } div:before { counter-increment:number; content: counter(number) " => " counter(number, lower-roman); }
CSS 計數器在 CSS 中是一個不爲人知的功能,但您會驚訝於它們派上用場的頻率。在此教程中,咱們討論瞭如何以及什麼時候使用 CSS 計數器,並展現了一些示例。
如下是咱們使用的屬性列表。
屬性 | 用法 |
---|---|
counter-reset | 重置(或建立)給定值計數器(默認0) |
counter-increment | 經過給定偏移增長給定計數器(默認值 1) |
counter(counter-name, counter-format) | 從給定格式獲取計數器的價值 |
counters(counter-name, counter-string, counter-format) | 從給定格式獲取嵌套計數器的價值 |
CSS計數器
雖然很酷。但有一件事須要明白的是,全部計數器都是全局性的。若是你在一個有不少 CSS
文件的大型項目中使用,你可能沒法找到它們的建立、重置和增量位置。不要過分使用它們,必定要使用描述性名稱的計數器,以免衝突。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS計數器</title> <style> html { box-sizing: border-box; font-size: 62.5%; } *, *::before, *:after { box-sizing: inherit; } body { font-family: Rambla, sans-serif; font-size: 2rem; line-height: 1.5; color: #03c03c; } h1 { text-align: center; } .wrapper { margin: 0 auto; width: 85%; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-justify-content: space-around; -ms-flex-pack: distribute; justify-content: space-around; } @media (max-width: 1100px) { .wrapper { -webkit-box-orient: vertical; -webkit-box-direction: normal; -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; align-items: center; } } ol { counter-reset: li; margin: 20px 0; padding-left: 0; } ol>li { position: relative; margin: 0 0 25px 2em; padding: 4px 8px 4px 20px; list-style: none; } ol>li::before { content: counter(li); counter-increment: li; position: absolute; top: -2px; left: -2em; width: 2em; margin-right: 8px; padding: 4px; font-weight: bold; text-align: center; } li ol, li ul { margin-top: 6px; } ol ol li:last-child { margin-bottom: 0; } .disc>li::before { color: white; background-color: #03c03c; border-radius: 50%; } .circle>li::before { color: #03c03c; border: solid 2px #03c03c; border-radius: 50%; } .angle>li::before { color: #03c03c; border-right: solid 3px #03c03c; border-bottom: solid 3px #03c03c; } .shadow>li::before { color: white; background: #03c03c; box-shadow: 5px 5px 0 0 greenyellow; } .rombo>li { margin-bottom: 25px; } .rombo>li::before { color: white; z-index: 2; } .rombo>li::after { position: absolute; top: -2px; left: -2em; width: 2em; margin-right: 8px; padding: 4px; background-color: #03c03c; height: 2em; -webkit-transform: rotate(45deg); -ms-transform: rotate(45deg); transform: rotate(45deg); content: ''; z-index: 1; } .underline>li::before { border-bottom: solid 3px #03c03c; } </style> </head> <body> <h1>Styling Ordered List Numbers</h1> <div class="wrapper"> <ol class="disc"> <li>Tomato</li> <li>Cucumber</li> <li>Onion</li> <li>Pepper</li> </ol> <ol class="circle"> <li>Tomato</li> <li>Cucumber</li> <li>Onion</li> <li>Pepper</li> </ol> <ol class="angle"> <li>Tomato</li> <li>Cucumber</li> <li>Onion</li> <li>Pepper</li> </ol> <ol class="shadow"> <li>Tomato</li> <li>Cucumber</li> <li>Onion</li> <li>Pepper</li> </ol> <ol class="rombo"> <li>Tomato</li> <li>Cucumber</li> <li>Onion</li> <li>Pepper</li> </ol> <ol class="underline"> <li>Tomato</li> <li>Cucumber</li> <li>Onion</li> <li>Pepper</li> </ol> </div> <a href="https://css-tricks.com/custom-list-number-styling/">更多例子</a> </body> </html>
https://css-tricks.com/custom-list-number-styling/
文章地址:https://www.cnblogs.com/dragonir/p/14475600.html 做者:dragonir