CSS語法中通過依據元素在其位置的上下文關系來定義樣式,你可以使標記更加簡潔。
在CSS1中,通過這種方式來應用規則的選擇器被稱為上下文選擇器(contextual selectors),這是由于它們依賴于
上下文關系來應用或者避免某項規則。在CSS2中,它們稱為派生選擇器,但是無論你如何稱呼它們,它們的作用都
是相同的。派生選擇器允許你根據文檔的上下文關系來確定某個標簽的樣式。通過合理地使用派生選擇器,我們可以
使HTML代碼變得更加整潔。
舉一個例子來說,你希望列表中的 strong 元素變為斜體字,而不是通常的粗體字,可以這樣定義一個派生選擇
器:
~~~
<span style="font-size:18px;">li strong {
font-style: italic;
font-weight: normal;
}</span>
~~~
請注意標記為< strong>的代碼的上下文關系:
~~~
<span style="font-size:18px;"><p><strong>我是粗體字,不是斜體字,因為我不在列表當中,所以這個規則對我不起作用</strong></p>
<ol>
<li><strong>我是斜體字。這是因為 strong 元素位于 li 元素內。</strong></li>
<li>我是正常的字體。</li>
</ol></span>
~~~
在上面的例子中,只有 li 元素中的 strong 元素的樣式為斜體字,無需為 strong 元素定義特別的class或id,代碼更加簡潔。
我們可以看以運行的結果為:

接下來我們來看看常見的派生選擇器。
### 一,后代(包含)選擇器
后代選擇器又稱為包含選擇器。后代選擇器可以選擇作為某元素后代的元素。選擇某元素后代的元素,并設置一些樣式。
(1)根據上下文選擇元素
我們可以定義后代選擇器來創建一些規則,使這些規則在某些文檔結構中起作用,而在另外一些結構中不起作
用。上述的例子就是一個標準的后代選擇器的演示。
(2)語法解釋
在后代選擇器中,規則左邊的選擇器一端包括兩個或多個用空格分隔的選擇器。選擇器之間的空格是一種結合符。每個空格結合符可以解釋為“... 在 ... 找到”、“... 作為 ... 的一部分”、“... 作為...的后代”,但是要求必須從右向左讀選擇器。語法:選擇器 選擇器 [選擇器...] {}。有關后代選擇器有一個易被忽視的方面,即兩個元素之間的層次間隔可以是無限的。
比如:h1 span{ } ?span嵌套在h1中
~~~
<span style="font-size:18px;"><span style="font-size:18px;"><!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>無標題文檔</title>
<style type="text/css">
h1 span { color:red;}
</style>
</head>
<body>
<h1>12345<span>12345</span></h1>
<span>12345</span>
<h1>12345<div><p><span>12345</div></p></span></h1>
</body>
</html></span></span>
~~~
運行的結果為:

(3)也有些復雜的選擇器組合成的后代選擇器:?.test img{}和#header .btn{}等等。
### 二,子元素選擇器
與后代選擇器相比,子元素選擇器(Child selectors)只能選擇作為某元素子元素的元素。比后代選擇器更嚴格,選擇某元素子元素的元素,并設置一些樣式。
(1)選擇子元素
如果您不希望選擇任意的后代元素,而是希望縮小范圍,只選擇某個元素的子元素,請使用子元素選擇器。
例如,如果您希望選擇只作為 h1 元素子元素的 strong 元素,可以這樣寫:
~~~
<span style="font-size:18px;">h1 > strong {color:red;}</span>
~~~
這個規則會把第一個 h1 下面的 strong 元素變為紅色,但是第二個 strong 不受影響:
~~~
<span style="font-size:18px;"><h1>This is <strong>very</strong> important.</h1>
<h1>This is <em>really <strong>very</strong></em> important.</h1></span>
~~~
運行的結果為:

