1. 程式人生 > >CSS基礎學習十一:選擇器的優先順序

CSS基礎學習十一:選擇器的優先順序

        在CSS基礎學習的篇章中,從第四篇部落格開始說選擇器,到昨天基本已經說完了。今天我們總結一下,選擇器作

用:告知瀏覽器需要設定哪個dom元素的樣式。最後來說說選擇器一個重要的問題,選擇器的優先順序。判斷優先順序的

方法就是嘗試!!!

        一簡單選擇器的優先順序

       簡單的選擇器包括我們在第四篇,第五篇,第六篇部落格的元素選擇器(標籤選擇器),類選擇器和id選擇器。

       我們來試驗:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS選擇器優先順序</title>
<style type="text/css">
/*標籤選擇器的渲染紅色*/
div{ 
background-color:#FF0000;
width:900px;
height:400px; 
}
/*類選擇器的渲染藍色*/
.test{
 background-color:#0000FF;
 width:900px;
 height:300px; 
 }
 /*id選擇器的渲染紫色*/
#test{ 
background-color:#FF00FF;
width:900px;
height:200px;
 }
</style>
</head>

<body>
<div id="test" class="test"></div>
</body>
</html>
         執行的結果為:id選擇器的優先順序最高。


         註釋掉id選擇器後的結果為:類選擇器的優先順序居其次。


         因此這三個簡單選擇器的優先順序順序為:HTML標籤屬性>id選擇器>類選擇器>元素選擇器

        二同類型選擇器的優先順序

        同類型:指的是相同型別的選擇器,理論上優先順序是一樣的。比如:div和p。.btn和.button。#header和

#footer,它們的優先順序是相同的。但是當同類型的選擇器作用到相同的HTML標籤上的時候優先順序就不一樣了。

        我們繼續試驗:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS選擇器優先順序</title>
<style type="text/css">
/*test類選擇器的渲染淺綠色*/
.test{ 
background-color:#00FF00;
width:900px;
height:200px;
 }
 /*test1類選擇器的渲染淺藍色*/
.test1{ 
background-color:#00FFFF;
width:900px;
height:200px;
 }
</style>
</head>

<body>
<div class="test test1"></div>
</body>
</html>
        執行的結果為:


        我們嘗試的結果為:CSS規則寫在最後面的生效!!

        如果這還不能信服我們再來嘗試<div class="test1 test"></div>有什麼不一樣的效果?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS選擇器優先順序</title>
<style type="text/css">
/*test類選擇器的渲染淺綠色*/
.test{ 
background-color:#00FF00;
width:900px;
height:200px;
 }
 /*test1類選擇器的渲染淺藍色*/
.test1{ 
background-color:#00FFFF;
width:900px;
height:200px;
 }
</style>
</head>

<body>
<div class="test test1"></div>
<hr/>
<div class="test1 test"></div>
</body>
</html>
        執行的結果為:

       

        最終我們得出的結論依然是:同類型的選擇器,CSS規則寫在最後面的生效!

        三選擇器的優先順序

        CSS選擇器組合出很多複雜的選擇器規則,那麼我們就不能像簡單的選擇器那樣一個一個嘗試。下面我們介紹一

個很實用的判斷優先順序的方法。

       判斷優先順序:我們約定 id選擇器的權重為100,類選擇器權重為10,標籤選擇器權重為1。一個複雜的選擇器的權

重等於所有選擇器的權重之和。一般,選擇器越特殊,優先順序(權重)越高。

       我們先來看兩個複雜的選擇器規則:

       第一個選擇器的權重為:1+10+10+1=22

       div.test .item span{

       background-color:#00FF00;

       }

       第二個選擇器的權重為:100+1+1=102

       #test div span{

       background-color:#FF0000;

       } 

       從我們約定的規則來看,顯然是第二個生效!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS選擇器優先順序</title>
<style type="text/css">
/*第一個選擇器渲染的是綠色*/
div.test .item span{
background-color:#00FF00;
}
/*第一個選擇器渲染的是紅色*/
#test div span{
background-color:#FF0000;
} 
</style>
</head>


<body>
<div id="test" class="test">
         <div class="item">
                <span>12345</span>
         </div>
</div>
</body>
</html>
        執行的結果為與我們的理論是一致的!


        那麼我們可能會有一個疑問:同樣的權重,那個選擇器起作用呢?從一系列的理論和試驗我們可以得出這與同類

型選擇器的優先順序問題相似,我們還是能輕易的得出結論:同樣的權重要選擇順序最後的生效。

       四!important

       樣式最高優先順序:無視優先順序,在樣式的一條宣告的最後分號前加上,使該樣式起作用

       我們還是來嘗試:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>CSS選擇器優先順序</title>
<style type="text/css">
/*元素選擇器渲染的是藍色*/
div{
color:#0000FF;
}
/*類選擇器渲染的是紅色*/
.test{
color:#FF0000;
}
</style>
</head>


<body>
<div class="test">攻城課堂</div>
</body>
</html>
        首先執行的結果我們肯定知道是紅色,那麼我們在標籤選擇器後面!important,我們再來執行結果看看?
/*元素選擇器渲染的是紅色*/
div{
color:#0000FF!important;
}
        執行的結果為:


        關於選擇器的優先順序我也就瞭解了這些,CSS選擇器就告一段落了!!