本文將介紹 CSS 中一個比較有意思的僞元素 ::marker
,利用它,咱們可讓咱們的文字序號變得更加的有意思!css
CSS 僞元素 ::marker
是從 CSS Pseudo-Elements Level 3 開始新增,CSS Pseudo-Elements Level 4 中完善的一個比較新的僞元素,從 Chrome 86+ 開始獲得瀏覽器的支持。前端
利用它,咱們能夠給元素添加一個僞元素,用於生成一個項目符號或者數字。ios
正常而言,咱們有以下結構:git
<ul> <li>Contagious</li> <li>Stages</li> <li>Pages</li> <li>Courageous</li> <li>Shaymus</li> <li>Faceless</li> </ul>
默認不添加任何特殊的樣式,它的樣式大概是這樣:github
利用 ::marker
咱們能夠對序號前面的小圓點進行改造:api
li { padding-left: 12px; cursor: pointer; color: #ff6000; } li::marker { content: '>'; }
就能夠將小圓點改形成任意咱們想要的:瀏覽器
首先,可以響應 ::marker
的元素只能是一個 list item,譬如 ul
內部的 li
,ol
內部的 li
都是 list item。less
固然,也不是說咱們若是想在其餘元素上使用就沒有辦法,除了 list item,咱們能夠對任意設置了 display: list-item
的元素使用 ::marker
僞元素。ide
其次,對於僞元素內的樣式,不是任何樣式屬性都能使用,目前咱們只能使用這些:字體
::before
僞元素 的 content,用於填充序號內容譬如咱們常常見到標題前面的一些裝飾:
或者,咱們還可使用 emoji 表情:
都很是適合使用 ::marker
來展現,注意用在非 list-item
元素上須要使用 display: list-item
:
<h1>Lorem ipsum dolor sit amet</h1> <h1>Lorem ipsum dolor sit amet</h1>
h1 { display: list-item; padding-left: 8px; } h1::marker { content: '▍'; } h1:nth-child(2)::marker { content: '😅'; }
CodePen Demo -- ::marker example
有意思的是,::marker
仍是能夠動態變化的,利用這點,能夠簡單製做一些有意思的 hover 效果。
譬如這種,沒被選中不開心,選中開心的效果:
li { color: #000; transition: .2s all; } li:hover { color: #ff6000; } li::marker { content: '😩'; } li:hover::marker { content: '😁'; }
CodePen Demo -- ::marker example
能夠觀察到的是,::marker
僞元素與 ::before
、::after
僞元素是很是相似的,它們都有一個 content
屬性。
在 content
裏,實際上是能夠做用一些簡單的字符串加法操做的。利用這個,咱們能夠配合 CSS 計數器 counter-reset
和 counter-increment
實現給 ::marker
元素添加序號的操做。
對
counter-increment
還不算很瞭解的能夠移步這裏:
MDN -- counter-increment
假設咱們有以下 HTML:
<h3>Lorem ipsum dolor sit amet.</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p> <h3>Itaque sequi eaque earum laboriosam.</h3> <p>Ratione culpa reprehenderit beatae quaerat voluptatibus, debitis iusto?</p> <h3>Laudantium sapiente commodi quidem excepturi!</h3> <p>Lorem ipsum dolor sit amet consectetur adipisicing elit.</p>
咱們利用 ::marker
和 CSS 計數器 counter-increment
實現一個自動計數且 h3
前面帶一個 emoji 表情的有序列表:
body { counter-reset: h3; } h3 { counter-increment: h3; display: list-item; } h3::marker { display: list-item; content: "✔" counter(h3) " "; color: lightsalmon; font-weight: bold; }
效果以下,實現了一個自動給 ::marker
元素添加序號的效果:
CodePen Demo -- ::marker example
本文介紹了什麼是 ::marker
以及它的一些實用場景,能夠看出雖然 ::before
、::after
也能實現相似的功能,但 CSS 仍是提供了更具備語義化的標籤 ::marker
,也代表了你們須要對本身的前端代碼(HTML/CSS)的語義化更加註重。
好了,本文到此結束,但願對你有幫助 :)
想 Get 到最有意思的 CSS 資訊,千萬不要錯過個人公衆號 -- iCSS前端趣聞 😄
更多精彩 CSS 技術文章彙總在個人 Github -- iCSS ,持續更新,歡迎點個 star 訂閱收藏。
若是還有什麼疑問或者建議,能夠多多交流,原創文章,文筆有限,才疏學淺,文中如有不正之處,萬望告知。