(2)語法解釋
您應該已經注意到了,子選擇器使用了大于號(子結合符)。子結合符兩邊可以有空白符,這是可選的。因此,以下寫法都沒有問題:
~~~
<span style="font-size:18px;">h1 > strong
h1> strong
h1 >strong
h1>strong</span>
~~~
如果從右向左讀,選擇器 h1 > strong 可以解釋為“選擇作為 h1 元素子元素的所有 strong 元素”。
(3)結合后代選擇器和子選擇器
請看下面這個選擇器:
~~~
<span style="font-size:18px;">table.company td > p {}</span>
~~~
下面的選擇器會選擇作為 td 元素子元素的所有 p 元素,這個 td 元素本身從 table 元素繼承,該 table 元素有一個
包含 company 的 class 屬性。
### 三,CSS 相鄰兄弟選擇器
相鄰兄弟選擇器可選擇緊接在另一元素后的元素,且二者有相同父元素。
(1)選擇相鄰兄弟
如果需要選擇緊接在另一個元素后的元素,而且二者有相同的父元素,可以使用相鄰兄弟選擇器。
例如,如果要增加緊接在 h1 元素后出現的段落的上邊距,可以這樣寫:
~~~
<span style="font-size:18px;">h1 + p { color:#FF0000;}</span>
~~~
這個選擇器讀作:“選擇緊接在 h1 元素后出現的段落,h1 和 p 元素擁有共同的父元素”。
~~~
<span style="font-size:18px;"><!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>無標題文檔</title>
<style type="text/css">
h1 + p { color:#FF0000;}
</style>
</head>
<body>
<h1>This is a heading.</h1>
<p>This is paragraph.</p>
<p>This is paragraph.</p>
<p>This is paragraph.</p>
<p>This is paragraph.</p>
<p>This is paragraph.</p>
</body>
</html></span>
~~~
運行的結果為:

(2)語法解釋
相鄰兄弟選擇器使用了加號(+),即相鄰兄弟結合符。注釋:與子結合符一樣,相鄰兄弟結合符旁邊可以有空白符。
請看下面這個文檔樹片段:
~~~
<span style="font-size:18px;"><div>
<ul>
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
</ul>
<ol>
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
</ol>
</div></span>
~~~
在上面的片段中,div 元素中包含兩個列表:一個無序列表,一個有序列表,每個列表都包含三個列表項。這兩
個列表是相鄰兄弟,列表項本身也是相鄰兄弟。不過,第一個列表中的列表項與第二個列表中的列表項不是相鄰兄
弟,因為這兩組列表項不屬于同一父元素(最多只能算堂兄弟)。
請記住,用一個結合符只能選擇兩個相鄰兄弟中的第二個元素。請看下面的選擇器:
~~~
<span style="font-size:18px;">li + li {font-weight:bold;}</span>
~~~
上面這個選擇器只會把列表中的第二個和第三個列表項變為粗體。第一個列表項不受影響。
運行的結果為:

(3)結合其他選擇器
相鄰兄弟結合符還可以結合其他結合符:
~~~
<span style="font-size:18px;">html > body table + ul {margin-top:20px;}</span>
~~~
這個選擇器解釋為:選擇緊接在 table 元素后出現的所有兄弟 ul 元素,該 table 元素包含在一個 body 元素中,
body 元素本身是 html 元素的子元素。
- 前言
- HTML學習1:Dreamweaver8的安裝
- HTML學習2:初識HTML
- HTML學習3:常用標簽之文本標簽
- HTML學習4:常用標簽之列表標簽
- HTML學習5:常用標簽之圖像標簽
- HTML學習6:常用標簽之超鏈接標簽
- HTML學習7:常用標簽之表格標簽
- HTML學習8:常用標簽之框架標簽
- HTML學習9:常用標簽之表單標簽
- HTML學習10:表單格式化
- HTML學習11:HTTP 方法
- HTML學習12:其他常見標簽之頭標簽
- HTML學習13:其他常見標簽之體標簽
- 輕松學習JavaScript一:為什么學習JavaScript
- 輕松學習JavaScript二:JavaScript語言的基本語法要求
- 輕松學習JavaScript三:JavaScript與HTML的結合
- 輕松學習JavaScript四:JS點擊燈泡來點亮或熄滅這盞燈的網頁特效映射出JS在HTML中作用
- 輕松學習JavaScript五:JavaScript的變量和數據類型
- 輕松學習JavaScript六:JavaScript的表達式與運算符
- 輕松學習JavaScript七:JavaScript的流程控制語句
- 輕松學習JavaScript八:JavaScript函數
- 輕松學習JavaScript九:JavaScript對象和數組
- 輕松學習JavaScript十:JavaScript的Date對象制作一個簡易鐘表
- 輕松學習JavaScript十一:JavaScript基本類型(包含類型轉換)和引用類型
- 輕松學習JavaScript十二:JavaScript基于面向對象之創建對象(一)
- 輕松學習JavaScript十二:JavaScript基于面向對象之創建對象(二)
- 輕松學習JavaScript十三:JavaScript基于面向對象之繼承(包含面向對象繼承機制)
- 輕松學習JavaScript十四:JavaScript的RegExp對象(正則表達式)
- 輕松學習JavaScript十五:JavaScript之BOM簡介
- 輕松學習JavaScript十六:JavaScript的BOM學習(一)
- 輕松學習JavaScript十七:JavaScript的BOM學習(二)
- 輕松學習JavaScript二十九:JavaScript中的this詳解
- CSS基礎學習一:CSS概述
- CSS基礎學習二:如何創建 CSS
- CSS基礎學習三:CSS語法
- CSS基礎學習四:元素選擇器
- CSS基礎學習五:類選擇器
- CSS基礎學習六:id選擇器
- CSS基礎學習七:屬性選擇器
- CSS基礎學習八:派生選擇器
- CSS基礎學習九:偽類
- CSS基礎學習十:偽元素
- CSS基礎學習十一:選擇器的優先級
- CSS基礎學習十二:CSS樣式
- CSS基礎學習十三:盒子模型
- CSS基礎學習十四:盒子模型補充之display屬性設置
- CSS基礎學習十五:盒子模型補充之外邊距合并
- CSS基礎學習十六:CSS盒子模型補充之border-radius屬性
- CSS基礎學習十七:CSS布局之定位
- CSS基礎學習十八:CSS布局之浮動
- CSS基礎學習十九:CSS布局之圖文混排,圖像簽名,多圖拼接和圖片特效
- DIV+CSS實操一:經管系網頁總體模塊布局
- DIV+CSS實操二:經管系網頁添加導航欄和友情鏈接欄
- DIV+CSS實操三:經管系網頁內容模塊添加標題欄和版權信息模塊
- DIV+CSS實操四:經管系網頁內容模塊內容添加(一)
- DIV+CSS實操五:經管系網頁內容模塊內容添加(二)
- DIV+CSS實操六:經管系網頁添加導航欄下拉菜單
- DIV+CSS實操七:中文系內容模塊控制文本不換行和超出指定寬度后用省略號代替
- JS中實現字符串和數組的相互轉化