5. CSS選擇器

1. class 和 id 的使用場(chǎng)景:

  • id:id選擇器,使用#name定義(name為id名,可任意取名),使用id="name"調(diào)用钓丰,其優(yōu)先級(jí)高于類選擇器,一個(gè)標(biāo)簽只能有一個(gè)id且每個(gè)id只能使用一次每币,多用于頁面分塊的塊級(jí)標(biāo)簽上斑粱;
  • class:類選擇器,使用.name定義(name為類名脯爪,可任意取名)则北,使用class="name"調(diào)用,一個(gè)標(biāo)簽可以有多個(gè)類且同一個(gè)類可以用到不同的標(biāo)簽上痕慢,多用于多個(gè)標(biāo)簽樣式相似或完全相同時(shí)尚揣。

2. CSS常見選擇器:

  1. 基礎(chǔ)選擇器
  • * : 通用元素選擇器,匹配頁面任何元素(這也就決定了我們很少使用)
  • #id : id選擇器掖举,匹配特定id的元素
  • .class: 類選擇器快骗,匹配class包含(不是等于)特定類的元素
  • element: 標(biāo)簽選擇器
  1. 組合選擇器
  • E,F 多元素選擇器,用,分隔塔次,同時(shí)匹配元素E或元素F
  • E F 后代選擇器方篮,用空格分隔,匹配E元素所有的后代(不只是子元素励负、子元素向下遞歸)元素F
  • E>F 子元素選擇器藕溅,用>分隔,匹配E元素的所有直接子元素
  • E+F 直接相鄰選擇器继榆,匹配E元素之后的相鄰的同級(jí)元素F
  • E~F 普通相鄰選擇器(弟弟選擇器)巾表,匹配E元素之后的同級(jí)元素F(無論直接相鄰與否)
  • .class1.class2 id和class選擇器和選擇器連寫的時(shí)候中間沒有分隔符,.和 # 本身充當(dāng)分隔符的元素
  • element#id id和class選擇器和選擇器連寫的時(shí)候中間沒有分隔符略吨,.和 #本身充當(dāng)分隔符的元素
  1. 屬性選擇器
  • E[attr] 匹配所有具有屬性為attr的元素(div[id]能選擇所有具有id屬性的div)
  • E[attr=value] 匹配所有屬性為value的元素(div[type=text]匹配id=text的div)
  • E[attr~=value] 匹配所有屬性attr具有多個(gè)空格分隔集币,其中一個(gè)值等于value的元素
  • E[attr ^=value] 匹配屬性attr的值以value開頭的元素
  • E[attr $=value] 匹配屬性attr的值以value結(jié)尾的元素
  • E[attr *=value] 匹配屬性attr的值包含value的元素
  1. *偽類選擇器
  • E:first-child 匹配元素E的第一個(gè)子元素
  • E:last-child 匹配元素e的最后一個(gè)子元素
  • E:nth-child(n) 匹配其父元素的第n個(gè)子元素,第一個(gè)編號(hào)為1
  • E:first-of-type 匹配父元素下使用同種標(biāo)簽的第一個(gè)子元素翠忠,等同于nth-of-type(1)
  • E:hover 匹配鼠標(biāo)懸停的e元素
  • E:focus 匹配獲得焦點(diǎn)的e元素
  1. 偽元素選擇器
  • E::first-line 匹配E元素的第一行
  • E::first-letter 匹配E元素的第一個(gè)字母
  • E::before 在e元素之前插入生成的內(nèi)容
  • E::after 在e元素之后插入生成的內(nèi)容

3. 選擇器的優(yōu)先級(jí)及計(jì)算:

  1. 屬性后+!important:p {color:#ccc!important;}
  2. 內(nèi)聯(lián)樣式:
  3. id選擇器: #id
  4. 類選擇器: .class
  5. 偽類選擇器:a:link
  6. 屬性選擇器:h1{}
  7. 標(biāo)簽選擇器:p[XXX]
  8. 通用選擇器:*
  9. 瀏覽器自定義

復(fù)雜場(chǎng)景時(shí)鞠苟,計(jì)算優(yōu)先級(jí)時(shí)通過數(shù)標(biāo)簽來計(jì)算,先數(shù)id秽之,如果id相等再數(shù)類当娱,如果id不相等,id多的選擇器權(quán)重高政溃,權(quán)重越高趾访,優(yōu)先級(jí)越高态秧。如果id選擇器數(shù)量相同董虱,再數(shù)類選擇器,最后數(shù)標(biāo)簽。

權(quán)重計(jì)算規(guī)則:

  1. 第一等:代表內(nèi)聯(lián)樣式愤诱,如: style=" "云头,權(quán)值為1000。
  2. 第二等:代表ID選擇器淫半,如:#content溃槐,權(quán)值為0100。
  3. 第三等:代表類科吭,偽類和屬性選擇器昏滴,如.content,權(quán)值為0010对人。
  4. 第四等:代表類型選擇器和偽元素選擇器谣殊,如div p,權(quán)值為0001牺弄。
  5. 通配符姻几、子選擇器、相鄰選擇器等的势告。如*蛇捌、>、+,權(quán)值為0000咱台。
  6. 繼承的樣式?jīng)]有權(quán)值络拌。
    !important 的作用是提升優(yōu)先級(jí),換句話說回溺。加了這句的樣式的優(yōu)先級(jí)是最高的(比內(nèi)聯(lián)樣式的優(yōu)先級(jí)還高)盒音。

比較規(guī)則:

  1. 1,0,0,0 > 0,99,99,99。也就是說從左往右逐個(gè)等級(jí)比較馅而,前一等級(jí)相等才往后比祥诽。
  2. 無論是行間、內(nèi)部和外部樣式瓮恭,都是按照這個(gè)規(guī)則來進(jìn)行比較雄坪。而不是直觀的行間>內(nèi)部>外部樣式;ID>class>元素屯蹦。之所以有這樣的錯(cuò)覺维哈,是因?yàn)榇_實(shí)行間為第一等的權(quán)重,所以它的權(quán)重是最高的登澜。而內(nèi)部樣式可能一般寫在了外部樣式引用了之后阔挠,所以覆蓋掉了之前的。
  3. 在權(quán)重相同的情況下脑蠕,后面的樣式會(huì)覆蓋掉前面的樣式购撼。
  4. 通配符跪削、子選擇器、相鄰選擇器等的迂求。雖然權(quán)值為0000碾盐,但是也比繼承的樣式優(yōu)先。
    實(shí)例:
a{color: yellow;} /*特殊性值:0,0,0,1*/
 div a{color: green;} /*特殊性值:0,0,0,2*/
.demo a{color: black;} /*特殊性值:0,0,1,1*/
 .demo input[type="text"]{color: blue;} /*特殊性值:0,0,2,1*/
 .demo *[type="text"]{color: grey;} /*特殊性值:0,0,2,0*/
 #demo a{color: orange;} /*特殊性值:0,1,0,1*/
 div#demo a{color: red;} /*特殊性值:0,1,0,2*/
<a href="">第一條應(yīng)該是黃色</a> <!--適用第1行規(guī)則-->
<div class="demo">
    <input type="text" value="第二條應(yīng)該是藍(lán)色" /><!--適用第4揩局、5行規(guī)則毫玖,第4行優(yōu)先級(jí)高-->
    <a href="">第三條應(yīng)該是黑色</a><!--適用第2、3行規(guī)則凌盯,第3行優(yōu)先級(jí)高-->
</div>
<div id="demo">
    <a href="">第四條應(yīng)該是紅色</a><!--適用第5付枫、6行規(guī)則,第6行優(yōu)先級(jí)高-->
</div>

4. a:link, a:hover, a:active, a:visited 意義及順序:

  • a偽類解釋:
  1. link:設(shè)置a對(duì)象在未被訪問前的CSS樣式驰怎;
  2. visited:設(shè)置a對(duì)象在其鏈接地址已被訪問過時(shí)的CSS樣式励背;
  3. hover:設(shè)置對(duì)象在其鼠標(biāo)懸停時(shí)的CSS樣式;
  4. active:設(shè)置對(duì)象在被用戶激活(在鼠標(biāo)點(diǎn)擊與釋放之間發(fā)生的事件)時(shí)的CSS樣式砸西;
  5. focus : 代表的是獲取焦點(diǎn)時(shí)的樣式叶眉,這個(gè)我們可以通過tab鍵來查看,一旦鏈接獲取了焦點(diǎn)芹枷,則它的樣式就是你設(shè)置的focus樣式衅疙。
  • 順序:
    a偽類的順序?yàn)椋篴:link > a:visited > a:focus >a:hover > a:active。
    前四個(gè)的順序有個(gè)比較簡(jiǎn)便的記憶方法:L-V-H-A鸳慈,即love & hate饱溢。
  • 原因:
  1. 鼠標(biāo)經(jīng)過的“未訪問鏈接”同時(shí)擁有a:link、a:hover兩種屬性走芋,后面的屬性會(huì)覆蓋前面的屬性定義绩郎;
  2. 鼠標(biāo)經(jīng)過的“已訪問鏈接”同時(shí)擁有a:visited、a:hover兩種屬性翁逞,后面的屬性會(huì)覆蓋前面的屬性定義肋杖;
  3. a:active是鼠標(biāo)點(diǎn)擊與釋放之間發(fā)生的事件,并擁有鼠標(biāo)懸停a:hover屬性挖函;

由于偽類的選擇器優(yōu)先級(jí)一致状植,后面的a鏈接樣式會(huì)覆蓋前面的。
所以說怨喘,a:hover定義一定要放在a:link津畸、a:visited的后面,才能在鼠標(biāo)懸停時(shí)必怜,a:hover樣式不被a:link和a:visited樣式覆蓋肉拓;

  1. a:visited一定要放在a:link的后面,因?yàn)檫@樣能保證訪問過的鏈接具有a:visited樣式梳庆,并能覆蓋a:link默認(rèn)樣式暖途;
  2. a:active一定要放在a:hover后面卑惜。假如a:active放在a:hover前面,由于a:active擁有鼠標(biāo)懸停a:hover屬性丧肴,當(dāng)鼠標(biāo)按下時(shí)残揉,首先會(huì)觸發(fā)a:hover事件胧后,然后觸發(fā)
  3. a:active芋浮,但是a:ctive已被a:hover的樣式所覆蓋,因此無法看到a:active的樣式壳快。所以纸巷,a:active一定要放在a:hover后面。
  4. 補(bǔ)充a:focus的順序:
    • :hover 代表的是你光標(biāo)經(jīng)過某一元素時(shí)的樣式眶痰,如果將此樣式放在:focus之后瘤旨,則當(dāng)鏈接獲取焦點(diǎn)時(shí),顯示:focus樣式竖伯,當(dāng)光標(biāo)經(jīng)過此鏈接時(shí)存哲,會(huì)顯示hover的樣式,因?yàn)閔over排在后七婴,會(huì)覆蓋focus樣式祟偷。
- 如果:hover排在前,:focus排在后打厘,則當(dāng)光標(biāo)獲得焦點(diǎn)時(shí)顯示:focus的樣式修肠,但當(dāng)光標(biāo)經(jīng)過鏈接時(shí),樣式并未顯示:hover的樣式户盯,而是繼續(xù)是:focus的樣式嵌施,因?yàn)閼?yīng)用的focus樣式在hover之后,覆蓋了前面的樣式莽鸭。

可用以下代碼進(jìn)行具體演示

a:focus{
color:black;
text-decoration:underline;
}

a:hover{
color:#FF0000;
text-decoration:underline;  
}

a:active{
color:#FFCC00;
}

綜上所述吗伤,a偽類的順序?yàn)椋篴:link > a:visited > a:focus > a:hover > a:active。

5. 選擇器舉例:

/*id選擇器硫眨,匹配id值為header的元素*/
#header{
}
/*class選擇器牲芋,匹配class值為header的所有元素*/
.header{
}
/*后代選擇器,匹配class值為header元素的所有class值為logo的后代*/
.header .logo{
}
/*匹配class值包含header和mobile的元素 */
.header.mobile{
}
/*匹配class值為header元素后代中的p和h3元素*/
.header p, .header h3{
}
/*匹配id值為header元素后代中class值為nav元素中的li元素*/
#header .nav>li{
}
/*為id值為header元素后代中的a元素指定鼠標(biāo)移動(dòng)到其上方的樣式 */
#header a:hover{
}
/*在id值為header的元素后代中尋找:class值為logo元素之后的同級(jí)p元素*/
#header .logo~p{
}
/*在id值為header的元素后代中尋找type屬性為”text"的input元素*/
#header input[type="text"]{
}

6. div:first-child和div:first-of-type的作用和區(qū)別

div:first-child 匹配的是 div 的父元素下第一個(gè)子元素捺球,而 div:first-of-type
匹配的是父元素下同種元素類型的第一個(gè)子元素缸浦。例如:

