CSS選擇器

1.class 和 id 的使用場景?

id具有唯一性摇锋,一個標(biāo)簽只能有一個id且每個id只能使用一次驾霜,多用于頁面分塊的塊級標(biāo)簽上耕餐;
class用來標(biāo)識同一類元素健霹,一個標(biāo)簽可以有多個類且同一個類可以用到不同的標(biāo)簽上旺上,多用于多個標(biāo)簽樣式相似或完全相同時;

2.CSS選擇器常見的有幾種?

1.基礎(chǔ)選擇器

基礎(chǔ)選擇器 含義
* 通用元素選擇器糖埋,匹配頁面任何元素
#id id選擇器宣吱,匹配特定id的元素
.class 類選擇器,匹配class包含(不是等于)特定類的元素
element 標(biāo)簽選擇器

2.組合選擇器

組合選擇器 含義
E,F 多元素選擇器瞳别,用,分隔征候,同時匹配元素E或元素F
E F 后代選擇器,用空格分隔祟敛,匹配E元素所有的后代(不只是子元素疤坝、子元素向下遞歸)元素F
E>F 子元素選擇器,用>分隔馆铁,匹配E元素的所有直接子元素F
E+F 直接相鄰選擇器跑揉,匹配E元素之后的與他相鄰的同級元素F
E~F 普通相鄰選擇器(弟弟選擇器),匹配E元素之后的同級元素F(無論直接相鄰與否)
.class1.class2 沒有分隔符埠巨,表示既滿足class1也滿足class2的元素

3.屬性選擇器(不常用)

id,class都是屬性历谍。

屬性選擇器 含義
E[attr] 匹配所有具有屬性attr的元素,div[id]就能取到所有有id屬性的div
E[attr = value] 匹配屬性attr值為value的元素辣垒,div[id=test],匹配id=test的div

4.偽類選擇器

偽類用于當(dāng)已有元素處于的某個狀態(tài)時扮饶,為其添加對應(yīng)的樣式,這個狀態(tài)是根據(jù)用戶行為而動態(tài)變化


偽類列舉
狀態(tài)偽類

基于元素當(dāng)前狀態(tài)進(jìn)行選擇的乍构。在與用戶的交互過程中元素的狀態(tài)是動態(tài)變化的甜无,因此該元素會根據(jù)其狀態(tài)呈現(xiàn)不同的樣式。常見的狀態(tài)偽類主要包括:

狀態(tài)偽類選擇器 含義
E:link 匹配所有未被點(diǎn)擊的鏈接
E:visited 匹配所有已被點(diǎn)擊的鏈接
E:active 匹配鼠標(biāo)已經(jīng)其上按下哥遮、還沒有釋放的E元素
E:hover 匹配鼠標(biāo)懸停其上的E元素
E:focus 匹配獲得當(dāng)前焦點(diǎn)的E元素
結(jié)構(gòu)性偽類

是css3新增選擇器岂丘,通過文檔結(jié)構(gòu)的互相關(guān)系來匹配元素,能夠減少class和id屬性的定義眠饮,使文檔結(jié)構(gòu)更簡潔奥帘。常見的包括:

結(jié)構(gòu)性偽類選擇器 含義
:first-child 選擇某個元素的第一個子元素;
:last-child 選擇某個元素的最后一個子元素仪召;
:nth-child(n) 匹配其父元素的第n個子元素寨蹋,第一個編號為1(odd奇數(shù)松蒜,even偶數(shù))
:nth-last-child() 選擇某個元素的一個或多個特定的子元素,從這個元素的最后一個子元素開始算已旧;
:nth-of-type(n) 匹配其父元素下使用同種標(biāo)簽的第一個子元素(odd奇數(shù)秸苗,even偶數(shù))
:nth-last-of-type(n) 選擇指定的元素,從元素的最后一個開始計算运褪;
:first-of-type 選擇一個上級元素下的第一個同類子元素惊楼;
:last-of-type 選擇一個上級元素的最后一個同類子元素;
:only-child 選擇的元素是它的父元素的唯一一個子元素秸讹;
:only-of-type 選擇一個元素是它的上級元素的唯一一個相同類型的子元素檀咙;
:empty 選擇的元素里面沒有任何內(nèi)容。

