1. 程式人生 > >CSS3學習筆記 之 動態偽類選擇器

CSS3學習筆記 之 動態偽類選擇器

  動態偽類選擇器為偽類選擇器的一種,其語法如下:

E: pseudo-class {property:value} 
其中E為HTML中的元素,pseudo-class是CSS的偽類選擇器名稱,property是CSS的屬性, value為CSS屬性值。

動態偽類並不存在於HTML中,只有當用戶和網站互動的時候才能體現出來。動態偽類包含兩種,第一種是在連結中常看到的錨點偽類,另一種為使用者行為偽類。

其支援的詳細語法如下:

選擇器 型別 功能描述
E:link 連結偽類選擇器 選擇匹配的E元素,而且匹配元素被定義了超連結並未被訪問過。常用於連結錨點上
E:visited 連結偽類選擇器 選擇匹配的E元素,而且匹配元素被定義了超連結並已被訪問過。常用於連結錨點上
E:hover 使用者行為偽類選擇器 選擇匹配的E元素,而且匹配元素被啟用。常用於錨點與按鈕上。
E:avtive 使用者行為偽類選擇器 選擇匹配的E元素,且使用者滑鼠停留在元素E上。IE6及以下瀏覽器僅支援a:hover
E:focus 使用者行為為類選擇器 選擇匹配的E元素,而且匹配的元素獲得焦點

除了E:active和E:focus需要IE8和以上版本支援外,其他的動態偽類選擇器所有瀏覽器都支援。

用如下程式碼測試動態偽類選擇器,實現按鈕在被選中和點選時候的效果:

<!DOCTYPE HTML>
<HTML lang="en-US">
	<HEAD>
		<META charset="UTF-8">
		<TITLE>使用動態偽類選擇器美化按鈕</TITLE>
		<STYLE type="text/css">
			.download-info {
				text-align: center;
			}
			/*預設狀態下的按鈕效果*/
			.btn {
				background-color: #0074cc;
				*background-color: #0055cc;
				/*CSS漸變製作背景圖片*/
				background-image: -ms-linear-gradient(top, #0088cc, #0055cc);
				background-image: -webkit-gradient(linear, 0, 0, 0 100%, from(#0088cc), to(#0055cc));
				background-image: -webkit-linear-gradient(top, #0088cc, #0055cc);
				background-image: -o-linear-gradient(top, #0088cc, #0055cc);
				background-image: -moz-linear-gradient(top, #0088cc, #0055cc);
				background-image: linear-gradient(top, #0088cc, #0055cc);
				background-repeat: repeat-x;
				display: inline-block;
				*display: inline;
				border: 1px solid #cccccc;
				*border: 0;
				border-color: #ccc;
				/*CSS3的色彩模組*/
				border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
				border-radius: 6px;
				color: #ffffff;
				cursor: pointer;
				font-size: 20px;
				font-weight: normal;
				filter: progid:dximagetransform.microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);
				filter: progid:dximagetransform.microsoft.gradient(enabled=false);
				line-height: normal;
				padding: 14px, 24px;
				/*CSS3文字陰影特性*/
				text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
				text-decoration: none;
				vertical-align: middle;
				*zoom: 1;

			}

			/*懸浮狀態下按鈕效果*/
			.btn:hover {
				background-position: 0 -15px;
				background-color: #0055cc;
				*background-color: #004ab3;
				color: #ffffff;
				text-shadow: 0, -1px 0 rgba(0, 0, 0, 0.25);
				/*CSS3動畫效果*/
				-webkit-transition: background-position 0.1s linear;
				-moz-transition: background-position 0.1s lineaar;
				-ms-transition: background-position 0.1s linear;
				-0-transition: background-position 0.1s linear;
				transition: background-position 0.1s linear;
			}

			/*點選時按鈕效果*/
			.btn:active {
				background-color: #0055cc;
				*background-color: #004ab3;
				background-color: #004099 \9;
				background-image: none;
				outline: 0;
				/*CSS3盒子陰影特性*/
				box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.15);
				color: rgba(255, 255, 255, 0.75);
			}
				/*獲得焦點按鈕效果*/
			.btn: focus {
				outline: thin dotted #333;
				outline: 5px auto -webkit-focus-ring-color;
				outline-offset: -2px;
			}
			</STYLE>
	</HEAD>
	<BODY>
		<div class="download-info">
			<a hred="#" class="btn">View project on GitHub</a>
		</div>
	</BODY>
</HTML>

顯示效果如下(使用的是.btn預設樣式):

當游標放在按鈕上的時候的效果(使用的是.btn:hover時候的樣式):


當按鈕被點選時候的效果(使用的是.btn:active對應的樣式):


愛恨原則(LoVe/HAte):

錨點偽類的設定必須遵守一個“愛恨原則”LoVe/HAte, 也就是link-visited-hover-active.(L-V-H-A),另外在IE6, IE7, IE8中a:hover, a:active, a:visited並沒有按照規範描述的演算法來計算它們的針對性(specificity),

而是根據連結的實際狀態來決定使用哪個規則集裡面的宣告。詳情可參考這篇文章: 

參考資料: