<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【CSS】可能是最全最易記的CSS選擇器分類大法

          共 2676字,需瀏覽 6分鐘

           ·

          2021-02-23 10:56

          前言

          最近查看了幾位同事的代碼,發(fā)現(xiàn)很多CSS書寫習(xí)慣都是清一色的類名而沒有相應(yīng)的選擇器,層層嵌套的標(biāo)簽都包含至少一個類名。有些同學(xué)會問,很多文章都說「選擇器」有性能問題,為什么還需要使用「選擇器」呢?

          是的,「選擇器」「類名」對比起來性能上確實沒有后者那么好,但是如今瀏覽器對于CSS的解析速度已得到大大的提升,完全可忽略「選擇器」那丁點的性能問題。有興趣的同學(xué)可自行百度搜索CSS選擇器性能的相關(guān)問題進行學(xué)習(xí)。多一個技巧多一份保障!

          本文不細說「選擇器」的性能問題,先來對選擇器做一個功能性的分類。當(dāng)然,熟悉全部CSS選擇器是玩轉(zhuǎn)CSS的最最最最最基本功。本文是玩轉(zhuǎn)CSS的入門講解,先來把基礎(chǔ)搞掂,后續(xù)的CSS文章再為大家講解如何妙用選擇器,喜歡CSS并且想玩CSS的可持續(xù)關(guān)注我喲。

          分類

          在講解選擇器的奇妙用處之前,還是先把選擇器進行分類記憶吧。沒錯,我就是喜歡總結(jié)。由于選擇器的標(biāo)準(zhǔn)概念上沒有作出明確的分類,以下的分類是為了方便記憶進行整理的,僅供參考不喜勿噴。

          ?

          基礎(chǔ)選擇器

          ?
          選擇器別名說明版本
          tag標(biāo)簽選擇器指定類型的標(biāo)簽1
          #idID選擇器指定身份的標(biāo)簽1
          .class類選擇器指定類名的標(biāo)簽1
          *通配選擇器所有類型的標(biāo)簽2
          ?

          層次選擇器

          ?
          選擇器別名說明版本
          elemP elemC后代選擇器元素的后代元素1
          elemP>elemC子代選擇器元素的子代元素2
          elem1+elem2相鄰?fù)x擇器元素相鄰的同胞元素2
          elem1~elem2通用同胞選擇器元素后面的同胞元素3
          ?

          集合選擇器

          ?
          選擇器別名說明版本
          elem1,elem2并集選擇器多個指定的元素1
          elem.class交集選擇器指定類名的元素1
          ?

          條件選擇器

          ?
          選擇器說明版本
          :lang指定標(biāo)記語言的元素2
          :dir()指定書寫方向的元素4
          :has包含指定元素的元素4
          :is指定條件的元素4
          :not非指定條件的元素4
          :where指定條件的元素4
          :scope指定元素作為參考點4
          :any-link所有包含href鏈接元素4
          :local-link所有包含href且屬于絕對地址的鏈接元素4
          ?

          行為選擇器

          ?
          選擇器說明版本
          :active鼠標(biāo)激活的元素1
          :hover鼠標(biāo)懸浮的元素1
          ::selection鼠標(biāo)選中的元素3
          ?

          狀態(tài)選擇器

          ?
          選擇器說明版本
          :target當(dāng)前錨點的元素3
          :link未訪問的鏈接元素1
          :visited已訪問的鏈接元素1
          :focus輸入聚焦的表單元素2
          :required輸入必填的表單元素3
          :valid輸入合法的表單元素3
          :invalid輸入非法的表單元素3
          :in-range輸入范圍以內(nèi)的表單元素3
          :out-of-range輸入范圍以外的表單元素3
          :checked選項選中的表單元素3
          :optional選項可選的表單元素3
          :enabled事件啟用的表單元素3
          :disabled事件禁用的表單元素3
          :read-only只讀的表單元素3
          :read-write可讀可寫的表單元素3
          :target-within內(nèi)部錨點元素處于激活狀態(tài)的元素4
          :focus-within內(nèi)部表單元素處于聚焦?fàn)顟B(tài)的元素4
          :focus-visible輸入聚焦的表單元素4
          :blank輸入為空的表單元素4
          :user-invalid輸入合法的表單元素4
          :indeterminate選項未定的表單元素4
          :placeholder-shown占位顯示的表單元素4
          :current()瀏覽中的元素4
          :past()已瀏覽的元素4
          :future()未瀏覽的元素4
          :playing開始播放的媒體元素4
          :paused暫停播放的媒體元素4
          ?

          結(jié)構(gòu)選擇器

          ?
          選擇器說明版本
          :root文檔的根元素3
          :empty無子元素的元素3
          :first-letter元素的首字母1
          :first-line元素的首行1
          :nth-child(n)元素中指定順序索引的元素3
          :nth-last-child(n)元素中指定逆序索引的元素3
          :first-child元素中為首的元素2
          :last-child元素中為尾的元素3
          :only-child父元素僅有該元素的元素3
          :nth-of-type(n)標(biāo)簽中指定順序索引的標(biāo)簽3
          :nth-last-of-type(n)標(biāo)簽中指定逆序索引的標(biāo)簽3
          :first-of-type標(biāo)簽中為首的標(biāo)簽3
          :last-of-type標(biāo)簽中為尾標(biāo)簽3
          :only-of-type父元素僅有該標(biāo)簽的標(biāo)簽3
          ?

          屬性選擇器

          ?
          選擇器說明版本
          [attr]指定屬性的元素2
          [attr=val]屬性等于指定值的元素2
          [attr*=val]屬性包含指定值的元素3
          [attr^=val]屬性以指定值開頭的元素3
          [attr$=val]屬性以指定值結(jié)尾的元素3
          [attr~=val]屬性包含指定值(完整單詞)的元素(不推薦使用)2
          [attr\|=val]屬性以指定值(完整單詞)開頭的元素(不推薦使用)2
          ?

          偽元素

          ?
          選擇器說明版本
          ::before在元素前插入的內(nèi)容2
          ::after在元素后插入的內(nèi)容2

          優(yōu)勢

          話說選擇器如果沒有用處,那W3C還干嘛把它納入到標(biāo)準(zhǔn)里面呢?選擇器的劣勢就不多說了,使用不當(dāng)可能會引起解析性能問題,這個對于現(xiàn)代瀏覽器來說幾乎可忽略,除非你還是IE的忠實粉絲。使用選擇器有什么好處呢,我給大家總結(jié)一下。

          • 對于那些結(jié)構(gòu)與行為分離的寫法,使用Sass/Less書寫屬性時結(jié)構(gòu)會更加清晰易讀
          • 減少很多無用或者少用的類名,保持css文件的整潔性和觀賞性,代碼也是一門藝術(shù)
          • 減少修改類名而有可能導(dǎo)致樣式失效的問題,有時修改類名沒有確保HTML中和CSS中的一致而導(dǎo)致樣式失效
          • 減少沒有實質(zhì)性使用的類名,例如很多層嵌套的標(biāo)簽,這些標(biāo)簽可能只使用到一個CSS屬性,就沒有必要建個類名來關(guān)聯(lián)
          • 使用選擇器可完成很多曾經(jīng)需要配合JS來完成的交互效果,既可減少代碼量也可減少JS對DOM的操作,使得交互效果更流暢

          總結(jié)

          大家可看看我寫的這篇接近10萬閱讀量的文章《靈活運用CSS開發(fā)技巧》,點擊下方「閱讀原文」即可。羅列了66個CSS開發(fā)技巧,其中大多數(shù)效果是基于選擇器實現(xiàn)的,有興趣的小伙伴可詳細查閱代碼,了解下選擇器的開發(fā)技巧和使用場景。


          「歡迎關(guān)注「前端雜貨鋪」,一個有溫度且致力于前端分享的雜貨鋪」

          「關(guān)注回復(fù)「加群」,可加入雜貨鋪一起交流學(xué)習(xí)成長」

          瀏覽 69
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人A级网站 | 成人午夜做爱 | 国产日韩欧美一区二区东京热 | a及亚洲无吗 | 日韩在线码 |