5.偽元素選擇器

偽元素是對元素中的特定內(nèi)容進(jìn)行操作璃诀,用于創(chuàng)建一些不在文檔樹中的元素弧可,并為其添加樣式。

偽元素列舉

單冒號(:)用于 CSS3 偽類劣欢,雙冒號(::)用于 CSS3 偽元素侣诺,這是 CSS3 規(guī)范中的一部分要求,目的是為了區(qū)分偽類和偽元素氧秘,對于 CSS2 中已經(jīng)有的偽元素年鸳,例如 :before澡屡,單冒號和雙冒號的寫法 ::before 作用是一樣的鳍寂。

偽元素選擇器 含義
E::first-line 選擇元素文本的第一行。
E::first-letter 選擇元素文本的第一個字母娃惯。
E::before 在元素內(nèi)容的最前面添加新內(nèi)容灭忠。(after以E子元素中的最后一個存在)
E::after 在元素內(nèi)容的最后面添加新內(nèi)容膳算。(after以E子元素中的最后一個存在)
E::selection 匹配用戶當(dāng)前選取的元素
:before :after
  <div class="box">
    <p>這是第一段</p>
  </div>
  <style>
  .box:before{
    content: 'start'
  }
  .box:after{
    content: 'end'
  }
  </style>
  • element:before 在element內(nèi)部創(chuàng)建一個行內(nèi)元素,作為element的第一個孩子
  • element:after 在element內(nèi)部創(chuàng)建一個行內(nèi)元素弛作,作為element的最后一個個孩子
  • 用:before :after 的目的是為了省標(biāo)簽
  • 其中content 是必不可少的
偽元素的應(yīng)用
  1. 清除浮動
    如果父元素的所有子元素都是浮動的涕蜂,父元素的高度則無法撐開∮沉眨可以通過對父元素添加after偽類撐開父元素高度机隙,因為after就是其最后一個子元素。
.clear:after {
    content: '';
    display: block;
    clear: both;
}
  1. 畫一條如下的分割線:
<style>
    .spliter::before, .spliter::after {
      content: '';
      display: inline-block;
      border-top: 1px solid black;
      width: 200px;
      margin: 5px;
    }
  </style>
</head>
<body>
  <p class="spliter">分割線</p>
</body>

3.替代標(biāo)簽,這樣就可以節(jié)省html標(biāo)簽


利用偽元素添加小尖角

用偽元素替代html標(biāo)簽

4.自定義checkbox樣式
點(diǎn)擊進(jìn)行笑臉切換: 代碼
background-size 設(shè)置背景圖片大小萨西。其中關(guān)鍵詞cover和contain:
cover:縮放背景圖片以完全覆蓋背景區(qū)有鹿,可能背景圖片部分看不見。
contain:縮放背景圖片以完全裝入背景區(qū)谎脯,可能背景區(qū)部分空白葱跋。

6.選擇器的優(yōu)先級是怎樣的?對于復(fù)雜場景如何計算優(yōu)先級?

css選擇器優(yōu)先級從高到低分別是:

  1. 在屬性值后面加上 !important 會覆蓋頁面內(nèi)任何位置定義的元素樣式。(前面后面都覆蓋)
    但I(xiàn)E6及以下瀏覽器有個比較顯式的支持問題存在娱俺,!important并不覆蓋掉在同一條樣式的后面的規(guī)則稍味。
