CSS基礎(part4)--CSS的層疊性繼承性優先級

學習筆記,僅供參考,有錯必糾

參考自:CSS中文文檔



CSS


CSS層疊性


所謂層疊性是指多種CSS樣式疊加的處理方案。

  • 舉個例子
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">

	<title>層疊性</title>
	<style>
		.box {
			background-color: red;
			color: yellow;
			height: 200px;
			width: 200px;
		}

		.wrap {
			background-color: green;
		}
	</style>
</head>
<body>
	<div class="box wrap">
		俺是div標籤
	</div>
</body>
</html>

頁面:


CSS繼承性


所謂繼承性是指書寫CSS樣式表時,子標記會繼承父標記的某些樣式,如文本顏色和字號。

  • 圖示


  • 舉個例子
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>繼承性</title>
	<style>
		.box {
			color: red;
		}
	</style>
</head>
<body>
	
	<div class="box">
		我是div
		<p>
			我是段落
		</p>
	</div>
</body>
</html>

頁面:


  • 舉個例子2
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>繼承性</title>
	<style>
		.box {
			color: red;
		}
		body {
			font-size: 30px;
		}
	</style>
</head>
<body>
	
	<div class="box">
		我是div
		<p>
			我是段落
		</p>
	</div>
</body>
</html>

頁面:


  • 注意事項

恰當地使用繼承可以簡化代碼,降低CSS樣式的複雜性。但是,如果在網頁中所有的元素都大量繼承樣式,那麼判斷樣式的來源就會很困難,所以,如字體、字號、顏色、行距等樣式,我們可以在body標籤中統一設置,然後通過繼承影響文檔中所有文本。

所有與文字相關的都可以繼承,比如:color、text-系列、font-系列、line-系列、cursor等;

並不是所有的CSS屬性都可以繼承,例如,下面的屬性就不具有繼承性:邊框、外邊距、內邊距、背景、定位、元素寬高屬性。


CSS的優先級(特殊性)


內聯樣式優先級最高;
ID選擇器的優先級,僅次於內聯樣式;
類選擇器優先級低於ID選擇器;
標籤選擇器低於類選擇器。


  • 優先級圖示


  • 舉個例子1
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS特殊性</title>
	<style>

		#txt-wrap {
			background-color: red;
		}

		.box  {
			color: red;
			background-color: yellow;
		}	

		/*層疊性是指: 在樣式的優先級相同的情況下才會考慮的*/
	</style>

</head>
<body>
	
	<div class="box" id="txt-wrap" style="color: blue;">
		我是div的文字
	</div>
</body>
</html>

頁面:


  • 舉個例子2
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS選擇器案例</title>
	<style>
		body {
			color: red;   /*繼承的樣式  >  瀏覽器默認的樣式 */
		}

		* {
			color: blue;   /*通配符選擇器的樣式 >  繼承的樣式*/
		}

		h1 {
			color: green; /*標籤選擇器的樣式  >  通配符選擇器的樣式*/
		}

		.title-demo {
			color: purple;  /*類選擇器的樣式  > 標籤選擇器的樣式的優先級*/
		}

		#id-title {
			color: yellow;   /*id選擇器的優先級  >  類選擇器的樣式*/
		}
		

	</style>
</head>
<body>
	<div class="wrap">
		<div class="aside">
			<div class="aside-dt" id="title-txt">
				<h1 class="title-demo" id="id-title" style="color: pink;">我是一個標題</h1>	
			</div>
			<div class="aside-dd">
				<p>我是一個段落</p>
			</div>
		</div>
	</div>
</body>
</html>

頁面:


  • 結論
    • 繼承的樣式的優先級 > 瀏覽器默認樣式的優先級
    • 通配符選擇器樣式的優先級 > 繼承的樣式的優先級
    • 標籤選擇器的樣式的優先級 > 通配符選擇器的樣式的優先級
    • 類選擇器的樣式的優先級 > 標籤選擇器的樣式的優先級
    • id選擇器的優先級 > 類選擇器的樣式的優先級
    • 行內樣式的優先級 > id選擇器的優先級

複合選擇器的優先級


定義CSS樣式時,經常出現兩個或更多規則應用在同一元素上,這時就會出現優先級的問題。

現在我有3個複合選擇器,它們分別是:

選擇器A:ID選擇器 類選擇器 ID選擇器
選擇器B:類選擇器 類選擇器 標籤選擇器
選擇器C:標籤選擇器 標籤選擇器 類選擇器 類選擇器

請問它們的如何排它們的優先級?

我們都知道:

ID選擇器優先級 > 類選擇器優先級  > 標籤選擇器優先級 

這裏,我們將這3個複合選擇器中各個選擇器的數量分別計算出來,並繪製成表格,進行優先級比較:

複合選擇器名 ID選擇器 類選擇器 標籤選擇器
選擇器A 2 1 0
選擇器B 0 2 1
選擇器C 0 2 2

可以看到,選擇器A的ID選擇器數量爲2,在3個選擇器中數量最多,所以它的優先級最高;在剩下的兩個選擇器中,選擇器B和選擇器C的類選擇器數量都一樣多,所以我們再對他們的標籤選擇器數量進行比較;我們發現,選擇器C的標籤選擇器數量大於選擇器選擇器B,所以選擇器C的優先級大於選擇器B的優先級。

也就是說,優先級先後順序爲:

選擇器A > 選擇器C > 選擇器B

  • 舉個例子
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS選擇器案例</title>
	<style>
		.aside .aside-dt h1 {
			background-color: silver;
		}

		.aside #title-txt #id-title {
			background-color: yellow;
		}
		

	</style>
</head>
<body>
	<div class="wrap">
		<div class="aside">
			<div class="aside-dt" id="title-txt">
				<h1 class="title-demo" id="id-title" style="color: pink;">我是一個標題</h1>	
			</div>
			<div class="aside-dd">
				<p>我是一個段落</p>
			</div>
		</div>
	</div>
</body>
</html>

頁面:


關於優先級權重的注意事項

繼承樣式的權重爲0,即在嵌套結構中,不管父元素樣式的權重多大,當被子元素繼承時,他的權重都爲0,也就是說子元素定義的樣式會覆蓋繼承來的樣式,如:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS選擇器案例</title>
	<style>
		.aside .aside-dt h1 {
			background-color: silver;
		}

		.aside #title-txt {
			/* 
			雖然.aside .aside-dt h1選擇器的優先級低於.aside #title-txt選擇器的優先級,
			但是div標籤爲h1標籤的父標籤,h1標籤的樣式會覆蓋掉div標籤的樣式
			所以在這裏複合選擇器的優先級沒有起到作用
			 */
			background-color: yellow;
		}
		

	</style>
</head>
<body>
	<div class="wrap">
		<div class="aside">
			<div class="aside-dt" id="title-txt">
				<h1 class="title-demo" id="id-title" style="color: pink;">我是一個標題</h1>	
			</div>
			<div class="aside-dd">
				<p>我是一個段落</p>
			</div>
		</div>
	</div>
</body>
</html>

頁面:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章