CSS那些事兒-閱讀隨筆2(選擇符的組合與優先順序/權重),css隨筆

來源:互聯網
上載者:User

CSS那些事兒-閱讀隨筆2(選擇符的組合與優先順序/權重),css隨筆

在知道了CSS選擇符最基礎的知識後,就要綜合利用它們了。這裡就記錄幾種常見的用法。

1.針對性的使用類選擇符或者ID選擇符

  類選擇符在一個頁面中可能會在不同的地方應用,那麼就需要有針對性地使用類選擇符。如下例:

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>css-test</title> 6 <style> 7 .myContent{ 8 font-size: 12px; 9 color: #00f;10 }11 p.myContent{12 font-size: 25px;13 line-height: 5px;14 text-decoration:underline;15 font-weight:bold;16 color: #f00;17 }18 </style>19 </head>20 <body>21 <div class="myContent">css很強大,可以控制頁面任何元素的樣式</div>22 <p class="myContent">1與世界同步,做一個成功的頁面仔</p>23 <span class="myContent">2讓我們看看css多麼奇妙吧</span>24 </body>25 </html>View Code

  該例子在style中定義了一個.myContent的css類和組合選擇符 p.myContent(注意p和.myContent沒有空格),且頁面中的div、p和span元素也都引用了myContent類,但是由於存在p.myContent,所以div和span的文字會是藍色,而p中的文字會是紅色,如下圖所示:

在此種應用下,ID選擇符和類選擇符相似,只需將.換成#即可(p#myId),如下例

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>css-test</title> 6 <style> 7 .myContent{ 8 font-size: 12px; 9 color: #00f;10 }11 p#myId{12 font-size: 25px;13 line-height: 5px;14 text-decoration:underline;15 font-weight:bold;16 color: #f00;17 }18 </style>19 </head>20 <body>21 <!--<p>css很強大,<span>可以控制頁面<strong>任何元素</strong>的樣式</span><strong>dfd</strong></p>-->22 <div class="myContent">css很強大,可以控制頁面任何元素的樣式</div>23 <p id="myId">1與世界同步,做一個成功的頁面仔</p>24 <span class="myContent">2讓我們看看css多麼奇妙吧</span>25 </body>26 </html>View Code

運行結果和一樣。

2.選擇符群組

即將多個相同定義的選擇符合并,如下例中將p,類選擇符.myContent以及id選擇符#myId共同定義成紅色、加粗、帶底線、字型大小為25px的文字 p,.myContent,#myId {property:value;},注意它們之間使用逗號隔開的。

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>css-test</title> 6 <style> 7 p,.myContent,#myId{ 8 font-size: 25px; 9 text-decoration:underline;10 font-weight:bold;11 color: #f00;12 }13 </style>14 </head>15 <body>16 <!--<p>css很強大,<span>可以控制頁面<strong>任何元素</strong>的樣式</span><strong>dfd</strong></p>-->17 <div class="myContent">css很強大,可以控制頁面任何元素的樣式</div>18 <p>1與世界同步,做一個成功的頁面仔</p>19 <span id="myId">2讓我們看看css多麼奇妙吧</span>20 </body>21 </html>View Code

運行結果如

3.CSS的優先順序

    多重樣式(Multiple Styles):如果外部樣式、內部樣式和內聯樣式同時應用於同一個元素,就是使多重樣式的情況。一般情況下,此時的優先順序如下:

標有!important樣式>內嵌樣式 (HTML元素中的style)> 內部樣式表 (head中的style)> 外聯樣式表(head中外部引入的)>瀏覽器預設樣式

例如:

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>css-test</title> 6 <style> 7 p,.myContent,#myId{ 8 font-size: 25px; 9 text-decoration:underline;10 font-weight:bold;11 color: #f00;12 }13 </style>14 </head>15 <body>16 <div class="myContent">css很強大,可以控制頁面任何元素的樣式</div>17 <p style="color: blue">1與世界同步,做一個成功的頁面仔</p>18 <span id="myId">2讓我們看看css多麼奇妙吧</span>19 </body>20 </html>View Code

雖然在head的style中設定了p標籤內的文字樣式顏色為紅色,但是在HTML的p元素中又通過style屬性對其顏色進行了設定(藍色)。因為內嵌樣式優先順序高於內部樣式表,所以p標籤中的文字最終表現為藍色,如所示。

4.CSS的權重

  為了在多個樣式修飾同一元素時,更準確的判斷到底利用哪個CSS,可以使用權重加權的方法,即為每類選擇符賦予權重,然後計算出現的選擇符組合的加權權重,最終得出的積分最高的就為最終的樣式。

  • 標籤選擇符、偽類與偽對象:權重為1。
  • 類選擇符、屬性選擇符:權重為10。
  • ID選擇符:權重為100。
  • 內聯style屬性:權重為1000。
  • !important:權重為無窮。

例子:

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>css-test</title> 6 <style> 7 p { 8 color:blue; 9 }10 /*p * {color: red;}*/11 p.myColor{12 color: black;13 }14 .myColor{15 color: yellow;16 }17 #myId{18 color: green;19 }20 </style>21 </head>22 <body>23 <p>Hello</p>24 <p class="myColor">css很強大,可以控制頁面任何元素的樣式</p>25 <p class="myColor" id="myId">1與世界同步,做一p st頁面仔</p>26 <p style="color: red" class="myColor">2讓我們看看css多麼奇妙吧</p>27 </body>28 </html>View Code

分析:代碼中,各個選擇符的權重加權後所得的積分如下

p=1
p.myColor=1+10=11
.myColor=10
#myId=100
style="color: red"=1000

所以,“Hello”為藍色(p=1);“css很強大,可以控制頁面任何元素的樣式”為黑色(p.myColor=1+10=11);“1與世界同步,做一p st頁面仔”為綠色(#myId=100);“2讓我們看看css多麼奇妙吧”為紅色(style="color: red"=1000),如所示。

5.css引入順序的影響
在head中的style中定義樣式(.myColor1和.myColor2)的順序以及在HTML元素p中引用這些類時的順序會產生怎樣的影響呢?我們做個實驗。
a.首先在head的style中首定義.myColor1,再定義.myColor2;然後在p中分別引入兩個類,但順序不同<p class="myColor1 myColor2">css很強大,可以控制頁面任何元素的樣式</p><p class="myColor2 myColor1">1與世界同步,做一個頁面仔</p>,代碼如下:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>css-test</title> 6 <style> 7 .myColor1{ 8 color: red; 9 }10 .myColor2{11 color: blue;12 }13 </style>14 </head>15 <body>16 <p class="myColor1 myColor2">css很強大,可以控制頁面任何元素的樣式</p>17 <p class="myColor2 myColor1">1與世界同步,做一個頁面仔</p>18 <p>2讓我們看看css多麼奇妙吧</p>19 </body>20 </html>View Code

運行結果如:

 b.首先在head的style中首定義.myColor2,再定義.myColor1;然後在p中分別引入兩個類,但順序不同<p class="myColor1 myColor2">css很強大,可以控制頁面任何元素的樣式</p><p class="myColor2 myColor1">1與世界同步,做一個頁面仔</p>,代碼如下:

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>css-test</title> 6 <style> 7 .myColor2{ 8 color: blue; 9 }10 .myColor1{11 color: red;12 }13 </style>14 </head>15 <body>16 <!--<p>css很強大,<span>可以控制頁面<strong>任何元素</strong>的樣式</span><strong>dfd</strong></p>-->17 <p class="myColor1 myColor2">css很強大,可以控制頁面任何元素的樣式</p>18 <p class="myColor2 myColor1">1與世界同步,做一個頁面仔</p>19 <p>2讓我們看看css多麼奇妙吧</p>20 </body>21 </html>View Code

運行結果如:

  通過上述兩組實驗可以看出,css只與定義的順序有關係,而與在元素中引用的順序並沒有關係,並且後定義的樣式會覆蓋之前定義的樣式,其實這也是css為什麼叫做樣式層疊表。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.