div{color:#f00!important;color:#000;}

在上述代碼中,IE6及以下瀏覽器div的文本顏色為#000荠卷,!important并沒有覆蓋后面的規(guī)則模庐;其它瀏覽器下div的文本顏色為#f00。
IE6及以下瀏覽器要使!important生效僵朗,可用以下代碼:

div{color:#f00!important;}
div{color:#000;}
  1. 作為style屬性寫在元素標(biāo)簽上的內(nèi)聯(lián)樣式 <div style="xxx"></div>
  2. id選擇器
  3. 類選擇器
  4. 偽類選擇器
  5. 屬性選擇器
  6. 標(biāo)簽選擇器
  7. 通配符選擇器
  8. 瀏覽器自定義

復(fù)雜場景,計算優(yōu)先級

選擇器 權(quán)重值
行內(nèi)樣式 a
ID 選擇器 b
類,屬性選擇器和偽類選擇器 c
標(biāo)簽選擇器屑彻、偽元素 d

注意:a的權(quán)重最高验庙,b、c社牲、d依次遞減粪薛,根據(jù)abcd的排列得出優(yōu)先級順序
!important優(yōu)先級最高,無視上述規(guī)則搏恤。當(dāng)選擇器優(yōu)先級相同時违寿,那么后定義的會覆蓋先定義的。

4.a:link, a:hover, a:active, a:visited 的順序是怎樣的熟空? 為什么藤巢?
/*正確順序*/
a:link {
  color: #000;
}
a:visited {
  color: #F00;
}
a:hover {
  color: #0F0;
}
a:active {
  color: #00F;
}

原因:

  • 當(dāng)鼠標(biāo)移動到a標(biāo)簽上,此時與標(biāo)簽顏色相關(guān)的選擇器有:a:link,a:visited,a:hover,這三個選擇器擁有相同的優(yōu)先級息罗,但是被寫在最后的選擇器會覆蓋之前的選擇器掂咒,因此要想實(shí)現(xiàn)“當(dāng)鼠標(biāo)移動到a標(biāo)簽上變換顏色”的效果,需要將a:hover置于 a:link 和 a:visited 之后
  • 當(dāng)鼠標(biāo)點(diǎn)擊a標(biāo)簽迈喉,此時與標(biāo)簽顏色相關(guān)的選擇器有:a:link,a:visited,a:hover和a:active绍刮,這四個選擇器擁有相同的優(yōu)先級,但是被寫在最后的選擇器會覆蓋掉之前的選擇器挨摸,因此要想實(shí)現(xiàn)“當(dāng)鼠標(biāo)點(diǎn)擊a標(biāo)簽時變換顏色”的效果孩革,需要將a:active置于a:link,a:visited,a:hover 之后
5.以下選擇器分別是什么意思?
#header{  /*id選擇器,匹配id="header"的元素*/
}
.header{   /*類選擇器得运,匹配class="header"的元素*/
}
.header .logo{  /*后代選擇器膝蜈,匹配class="header"元素后代中class="logo"的元素*/
}
.header.mobile{  /*既滿足class="header"也滿足class="mobile"的元素*/
}
.header p, .header h3{  /*多元素選擇器,為header類下的p標(biāo)簽與header類下的h3標(biāo)簽添加相同樣式*/
}
#header .nav>li{  /*匹配id="header"元素的后代中class值為nav元素的所有直接子元素li*/
}
#header a:hover{  /*匹配id值為header元素后代中的鼠標(biāo)懸停其上的a元素 */
}
#header .logo~p{  /*在id值為header的元素后代中尋找:class值為logo元素之后的同級p元素*/
}
#header input[type="text"]{/*在id值為header的元素后代中尋找:匹配屬性type值為text的input元素*/
}
6.列出你知道的偽類選擇器
偽類選擇器 含義
E:link 匹配所有未被點(diǎn)擊的鏈接
E:visited 匹配所有已被點(diǎn)擊的鏈接
E:active 匹配鼠標(biāo)已經(jīng)其上按下、還沒有釋放的E元素
E:hover 匹配鼠標(biāo)懸停其上的E元素
E:focus 匹配獲得當(dāng)前焦點(diǎn)的E元素
E:lang(c) 匹配lang屬性等于c的E元素
E:enabled 匹配表單中可用的元素
E:disabled 匹配表單中禁用的元素
E:checked 匹配表單中被選中的radio或checkbox元素
E:nth-child(n) 匹配E的父級元素下的第n個子元素熔掺,第一個編號為1
E:nth-of-type(n) 匹配E的父級元素下所有使用同種標(biāo)簽的第n個元素
7.div:first-child彬檀、div:first-of-type、div :first-child和div :first-of-type的作用和區(qū)別 (注意空格的作用)
div:first-child      div的父元素的 子元素中第一個元素且標(biāo)簽為div的元素
                                  <body>
                                    <div>123</div>//就是這個元素瞬女,如果該標(biāo)簽不為div,則匹配失敗
                                    <p>123<p>
                                    <div>123</div>
                                  </body>
