本文首發(fā)于 邊玉杰的技術(shù)博客
轉(zhuǎn)載請(qǐng)注明出處
偽類
一個(gè) CSS 偽類是以一個(gè)冒號(hào)( : )作為前綴,被添加到一個(gè)選擇器末尾的關(guān)鍵字抡锈,可以讓指定的元素在特定的狀態(tài)呈現(xiàn)指定的樣式匿刮。例如 :hover狼牺,當(dāng)用戶懸停在指定元素時(shí)峰档,可以在這個(gè)狀態(tài)給指定元素添加相應(yīng)的樣式禁添,是在 DOM 樹無法描述的狀態(tài)下才能給元素添加樣式撮胧。
首先,下方的正方形都沒有背景色:
1上荡、:first-child
:first-child 表示在一組兄弟元素中的第一個(gè)元素
/* 所有正方形都沒有背景色趴樱,因?yàn)榇藭r(shí)選中的是 <p> 標(biāo)簽*/
<div class="list">
<p>.square 這是一個(gè)p標(biāo)簽</p>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:first-child{
background: orangered;
}
效果如下:
/* 第 1 個(gè)正方形有背景色,因?yàn)榇藭r(shí)選中的是第一個(gè) .square */
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:first-child{
background: orangered;
}
效果如下:
2酪捡、:first-of-type
:first-of-type 表示一組兄弟元素中指定類型的第一個(gè)元素
/* :first-of-type 選擇在父元素中第一個(gè)出現(xiàn)的 .square
而不管其在兄弟內(nèi)的位置如何叁征,第一個(gè)正方形有背景色 */
<div class="list">
<p>.square 這是一個(gè)p標(biāo)簽</p>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:first-of-type{
background: orangered;
}
效果如下:
3、:last-child
:last-child 表示在一組兄弟元素中的最后一個(gè)元素(類似 :first-child)
/* :last-child 此時(shí)選中的是最后一個(gè) .square
最后一個(gè)正方形有背景色 */
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:last-child{
background: orangered;
}
效果如下:
4逛薇、:last-of-type
:last-of-type 表示一組兄弟元素中指定類型的最后一個(gè)元素(類似 :first-of-type)
/* :last-of-type 選擇在父元素中最后一個(gè)出現(xiàn)的 .square
而不管其在兄弟內(nèi)的位置如何捺疼,最后一個(gè)正方形有背景色 */
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:last-of-type{
background: orangered;
}
效果如下:
5、:not
:not 一個(gè)否定偽類永罚,用于匹配不符合參數(shù)選擇器的元素
/* 不含有 .not 的正方形有背景色*/
<div class="list">
<div class="square not"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square not"></div>
</div>
.square:not(.not){
background: orangered;
}
效果如下:
6啤呼、:nth-child(an+b)
:nth-child 這個(gè) CSS 偽類首先會(huì)找到當(dāng)前元素的兄弟元素,然后按照位置的先后順序從1開始排序呢袱,選擇的結(jié)果為第(an+b)個(gè)元素的集合(n=0官扣,1,2羞福,3...)惕蹄。如果 an+b 為 0,無法選中任何元素
6-1治专、:nth-child(4) 匹配位置為 4 的元素
/*第 3 個(gè)正方形有背景色 因?yàn)榈?3 個(gè)正方形在所有兄弟元素中排第 4 */
<div class="list">
<p>.square 這是一個(gè)p標(biāo)簽</p>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:nth-child(4) {
background: orangered;
}
效果如下:
/*此時(shí)第 4 個(gè)正方形有背景色 */
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:nth-child(4) {
background: orangered;
}
效果如下:
6-2卖陵、:nth-child(2n) 匹配位置為2、 4张峰、6泪蔫、8... 的元素,可以使用 :nth-child(even) 代替
/*第 2喘批、 4撩荣、6铣揉、8 個(gè)正方形有背景色 */
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:nth-child(2n) {
background: orangered;
}
效果如下:
6-3、:nth-child(2n+1) 匹配位置為1婿滓、 3老速、5、7... 的元素凸主,可以使用 :nth-child(odd) 代替
/*第 1、 3额湘、5卿吐、7 個(gè)正方形有背景色 */
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:nth-child(2n+1) {
background: orangered;
}
效果如下:
6-4、:nth-child(3n) 匹配位置為 3锋华、6嗡官、9... 的元素
/*第 3、6 個(gè)正方形有背景色 */
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:nth-child(3n) {
background: orangered;
}
效果如下:
7毯焕、:nth-of-type(an+b)
:nth-of-type 與 nth-child 相似衍腥,不同之處在于它是只匹配特定類型的元素
<div class="list">
<p>.square 這是一個(gè)p標(biāo)簽</p>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
.square:nth-of-type(4) {
background: orangered;
}
效果如下:
8、:nth-last-child(an+b)
:nth-last-child 與 nth-child 相似纳猫,它是從最后一個(gè)子元素開始計(jì)數(shù)的
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<p>.square 這是一個(gè)p標(biāo)簽</p>
</div>
.square:nth-last-child(4) {
background: orangered;
}
效果如下:
9婆咸、:nth-last-of-type
:nth-last-of-type 與 nth-of-type 相似,不同之處在于它是從最后一個(gè)子元素開始計(jì)數(shù)的
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<p>.square 這是一個(gè)p標(biāo)簽</p>
</div>
.square:nth-last-of-type(4) {
background: orangered;
}
效果如下:
偽元素
偽元素的前綴是兩個(gè)冒號(hào) ( :: ) 芜辕, 同樣是添加到選擇器后面去選擇某個(gè)元素的某個(gè)部分尚骄。偽元素創(chuàng)建了不存在 DOM 樹中的元素,并為其添加樣式侵续。例如倔丈,::after 選擇元素后,在其內(nèi)容后使用 content 添加內(nèi)容状蜗。雖然可以看到添加的內(nèi)容需五,但是這些內(nèi)容實(shí)際上不存在 DOM 樹中
1、::after(:after)
使用 ::after 會(huì)創(chuàng)建一個(gè)偽元素轧坎,該偽元素會(huì)成為選中元素的最后一個(gè)子元素
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<p>.square 這是一個(gè)p標(biāo)簽</p>
</div>
p::after{
content: "??";
}
效果如下:
2宏邮、::before(:before)
使用 ::before 會(huì)創(chuàng)建一個(gè)偽元素,該偽元素會(huì)成為選中元素的第一個(gè)子元素
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<p>.square 這是一個(gè)p標(biāo)簽</p>
</div>
p::before{
content: "??";
}
效果如下:
3眶根、::first-letter(:first-letter)
::first-letter 選中某塊級(jí)元素第一行的第一個(gè)字母蜀铲,并且文字所處的行之前沒有其他內(nèi)容
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<p>.square 這是一個(gè)p標(biāo)簽</p>
</div>
p::first-letter{
color: red;
}
效果如下:
4、::first-line(:first-line)
::first-line 在某塊級(jí)元素的第一行應(yīng)用樣式属百。第一行的長(zhǎng)度取決于很多因素记劝,包括元素寬度,文檔寬度和文本的文字大小族扰。和其他所有的偽元素一樣厌丑,::first-line 不能匹配任何真實(shí)存在的 html 元素定欧。::first-line 偽元素只能在塊容器中,所以怒竿,::first-line 偽元素只能在一個(gè) display 值為 block,砍鸠,inline-block,table-cell 或者 table-caption 中有用
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<p>.square 這是一個(gè)p標(biāo)簽</p>
</div>
p::first-line{
color: red;
}
效果如下:
5耕驰、::selection
::selection 用于文檔中被用戶高亮的部分(比如使用鼠標(biāo)或其他選擇設(shè)備選中的部分)
<div class="list">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<p>.square 這是一個(gè)p標(biāo)簽</p>
</div>
p::selection{
background-color: #ffeb3b;
}
使用鼠標(biāo)選中亮字爷辱,效果圖: