class 和 id 的使用場(chǎng)景?
class:類選擇器,指定標(biāo)簽的類名雹熬】聿耍可以用到不同的標(biāo)簽上。
id:id選擇器橄唬,指定標(biāo)簽的id赋焕,定位到頁(yè)面的唯一元素。
CSS選擇器常見的有幾種?
CSS常見的選擇器共有5種仰楚,分別為:基礎(chǔ)選擇器隆判、組合選擇器、屬性選擇器僧界、偽類選擇器侨嘀、偽元素選擇器。
基礎(chǔ)選擇器
選擇器 | 含義 |
---|---|
* | 通用元素選擇器捂襟,匹配頁(yè)面任何元素(這也就決定了我們很少使用) |
#id | id選擇器 |
.class | 類選擇器 |
element | 標(biāo)簽選擇器 |
組合選擇器
選擇器 | 含義 |
---|---|
E,F | 并列選擇器咬腕,用, 分隔,同時(shí)匹配元素E或元素F |
E F | 后代選擇器葬荷,用空格 分隔涨共,匹配E元素所有的后代元素F |
E>F | 子元素選擇器,用> 分隔宠漩,只匹配E元素第一層級(jí)子元素 |
E+F | 直接相鄰選擇器举反,只匹配E元素之后的第一個(gè)相鄰的同級(jí)元素F |
E~F | 普通相鄰選擇器,匹配E元素之后的所有同級(jí)元素F |
.class1.class2 | 中間沒有分隔符扒吁,同時(shí)具有.class1和.class2選擇器 |
屬性選擇器
選擇器 | 含義 |
---|---|
E[attr] | 匹配所有具有屬性attr的元素火鼻,div[id]就能取到所有有id屬性的div |
E[attr = value] | 匹配屬性attr值為value的元素,div[id=test],匹配id=test的div |
E[attr ~= value] | 匹配所有屬性attr具有多個(gè)空格分隔雕崩、其中一個(gè)值等于value的元素 |
E[attr ^= value] | 匹配屬性attr的值以value開頭的元素 |
E[attr $= value] | 匹配屬性attr的值以value結(jié)尾的元素 |
E[attr *= value] | 匹配屬性attr的值包含value的元素 |
偽類選擇器
CSS偽類是加在選擇器后面的用來(lái)指定元素狀態(tài)的關(guān)鍵字魁索。
選擇器 | 含義 |
---|---|
E:link | 匹配所有未被點(diǎn)擊的鏈接 |
E:visited | 匹配所有已被點(diǎn)擊的鏈接 |
E:hover | 匹配鼠標(biāo)懸停其上的E元素 |
E:active | 匹配鼠標(biāo)已經(jīng)其上按下、還沒有釋放的E元素 |
E:enabled | 匹配表單中可用的元素 |
E:disabled | 匹配表單中禁用的元素 |
E:checked | 匹配表單中被選中的radio或checkbox元素 |
E::selection | 匹配用戶當(dāng)前選中的元素 |
E:focus | 匹配獲得當(dāng)前焦點(diǎn)的E元素 |
E:lang(c) | 匹配lang屬性等于c的E元素 |
E:first-child | 匹配其父元素的第1個(gè)子元素 |
E:nth-child(n) | 匹配其父元素的第n個(gè)子元素盼铁,第一個(gè)編號(hào)為1 |
E:first-of-type | 匹配父元素下?lián)碛性撨x擇器的同種類型的第一個(gè)子元素粗蔚,等同于:nth-of-type(1) |
偽元素選擇器
選擇器 | 含義 |
---|---|
E::first-line | 匹配E元素內(nèi)容的第一行 |
E::first-letter | 匹配E元素內(nèi)容的第一個(gè)字母 |
E::before | 在E元素之前插入生成的內(nèi)容 |
E::after | 在E元素之后插入生成的內(nèi)容 |
選擇器的優(yōu)先級(jí)是怎樣的?對(duì)于復(fù)雜場(chǎng)景如何計(jì)算優(yōu)先級(jí)?
CSS優(yōu)先級(jí)從高到低分別是:
1饶火、在屬性后面使用!important
會(huì)覆蓋頁(yè)面內(nèi)任何位置定義的元素樣式
2支鸡、作為style屬性寫在元素標(biāo)簽上的內(nèi)聯(lián)樣式
3冬念、id選擇器
4趁窃、class類選擇器
5牧挣、偽類選擇器
6、屬性選擇器
7醒陆、標(biāo)簽選擇器
8瀑构、通配符選擇器
9、瀏覽器自定義
復(fù)雜場(chǎng)景:
**計(jì)算方法:
a=行內(nèi)樣式 <div style="xxx"></div>
b=ID選擇器
c=類刨摩,偽類和屬性選擇器
d=標(biāo)簽選擇器寺晌、偽元素選擇器
**
舉個(gè)例子:
* {} /* a=0 b=0 c=0 d=1 -> 0,0,0,1 */
p {} /* a=0 b=0 c=0 d=1 -> 0,0,0,1 */
a:hover {} /* a=0 b=0 c=1 d=1 -> 0,0,1,1 */
ul li {} /* a=0 b=0 c=0 d=2 -> 0,0,0,2 */
ul ol+li {} /* a=0 b=0 c=0 d=3 -> 0,0,0,3 */
h1+input[type=hidden]{} /* a=0 b=0 c=1 d=2 -> 0,0,1,2 */
ul ol li.active {} /* a=0 b=0 c=1 d=3 -> 0,0,1,3 */
#ct .box p {} /* a=0 b=1 c=1 d=1 -> 0,1,1,1 */
div#header:after {} /* a=0 b=1 c=0 d=2 -> 0,1,0,2 */
style="" /* a=1 b=0 c=0 d=0 -> 1,0,0,0 */
依照a、b澡刹、c呻征、d 權(quán)重依次遞減,每次比較先由a開始。
a:link, a:hover, a:active, a:visited 的順序是怎樣的罢浇? 為什么陆赋?
順序:
a:link
a:visited
a:hover
a:active
原因:
一、 當(dāng)選擇器優(yōu)先級(jí)別相同時(shí)嚷闭,后定義的會(huì)覆蓋先定義的
二攒岛、
- 鼠標(biāo)經(jīng)過(guò)的“未訪問(wèn)鏈接”同時(shí)激活a:link、a:hover兩種屬性胞锰,如果a:link放在后面灾锯,在鏈接未被訪問(wèn)的狀態(tài),a:hover就被a:link覆蓋嗅榕,只會(huì)顯示a:link的屬性顺饮;
- 鼠標(biāo)經(jīng)過(guò)的“已訪問(wèn)鏈接”同時(shí)激活a:visited、a:hover兩種屬性凌那,如果a:visited放在后面兼雄,那么在鏈接被訪問(wèn)狀態(tài),只會(huì)顯示a:visited的屬性案怯;
- 當(dāng)鼠標(biāo)點(diǎn)擊鏈接是同時(shí)擁有a:active和a:hover兩種屬性君旦,若a:hover放后面會(huì)覆蓋a:active的屬性定義
故hover在link和visited后面,active放在hover后面嘲碱,按照一般性原則金砍,link最好放最前面。
以下選擇器表示的含義
#header{ /* id為header的元素 */
}
.header{ /* class為header的元素 */
}
.header .logo{ /* class為header的元素包裹的class為logo的元素 */
}
.header.mobile{ /* class為header和mobile的元素 */
}
.header p, .header h3{ /* class為header元素包裹的p元素和h3元素 */
}
#header .nav>li{ /* id為header的元素包裹的中class為nav的子元素li */
}
#header a:hover{ /* id為header的元素包裹的處于hover狀態(tài)的a元素 */
}
#header .logo~p{ /* id為header的元素包裹的class為logo的元素后面的同級(jí)元素p */
}
#header input[type="text"]{ /* id為header的元素包裹的type=text的input元素 */
}
列出知道的偽類選擇器
見標(biāo)題2下的回答
div:first-child麦锯、div:first-of-type恕稠、div :first-child和div :first-of-type的作用和區(qū)別
-
div:first-child
div父元素下,也就是與div同級(jí)的元素中的第一個(gè)元素扶欣,且這個(gè)元素為div -
div:first-of-type
div父元素下的第一個(gè)使用div的標(biāo)簽 -
div :first-child
div元素下的第一個(gè)子元素 -
div :first-of-type
div元素下所有的同類型的第一個(gè)元素
div:first-child 運(yùn)行代碼如下:
故
div:first-child
是同級(jí)元素中的第一個(gè)元素鹅巍,位置上第一千扶,且這個(gè)元素具有相同類型的div。
div:first-of-type 運(yùn)行代碼如下:
故
div:first-of-type
是其同級(jí)元素中骆捧,不同標(biāo)簽位置第一的元素澎羞,且具有同種類型的div。
div :first-child 運(yùn)行代碼如下:
故
div :first-child
只要是div下位置位于第一的元素即可敛苇,不必具有同種類型的div妆绞。
div :first-of-type 運(yùn)行代碼如下:
故
div :first-of-type
只要是div下不同標(biāo)簽位置位于第一的元素即可,不必具有同種類型的div。
運(yùn)行如下代碼枫攀,解析下輸出樣式的原因
運(yùn)行結(jié)果:
- class為item1父元素就是class為ct的div括饶,然后找到的第一個(gè)子元素,匹配是否有item1来涨,匹配成功图焰,故aa顏色設(shè)置為red;
- class為item1父元素就是class為ct的div蹦掐,然后在該div下技羔,尋找各類標(biāo)簽的第一個(gè)元素,匹配是否為item1笤闯。發(fā)現(xiàn)第一個(gè)p標(biāo)簽,h3第一個(gè)標(biāo)簽滿足條件堕阔,所以aa,bb的背景色變藍(lán)。