1. 程式人生 > >css偽類與偽元素

css偽類與偽元素

在css1中就引入了偽類和偽元素的概念,偽類可以對一個元素的不同狀態或者型別進行區分,新增特殊效果。偽元素能為元素的組成部分,或是文字結點內容新增特殊效果。

偽類

我的導師曾說"認識事物可以採用分類法,簡單化事物採用分步法"。我們都知道偽類在css1中就存在了,是在HTML元素處於某種狀態時,為該元素新增css樣式。之後,css2,css3又新增和完善了好些偽類。

結構化偽類

結構化偽類常被用於選擇那些簡單選擇器無法訪問的元素,這種元素在結構上存在某種關係(如某個元素的第一個或最後一個或者倍數個),為選中的元素新增css樣式。

選擇符

描述

E:first-child

匹配父元素的第一個子元素E。

E:last-child

匹配父元素的最後一個子元素E。

E:only-child

匹配父元素僅有的一個子元素E。

E:only-of-type

匹配同類型中的唯一的一個同級兄弟元素E。

E:first-of-type

匹配同類型中的第一個同級兄弟元素E。

E:last-of-type

匹配同類型中的最後一個同級兄弟元素E。

E:nth-child(n)  

匹配父元素的第n個子元素E。

E:nth-last-child(n)  

匹配父元素的倒數第n個子元素E。


E:nth-last-type(n)  

匹配同類型中的第n個同級兄弟元素E。

E:nth-last-of-type(n) 

匹配同類型中的倒數第n個同級兄弟元素E。


UI元素狀態偽類

UI元素狀態偽類用於根據UI元素的狀態對他們進行選擇。

選擇符

描述

E:link

設定超連結a在未被訪問前的樣式。

E:visited

設定超連結a在其連結地址已被訪問過時的樣式。

E:hover

設定元素在其滑鼠懸停時的樣式。

E:active

設定元素在被使用者啟用(在滑鼠點選與釋放之間發生的事件)時的樣式。

E:checked

匹配使用者介面上處於選中狀態的元素E。(用於input type為radio與checkbox時)

E:enabled

匹配使用者介面上處於可用狀態的元素E。

E:disabled

匹配使用者介面上處於禁用狀態的元素E。


其他偽類

選擇符

描述

E:target

匹配相關URL指向的E元素。

E:empty

匹配沒有任何子元素(包括text節點)的元素E。

E:root

匹配E元素在文件的根元素。

E:not(s)

匹配不含有s選擇符的元素E。


偽元素

與偽類一樣,偽元素提供的也是文件樹中沒有具體指明的資訊,但不同的是偽類是作用在元素上,而偽元素作用的更深一層:在元素中的特定內容上。CSS3將偽元素前面的單個修改為雙冒號用以區別偽類,但以前的寫法仍然有效。

選擇符

描述

E::first-letter

設定物件內的第一個字元的樣式。

E::first-line

設定物件內的第一行的樣式。

E::before

設定在物件前(依據物件樹的邏輯結構)發生的內容。用來和content屬性一起使用

E::after

設定在物件後(依據物件樹的邏輯結構)發生的內容。用來和content屬性一起使用



區別

簡單的在這裡舉個偽類和偽元素區別的例子 偽類
<style type="text/css">
	div > p:nth-child(2){
		font-size: 20px;
		color: red;
		font-weight: bold;
	}
</style>
<body>
	<div>
		<p>這是第一個P標籤</p>
		<p>這是第二個P標籤</p>
		<p>這是第三個P標籤</p>
		<p>這是第四個P標籤</p>
	</div>
	
</body>
效果圖:
如果我們不使用偽類呢?想要給第二個P標籤新增樣式,就可以給第二個P標籤新增一個class樣式。例如:
<style type="text/css">
	.second{
		font-size: 20px;
		color: red;
		font-weight: bold;
	}
</style>
<body>
	<div>
		<p>這是第一個P標籤</p>
		<p class="second">這是第二個P標籤</p>
		<p>這是第三個P標籤</p>
		<p>這是第四個P標籤</p>
	</div>	
</body>


偽元素
<style type="text/css">
	.second{
		width: 180px;
	}
	.second::first-line{
		font-size: 20px;
		color: red;
		font-weight: bold;
	}
</style>
<body>
	<div>
		<p>這是第一個P標籤</p>
		<p class="second">
			這是第二個P標籤
			這是第二個P標籤
			這是第二個P標籤
			這是第二個P標籤
		</p>
		<p>這是第三個P標籤</p>
		<p>這是第四個P標籤</p>
	</div>	
</body>
效果圖: 我們可以看到第二個P標籤的第一行文字內容改變了樣式,如果不使用偽元素的話,可以將第一行文字巢狀在一個span標籤內,設定span的樣式達到效果。
<style type="text/css">
	.second{
		width: 180px;
	}
	.span{
		font-size: 20px;
		color: red;
		font-weight: bold;
	}
</style>
<body>
	<div>
		<p>這是第一個P標籤</p>
		<p class="second">
			<span class="span">這是第二個P標籤</span>
			這是第二個P標籤
			這是第二個P標籤
			這是第二個P標籤
		</p>
		<p>這是第三個P標籤</p>
		<p>這是第四個P標籤</p>
	</div>	
</body>
綜上所述我們可以看出:偽類的效果可以通過新增一個實際的類來達到,而偽元素的效果則需要新增一個實際的元素標籤才能達到,這也是他們一稱為偽類,一個稱為偽元素的原因。