class 和 id 的使用場景?
id對應(yīng)css是用樣式選擇符“#”磨德,只能被一個元素調(diào)用苔悦,id適用于定義結(jié)構(gòu)和大的板塊枷邪。
class對應(yīng)css是用樣式選擇符“.”珍德,可以用于被多個元素調(diào)用蚤告,重復(fù)引用樣式努酸,使用class。
CSS選擇器常見的有幾種?
- 基礎(chǔ)選擇器
選擇器 | 含義 |
---|---|
* | 通用元素選擇器杜恰,匹配頁面任何元素(這也就決定了我們很少使用) |
#id | id選擇器获诈,匹配特定id的元素 |
.class | 類選擇器,匹配class包含(不是等于)特定類的元素 |
element | 標(biāo)簽選擇器 |
- 組合選擇器
選擇器 | 含義 |
---|---|
E,F | 多元素選擇器心褐,用,分隔舔涎,同時匹配元素E或元素F |
E F | 后代選擇器,用空格分隔逗爹,匹配E元素所有的后代(不只是子元素亡嫌、子元素向下遞歸)元素F |
E>F | 子元素選擇器,用>分隔掘而,匹配E元素的所有直接子元素 |
E+F | 直接相鄰選擇器挟冠,匹配E元素之后的相鄰的同級元素F |
E~F | 普通相鄰選擇器(弟弟選擇器),匹配E元素之后的同級元素F(無論直接相鄰與否) |
.class1.class2 | id和class選擇器和選擇器連寫的時候中間沒有分隔符袍睡,. 和 # 本身充當(dāng)分隔符的元素 |
element#id | id和class選擇器和選擇器連寫的時候中間沒有分隔符知染,. 和 # 本身充當(dāng)分隔符的元素 |
- 屬性選擇器
選擇器 | 含義 |
---|---|
E[attr] | 匹配所有具有屬性attr的元素,div[id]就能取到所有有id屬性的div |
E[attr = value] | 匹配屬性attr值為value的元素斑胜,div[id=test],匹配id=test的div |
E[attr ~= value] | 匹配所有屬性attr具有多個空格分隔控淡、其中一個值等于value的元素 |
E[attr ^= value] | 匹配屬性attr的值以value開頭的元素 |
E[attr $= value] | 匹配屬性attr的值以value結(jié)尾的元素 |
E[attr *= value] | 匹配屬性attr的值包含value的元素 |
- 偽類選擇器
選擇器 | 含義 |
---|---|
E:first-child | 匹配作為長子(第一個子女)的元素E |
E:link | 匹配所有未被點擊的鏈接 |
E:visited | 匹配所有已被點擊的鏈接 |
E:active | 匹配鼠標(biāo)已經(jīng)其上按下、還沒有釋放的E元素 |
E:hover | 匹配鼠標(biāo)懸停其上的E元素 |
E:focus | 匹配獲得當(dāng)前焦點的E元素 |
E:lang(c) | 匹配lang屬性等于c的E元素 |
E:enabled | 匹配表單中可用的元素 |
E:disabled | 匹配表單中禁用的元素 |
E:checked | 匹配表單中被選中的radio或checkbox元素 |
E::selection | 匹配用戶當(dāng)前選中的元素 |
E:root | 匹配文檔的根元素止潘,對于HTML文檔掺炭,就是HTML元素 |
E:nth-child(n) | 匹配其父元素的第n個子元素,第一個編號為1 |
E:nth-last-child(n) | 匹配其父元素的倒數(shù)第n個子元素凭戴,第一個編號為1 |
E:nth-of-type(n) | 與:nth-child()作用類似涧狮,但是僅匹配使用同種標(biāo)簽的元素 |
E:nth-last-of-type(n) | 與:nth-last-child() 作用類似,但是僅匹配使用同種標(biāo)簽的元素 |
E:last-child | 匹配父元素的最后一個子元素,等同于:nth-last-child(1) |
E:first-of-type | 匹配父元素下使用同種標(biāo)簽的第一個子元素勋篓,等同于:nth-of-type(1) |
E:last-of-type | 匹配父元素下使用同種標(biāo)簽的最后一個子元素吧享,等同于:nth-last-of-type(1) |
E:only-child | 匹配父元素下僅有的一個子元素,等同于:first-child:last-child或 :nth-child(1):nth-last-child(1) |
E:only-of-type | 匹配父元素下使用同種標(biāo)簽的唯一一個子元素譬嚣,等同于:first-of-type:last-of-type或 :nth-of-type(1):nth |
E:empty | 匹配一個不包含任何子元素的元素钢颂,文本節(jié)點也被看作子元素 |
E:not(selector) | 匹配不符合當(dāng)前選擇器的任何元素 |
- 偽元素選擇器
選擇器 | 含義 |
---|---|
E::first-line | 匹配E元素內(nèi)容的第一行 |
E::first-letter | 匹配E元素內(nèi)容的第一個字母 |
E::before | 在E元素之前插入生成的內(nèi)容 |
E::after | 在E元素之后插入生成的內(nèi)容 |
選擇器的優(yōu)先級是怎樣的?對于復(fù)雜場景如何計算優(yōu)先級?
- 在屬性后面使用 !important 會覆蓋頁面內(nèi)任何位置定義的元素樣式
- 作為style屬性寫在元素標(biāo)簽上的內(nèi)聯(lián)樣式
- id選擇器
- 類選擇器
- 偽類選擇器
- 屬性選擇器
- 標(biāo)簽選擇器
- 通配符選擇器
- 瀏覽器自定義
行內(nèi)樣式 <div style="xxx"></div> ==> a
ID 選擇器 ==> b
類拜银,屬性選擇器和偽類選擇器 ==> c
標(biāo)簽選擇器殊鞭、偽元素 ==> d
比較相同級別a、b尼桶、c操灿、d的數(shù)量。a的值大泵督,則優(yōu)先級高趾盐,如果a的值相同,則b的值大的優(yōu)先級高小腊,以此類推救鲤。
a:link, a:hover, a:active, a:visited 的順序是怎樣的? 為什么秩冈?
- a:link
- a:visited
- a:hover
- a:active
- link:連接平常的狀態(tài)
- visited:連接被訪問過之后
- hover:鼠標(biāo)放到連接上的時候
- active:連接被按下的時候
按照平時點擊鼠標(biāo)的順序應(yīng)該是a:link, a:hover, a:active, a:visited本缠,但由于相同優(yōu)先級別的選擇器,后面的樣式會覆蓋前面的樣式入问。當(dāng)點擊完鼠標(biāo)后丹锹,a:visited的樣式會一直存在,覆蓋掉前面的樣式芬失,所以要使a:hover,和a:active的樣式不被覆蓋楣黍,要將a:visited放在a:hover,和a:active的前面。
以下選擇器分別是什么意思?
#header{
}
匹配id="header"的元素
.header{
}
匹配class="header"的元素
.header .logo{
}
匹配class="header"的所有后代中class="logo"的元素
.header.mobile{
}
匹配class="header"并且class="mobile"的元素
.header p, .header h3{
}
匹配class="header"中所有后代p元素和h3元素
#header .nav>li{
}
匹配id="header"中所有后代nav元素中的子元素li元素
#header a.hover{
}
匹配id="header"中所有后代中鼠標(biāo)處于hover狀態(tài)的a元素
#header .logo~p{
}
匹配id="header"中所有后代class="logo"元素后面的同級p元素
#header input[type="text"]{
}
匹配id="header"中所有后代中input標(biāo)簽type="text"的元素
列出你知道的偽類選擇器
選擇器 | 含義 |
---|---|
E:first-child | 匹配作為長子(第一個子女)的元素E |
E:link | 匹配所有未被點擊的鏈接 |
E:visited | 匹配所有已被點擊的鏈接 |
E:active | 匹配鼠標(biāo)已經(jīng)其上按下棱烂、還沒有釋放的E元素 |
E:hover | 匹配鼠標(biāo)懸停其上的E元素 |
E:focus | 匹配獲得當(dāng)前焦點的E元素 |
E:lang(c) | 匹配lang屬性等于c的E元素 |
E:enabled | 匹配表單中可用的元素 |
E:disabled | 匹配表單中禁用的元素 |
E:checked | 匹配表單中被選中的radio或checkbox元素 |
E::selection | 匹配用戶當(dāng)前選中的元素 |
E:root | 匹配文檔的根元素租漂,對于HTML文檔,就是HTML元素 |
E:nth-child(n) | 匹配其父元素的第n個子元素垢啼,第一個編號為1 |
E:nth-last-child(n) | 匹配其父元素的倒數(shù)第n個子元素窜锯,第一個編號為1 |
E:nth-of-type(n) | 與:nth-child()作用類似张肾,但是僅匹配使用同種標(biāo)簽的元素 |
E:nth-last-of-type(n) | 與:nth-last-child() 作用類似芭析,但是僅匹配使用同種標(biāo)簽的元素 |
E:last-child | 匹配父元素的最后一個子元素,等同于:nth-last-child(1) |
E:first-of-type | 匹配父元素下使用同種標(biāo)簽的第一個子元素吞瞪,等同于:nth-of-type(1) |
E:last-of-type | 匹配父元素下使用同種標(biāo)簽的最后一個子元素馁启,等同于:nth-last-of-type(1) |
E:only-child | 匹配父元素下僅有的一個子元素,等同于:first-child:last-child或 :nth-child(1):nth-last-child(1) |
E:only-of-type | 匹配父元素下使用同種標(biāo)簽的唯一一個子元素,等同于:first-of-type:last-of-type或 :nth-of-type(1):nth |
E:empty | 匹配一個不包含任何子元素的元素惯疙,文本節(jié)點也被看作子元素 |
E:not(selector) | 匹配不符合當(dāng)前選擇器的任何元素 |
div:first-child翠勉、div:first-of-type、div :first-child和div :first-of-type的作用和區(qū)別 (注意空格的作用)
- div:first-child:匹配div的父元素下的第一個div子元素
- div:first-of-type:匹配div的父元素下第一個div子元素類型的每個元素
- div :first-child:匹配div下的第一個子元素
- div :first-of-type匹配div下的同類型的第一個元素
運行如下代碼霉颠,解析下輸出樣式的原因对碌。
結(jié)果如圖:
代碼中有兩個樣式:
.item1:first-child{
color: red;
}
.item1:first-of-type{
background: blue;
}
先解析第一個樣式
.item1:first-child{
color: red;
}
匹配class="item1"的其父元素下的第一個元素,即class="ct"下面的第一個元素p元素蒿偎,所以aa為紅色朽们。
再解析第二個樣式:
.item1:first-of-type{
background: blue;
}
匹配class="item1"的其父元素下的同類型的第一個元素,class="ct"下有兩種類型元素p元素和h3元素诉位,分別取第一個元素骑脱,所以aa和bb的背景色為藍色。