div:first-of-type    div的父元素的 子元素中窍帝,首次出現(xiàn)的div元素
                                  <main>
                                     <p>123<p>
                                     <div>123</div>//就是這個元素
                                  </main>
div :first-child     div 下的第一個標(biāo)簽
div :first-of-type   div 下的相同標(biāo)簽的第一個
8.運(yùn)行如下代碼,解析下輸出樣式的原因诽偷。
<style>
.item1:first-child{
  color: red;
}
.item1:first-of-type{
  background: blue;
}
</style>
 <div class="ct">
   <p class="item1">aa</p>
   <h3 class="item1">bb</h3>
   <h3 class="item1">ccc</h3>
 </div>

輸出結(jié)果:


原因:
.item1:first-child 匹配到class="item1"的父級元素下的第一個子元素坤学,即<p class="item1">aa</p>
.item1:first-of-type 匹配到class="item1"的父級元素下所有使用相同標(biāo)簽的第一個元素疯坤。 即使用p標(biāo)簽的第一個元素和使用h3標(biāo)簽的第一個元素。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末深浮,一起剝皮案震驚了整個濱河市压怠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌飞苇,老刑警劉巖菌瘫,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異布卡,居然都是意外死亡雨让,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門忿等,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栖忠,“玉大人,你說我怎么就攤上這事贸街♀帜” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵薛匪,是天一觀的道長捐川。 經(jīng)常有香客問我,道長逸尖,這世上最難降的妖魔是什么属拾? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮冷溶,結(jié)果婚禮上渐白,老公的妹妹穿的比我還像新娘。我一直安慰自己逞频,他們只是感情好纯衍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苗胀,像睡著了一般襟诸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上基协,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天歌亲,我揣著相機(jī)與錄音,去河邊找鬼澜驮。 笑死陷揪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悍缠,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼卦绣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了飞蚓?” 一聲冷哼從身側(cè)響起滤港,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎趴拧,沒想到半個月后溅漾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡著榴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年添履,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兄渺。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡缝龄,死狀恐怖汰现,靈堂內(nèi)的尸體忽然破棺而出挂谍,到底是詐尸還是另有隱情,我是刑警寧澤瞎饲,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布口叙,位于F島的核電站,受9級特大地震影響嗅战,放射性物質(zhì)發(fā)生泄漏妄田。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一驮捍、第九天 我趴在偏房一處隱蔽的房頂上張望疟呐。 院中可真熱鬧,春花似錦东且、人聲如沸启具。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲁冯。三九已至,卻和暖如春色查,著一層夾襖步出監(jiān)牢的瞬間薯演,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工秧了, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跨扮,地道東北人。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像好港,于是被迫代替她去往敵國和親愉镰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1.class 和 id 的使用場景? class:類選擇器钧汹,一個標(biāo)簽可以有多個類且同一個類可以用到不同的標(biāo)簽上丈探,...
    饑人谷_兔子君閱讀 1,179評論 0 0
  • 1、class和id的使用場景分別是什么拔莱? 首先碗降,一個HTML文件中class名字可以有多個相同的,但是id的名字...
    李博洋li閱讀 886評論 0 1
  • 其實(shí)平時用得多的選擇器無非也就是那么幾個塘秦,時間久了讼渊,許多不常用的選擇器就慢慢忘記了。為了不讓自己忘記這些選擇器尊剔,今...
    盛夏晚清風(fēng)閱讀 1,814評論 0 5
  • id與class的使用場景 id選擇器爪幻,匹配特定id的元素類選擇器,匹配class包含(不是等于)特定類的元素id...
    姚小帥閱讀 311評論 0 0
  • CSS選擇器常見的有幾種? 類型選擇器(元素選擇器): 后代選擇器 上述選擇器適用于那些應(yīng)用范圍廣的一般樣式须误。 I...
    coolheadedY閱讀 567評論 1 2