<div class="father">
  <h1 id="child1">AA</h1>
  <h2 id="child2">BB</h1>
  <h3 id="child3">CC</h1>
  <h2 id="child4">DD</h1>
</div>

如果有選擇器如下:
#child2:first-child,選中AA氮兵;
#child2:first-of-type裂逐,選中BB;
#child4:first-child泣栈,選中AA卜高;
#child4:first-of-type弥姻,選中BB。

實(shí)例如下:

<style>
.item1:first-child{
  color: red;
}
.item1:first-of-type{
  background: blue;
}
</style>

<div class="ct"> 
    <p class="item1">aa</p> 
    <!-- 父元素div下第一個(gè)類為item1的子元素掺涛,父元素div下第一個(gè)類為item1的p標(biāo)簽子元素懂更,
    因此滿足.item1:first-child和.item1:first-of-type-->
    <h3 class="item1">bb</h3>
    <!-- 父元素div下第一個(gè)類為item1的h3標(biāo)簽子元素,滿足.item1:first-of-type-->
    <h3 class="item1">ccc</h3> 
</div>

輸出結(jié)果如下:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末淀零,一起剝皮案震驚了整個(gè)濱河市炬称,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拣帽,老刑警劉巖疼电,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異减拭,居然都是意外死亡蔽豺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門拧粪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來修陡,“玉大人,你說我怎么就攤上這事可霎∑茄唬” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵啥纸,是天一觀的道長(zhǎng)号杏。 經(jīng)常有香客問我,道長(zhǎng)斯棒,這世上最難降的妖魔是什么盾致? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮荣暮,結(jié)果婚禮上庭惜,老公的妹妹穿的比我還像新娘。我一直安慰自己穗酥,他們只是感情好护赊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著砾跃,像睡著了一般骏啰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抽高,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天判耕,我揣著相機(jī)與錄音,去河邊找鬼翘骂。 笑死壁熄,一個(gè)胖子當(dāng)著我的面吹牛帚豪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播草丧,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼狸臣,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了昌执?” 一聲冷哼從身側(cè)響起烛亦,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仙蚜,沒想到半個(gè)月后此洲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厂汗,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡委粉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了娶桦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贾节。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖衷畦,靈堂內(nèi)的尸體忽然破棺而出栗涂,到底是詐尸還是另有隱情,我是刑警寧澤祈争,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布斤程,位于F島的核電站,受9級(jí)特大地震影響菩混,放射性物質(zhì)發(fā)生泄漏忿墅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一沮峡、第九天 我趴在偏房一處隱蔽的房頂上張望疚脐。 院中可真熱鬧,春花似錦邢疙、人聲如沸棍弄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呼畸。三九已至,卻和暖如春颁虐,著一層夾襖步出監(jiān)牢的瞬間蛮原,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工聪廉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞬痘,地道東北人故慈。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像框全,于是被迫代替她去往敵國(guó)和親察绷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

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

  • 1.class 和 id 的使用場(chǎng)景? class:類選擇器津辩,一個(gè)標(biāo)簽可以有多個(gè)類且同一個(gè)類可以用到不同的標(biāo)簽上拆撼,...
    饑人谷_兔子君閱讀 1,194評(píng)論 0 0
  • class 和 id 的使用場(chǎng)景? class 重在樣式的復(fù)用,重普遍性喘沿。id重在劃分樣式區(qū)域闸度,可以作為樣式表中的...
    南山碼農(nóng)閱讀 374評(píng)論 0 0
  • 1 .class 和 id 的使用場(chǎng)景? .class,類選擇器蚜印。類選擇器可以定義多個(gè)元素莺禁。當(dāng)你想定義一組元素以相...
    饑人谷_邵征鵬閱讀 366評(píng)論 0 0
  • 1.class 和 id 的使用場(chǎng)景? 類選擇器允許以一種獨(dú)立于文檔元素的方式來指定樣式哟冬。該選擇器可以單獨(dú)使用,也...
    草鞋弟閱讀 2,419評(píng)論 0 1
  • 一忆绰、CSS選擇器常見的有幾種? 基本選擇器 通配選擇器~選擇文檔中所有的html元素浩峡,用一個(gè)*表示 元素選擇器~選...
    dengpan閱讀 963評(píng)論 0 3