CSS 2.1 快速導覽 - 階層

CSS 是階層樣式表 (cascading style sheet) ,所謂的階層 (cascading) 係指樣式 (style) 規則 (rule) 的優先權有不同的層次,包括來源、權重 (weight) 、順序 (order) 、規格 (specificity) 等等,結合繼承 (inheritance) 決定最終 HTML 元素的樣式。



因為同一層次上,某些情況容易造成歧異,例如
p:first-letter { 
    font-size: 2em;
    color: red !important;
}

p:first-letter {
    font-size: 3em !important;
    color: green;
}

p:first-letter {
    font-size: 4em;
    color: blue;
}

 
/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:demo46.css
    功能:示範 CSS 2.1 樣式表的使用 
    作者:張凱慶
    時間:西元 2011 年 7 月 */


此例有三個完全相同的選擇器 (selector) p:first-letter ,宣告區 (declaration block) 的性質 (property) 都是設定字型大小的 font-size 與文字顏色的 color ,只有設定的數值 (value) 是不同的。


雖然我們是在範例中寫了三個完全相同的選擇器,實際的網頁不見得作者 (author) 自己會去寫相同的選擇器,但是樣式表 (style sheet) 卻可能有三種來源,除了網頁作者之外,還有使用者 (user) 與使用者代理程式 (user agent) ,也就是瀏覽器 (broswer) 。


同一份 HTML 文件既然有不同來源的樣式表,就有可能同時存在相同的選擇器,因此有許多規則,也就是各種階層會聯合判斷 HTML 文件最終的外觀樣式。基本的流程如下
  1. 尋找樣式規則,並判斷選取項符合 HTML文件中可用的名稱,例如元素名稱、 class 或 id 屬性名稱
  2. 依來源排序,依以下順序排列優先性
    1. 使用者 !important 宣告
    2. 作者 !important 宣告
    3. 作者宣告
    4. 使用者宣告
    5. 使用者代理程式宣告
  3. 若有多組宣告適用同一元素,計算各自的規格值排列優先性
  4. 若以上無法排出優先性,就依出現的順序排列,最晚出現的優先


上例都屬於作者的宣告,其中有兩個 !important ,分別是第 3 行的
color: red !important;


以及第 7 行的
font-size: 3em !important;


因此 <p> 的第一個字母會是紅色、 3em ,不會是樣式表中最後出現的藍色與 4em 。


我們以下面的 HTML 文件載入實際看看結果
<html>
<head>
<title>網頁標題</title>
<link rel="stylesheet" type="text/css" 
      href="demo46.css">
</head>
<body>
<p>You ever have that feeling where you're not sure if 
you're awake or still dreaming?</p>
<p>A prison for your mind.</p>
<p>Free your mind.</p>
<p>Believe the unbelievable.</p>
<p>There is no spoon.</p>
<p>I can only show you the door, you have to walk 
through it.</p>
<p>Choice. The problem is choice.</p>
<p>Then tomorrow we may all be dead, but how would that 
be different from any other day?</p>
<p>I have dreamed a dream, but now that dream has gone 
from me.</p>
<p>Choice is an illusion, created between those with 
power, and those without.</p>
<p>Because I choose to.</p>
<p>Everything that has a beginning has an end.</p>
</body>
</html>

<!-- 《程式語言教學誌》的範例程式
     http://pydoing.blogspot.com/
     檔名:demo45.html
     功能:示範 CSS 2.1 樣式表的使用 
     作者:張凱慶
     時間:西元 2011 年 7 月 -->


瀏覽器開啟如下



中英文術語對照
階層樣式表cascading style sheet
階層cascading
樣式style
規則rule
權重weight
順序order
規格specificity
繼承inheritance
選擇器selector
宣告區declaration block
性質property
數值value
作者author
樣式表style sheet
使用者user
使用者代理程式user agent
瀏覽器broswer


您可以繼續參考

基本概念
單位
選取器
@import 規則
階層
元素呈現方式 display


相關目錄
CSS 2.1 快速導覽
HTML, CSS 教材
首頁


參考資料

http://www.w3.org/TR/CSS21/cascade.html
https://developer.mozilla.org/en/CSS/Getting_Started/Cascading_and_inheritance

沒有留言: