close

css-banner.jpg

根據上下文選擇元素

我們可以定義後代選擇器來創建一些規則,使這些規則在某些文檔結構中起作用,而在另外一些結構中不起作用。

舉例來說,如果您希望只對h1 元素中的em 元素應用樣式,可以這樣寫:

h1 em {color:red;}
	

上面這個規則會把作為h1 元素後代的em 元素的文本變為紅色。其他em 文本(如段落或塊引用中的em)則不會被這個規則選中:

<h1>This is a <em>important</em> heading</h1>
<p>This is a <em>important</em> paragraph.</p>
	

當然,您也可以在h1 中找到的每個em 元素上放一個class 屬性,但是顯然,後代選擇器的效率更高。


語法解釋

在後代選擇器中,規則左邊的選擇器一端包括兩個或多個用空格分隔的選擇器。選擇器之間的空格是一種結合符(combinator)。每個空格結合符可以解釋為“... 在... 找到”、“... 作為... 的一部分”、“... 作為... 的後代”,但是要求必須從右向左讀選擇器。

因此,h1 em 選擇器可以解釋為“作為h1 元素後代的任何em 元素”。如果要從左向右讀選擇器,可以換成以下說法:“包含em 的所有h1 會把以下樣式應用到該em”。

具體應用

後代選擇器的功能極其強大。有了它,可以使HTML 中不可能實現的任務成為可能。

假設有一個文檔,其中有一個邊欄,還有一個主區。邊欄的背景為藍色,主區的背景為白色,這兩個區都包含鏈接列表。不能把所有鏈接都設置為藍色,因為這樣一來邊欄中的藍色鏈接都無法看到。

解決方法是使用後代選擇器。在這種情況下,可以為包含邊欄的div 指定值為sidebar 的class 屬性,並把主區的class 屬性值設置為maincontent。然後編寫以下樣式:

div.sidebar {background:blue;}
div.maincontent {background:white;}
div.sidebar a:link {color:white;}
div.maincontent a:link {color:blue;}
	

有關後代選擇器有一個易被忽視的方面,即兩個元素之間的層次間隔可以是無限的。

例如,如果寫作ul em,這個語法就會選擇從ul 元素繼承的所有em 元素,而不論em 的嵌套層次多深。

因此,ul em 將會選擇以下標記中的所有em 元素:

<ul>
  <li>List item 1
    <ol>
      <li>List item 1-1</li>
      <li>List item 1-2</li>
      <li>List item 1-3
        <ol>
          <li>List item 1-3-1</li>
          <li>List item <span class="marked"><em>1-3-2</em></span> </li>
          <li>List item 1-3-3</li>
        </ol>
      </li>
      <li>List item 1-4</li>
    </ol>
  </li>
  <li>List item 2</li>
  <li>List item 3</li>
</ul>
	
arrow
arrow
    創作者介紹
    創作者 設計密碼工作室 的頭像
    設計密碼工作室

    Design Code 設計密碼

    設計密碼工作室 發表在 痞客邦 留言(0) 人氣()