css選擇器

css選擇器

要使用css對HTML頁面中的元素實現一對一,一對多或者多對一的控制,這就需要用到CSS選擇器。 HTML頁面中的元素就是通過CSS選擇器進行控制的。

簡介

什麼是選擇器呢?

每一條css樣式定義由兩部分組成,形式如下: [code] 選擇器{樣式} [/code] 在{}之前的部分就是“選擇器”。 “選擇器”指明了{}中的“樣式”的作用對象,也就是“樣式”作用於網頁中的哪些元素

1.1 類別選擇器

類選擇器根據類名來選擇

前面以”.”來標誌,如:

.demoDiv{

color:#FF0000;

}

在HTML中,元素可以定義一個class的屬性。

如:

<div class="demoDiv">

這個區域字型顏色為紅色

</div>

同時,我們可以再定義一個元素:

<p class="demoDiv">

這個段落字型顏色為紅色

</p>

最後,用瀏覽器瀏覽,我們可以發現所有class為demoDiv的元素都套用了這個樣式。包括了頁面中的div元素和p元素。

上例我們給兩個元素都定義了class,但如果有很多個元素都會套用這個元素,那得一個個的定義元素,就會造成頁面重複的代碼太多,這種現象稱為“多類症”。

我們可以改成這樣來定義。

<div class="demoDiv">

<div>

這個區域字型顏色為紅色

</div>

同時,我們可以再定義一個元素:

<p>

這個段落字型顏色為紅色

</p>

</div>

這樣,我們就只是定義了一個類,同時把樣式套用到了所有的元素當中。

1.2 標籤選擇器

一個完整的HTML頁面是有很多不同的標籤組成,而標籤選擇器,則是決定哪些標籤

採用相應的CSS樣式,(在大環境中你可能處於不同的位置,但是不管怎么樣,你總

是穿著同一套衣服,這件衣服就是由標籤選擇器事先給你限定好的,不管走到哪裡

都是這身衣服)比如,在style.css檔案中對p標籤樣式的聲明如下:

p{

font-size:12px;

background:#900;

color:090;

}

複製代碼則頁面中所有p標籤的背景都是#900(紅色),文字大小均是12px,顏色為#090(綠色)

,這在後期維護中,如果想改變整個網站中p標籤背景的顏色,只需要修改

background屬性就可以了,就這么容易!

1.3 ID選擇器

ID 選擇器可以為標有特定 ID 的 HTML 元素指定特定的樣式。 根據元素ID來選擇元素,具有唯一性,這意味著同一id在同一文檔頁面中只能出現一次,例如,你將一個元素的id取值為”navi”,那么在同一頁面你就不能再將其他元素id取名為”navi”了。儘管你會發現即便你把幾個元素都命名成相同的id名字,css選擇器還是會把這些元素都選中套用樣式(如class選擇器那樣),對於css選擇器,id屬性的唯一性似乎不存在。然而,對於js而言,它只會選擇具有相同id名字元素中的第一個。出於一個好的編程習慣,同一個id不要在頁面中出現第二次。

前面以”#”號來標誌,在樣式裡面可以這樣定義:

#demoDiv{

color:#FF0000;

}

這裡代表id為demoDiv的元素的設定它的字型顏色為紅色。

我們在頁面上定義一個元素把它的ID定義為demoDiv,如:

<div id="demoDiv">

這個區域字型顏色為紅色

</div>

用瀏覽器瀏覽,我們可以看到因為區域內的顏色變成了紅色

再定義一個區域

<div>

這個區域沒有定義顏色

</div>

用瀏覽器瀏覽,與預期的一樣,區域沒有套用樣式,所以區域中的字型顏色還是默認的顏色黑色。

1.4 後代選擇器

後代選擇器也稱為包含選擇器,用來選擇特定元素或元素組的後代,將對父元素的選擇放在前面,對子元素的選擇放在後面,中間加一個空格分開。後代選擇器中的元素不僅僅只能有兩個,對於多層祖先後代關係,可以有多個空格加以分開,如id為a、b、c的三個元素,則後代選擇器可以寫成#a #b #c{}的形式,只要對祖先元素的選擇在後代元素之前、中間以空格分開即可。

如:

<style>

.father.child{

color:#0000CC;

}

</style>

<p class="father">

黑色

<label class="child">藍色

<b>也是藍色</b>

</label>

</p>

這裡我們定義了所有class屬性為father的元素下面的class屬性為child的顏色為藍色。後代選擇器是一種很有用的選擇器,使用後代選擇器可以更加精確的定位元素。

1.5 子選擇器

請注意這個選擇器與後代選擇器的區別,子選擇器(child selector)僅是指它的直接後代,或者你可以理解為作用於子元素的第一個後代。而後代選擇器是作用於所有子後代元素。後代選擇器通過空格來進行選擇,而子選擇器是通過“>”進行選擇,我們看下面的代碼:

Example Source Code

CSS:

#links a {color:red;}

#links > a {color:blue;}

HTML:

<p id="links">

<a href="#">Div+CSS教程</a>>

<span><a href="#">CSS布局實例</a></span>

<span><a href="#">CSS2.0教程</a></span>

</p>

我們將會看到第一個連結元素“Div+CSS教程”會顯示成藍色,而其它兩個元素會顯示成紅色。當然,或許你的瀏覽器並不支持這樣的CSS選擇符。我們在一開始也強調了不太兼容的現狀。

子選擇器(>)和後代選擇器(空格)的區別:都表示“祖先-後代”的關係,但是>必須是“爸爸>兒子”,而空格不僅可以是“爸爸兒子”,還能是“爺爺兒”、“太爺爺兒子”。

1.6 偽類選擇器

有時候還會需要用文檔以外的其他條件來套用元素的樣式,比如滑鼠懸停等。這時候我們就需要用到偽類了。以下是連結套用的偽類定義。

a:link{

color:#999999;

}

a:visited{

color:#FFFF00;

}

a:hover{

color:#006600;

}

/* IE不支持,用Firefox瀏覽可以看到效果 */

input:focus{

background:# E0F1F5;

}

Link表示連結在沒有被點擊時的樣式。Visited表示連結已經被訪問時的樣式。Hover表示當滑鼠懸停在連結上面時的樣式。

偽類不僅可以套用在連結標籤中,也可以套用在一些表單元素中,但表單元素的套用IE不支持,所以一般偽類都只會被套用在連結的樣式上。

1.7 通用選擇器

通用選擇器用*來表示。例如:

*{

font-size: 12px;

}

表示所有的元素的字型大小都是12px;同時通用選擇器還可以和後代選擇器組合。

例如:

p *{

……

}

表示所有p元素後代的所有元素都套用這個樣式。但是與後代選擇器的搭配容易出現瀏覽器不能解析的情況,比如像這樣子:

<p>

所有的文本都被定義成紅色

<b>所有這個段落裡面的子標籤都會被定義成藍色</b>

<p>所有這個段落裡面的子標籤都會被定義成藍色</p>

<b>所有這個段落裡面的子標籤都會被定義成藍色</b>

<em>所有這個段落裡面的子標籤都會被定義成藍色</em>

</p>

這個例子裡面p標籤裡面嵌套了一個p標籤,這個時候樣式可能會出現與預期結果不相同的結果。

1.8 群組選擇器

當幾個元素樣式屬性一樣時,可以共同調用一個聲明,元素之間用逗號分隔。如:

p, td, li {

line-height:20px;

color:#c00;

}

#main p, #sider span {

color:#000;

line-height:26px;

}

.#main p span {

color:#f60;

}

.text1 h1,#sider h3,.art_title h2 {

font-weight:100;

}

使用群組選擇器,將會大大的簡化CSS代碼,將具有多個相同屬性的元素,合併群組進行選擇,定義同樣的CSS屬性,這大大的提高了編碼效率,同時也減少了CSS檔案的體積。

1.9 相鄰同胞選擇器

我們除了上面的子選擇器與後代選擇器,我們可能還希望找到兄弟兩個當中的一個,如一個標題h1元素後面緊跟了兩個段落p元素,我們想定位第一個段落p元素,對它套用樣式。我們就可以使用相鄰同胞選擇器。看下面的代碼:

Example Source Code CSS

h1 + p {color:blue}

HTML

<h1>一個非常專業的CSS站點</h1>

<p>Div+CSS教程中,介紹了很多關於CSS網頁布局的知識。</p>

<p>CSS布局實例中,有很多與CSS布局有關的案例。</p>

我們將會看到第一個段落“Div+CSS教程中,介紹了很多關於CSS網頁布局的知識。”文字顏色將會是藍色。而第二段則不受此CSS樣式的影響。

+和~的區別:類似上面一個,兩者都表示兄弟關係,但是+必須是“大哥+二哥”,~還能是“大哥~三弟”、“二哥~四妹”

1.10 屬性選擇器

您可以用判斷html標籤的某個屬性是否存在的方法來定義css

屬性選擇器,是根據元素的屬性來匹配的,其屬性可以是標準屬性也可以是自定義屬性;!ie6,0 0 1 0
當然,也可以同時匹配多個屬性;
[attr]
[title] {margin-left: 10px}
//選擇具有 title 屬性的所有元素;
[attr=val]
[title = 'this'] {margin-right: 10px}
//選擇屬性 title 的值等於 this 的所有元素
[attr^=val]
[title ^= 'this'] {margin-left: 15px}
//選擇屬性title的值以this開頭的所有元素
[attr$=val]
[title $= 'this'] {margin-right: 15px}
//選擇屬性title的值以this結尾的所有元素
[attr*=val]
[title *= 'this'] {margin: 10px}
//選擇屬性title 的值包含 this 的所有元素
[attr~=val]
[title ~= 'this'] {margin-top: 10px}
//選擇屬性 title 的值包含一個以空格分隔的詞為 this 的所有元素,即 title 的值里必須要有 this 這個單詞並且this要與其他單詞之間有空格分隔
[attr|=val]
[title |= 'this'] {margin-bottom: 10px}
//選擇屬性 title 的值等於this,或值以 this- 開頭的所有元素

1.11 偽元素選擇器

所有偽元素選擇器都必須放在出現該偽元素的選擇器的最後面,也就是說偽元素選擇器不能跟任何派生選擇器,如:p:first-letter em {} 這就是不合法的,ie6不支持

:first-letter,設定塊元素首字母樣式,行內元素轉換成塊元素和行內塊元素也支持;
div p:first-letter {font-size: 20px}
//選擇div元素里所有的p元素的第一個字母或漢字,如果把塊元素轉換成行內元素則就不支持了;
:first-line,設定第一個文本行樣式;
.box .main:first-line {color: #f00}
//只有部分屬性允許first-line:所有font屬性、color、所有background屬性、word-spacing、letter-spacing、text-decoration、vertical-align、text-transform、line-height
:before,設定之前的樣式,可以插入生成的內容,並設定其樣式;
body:before {content: 'The Start:'; display: block}
//在body元素前插入文本內容'The Start:',並設定其為塊元素
:after,設定之後的樣式,可以插入生成的內容,並設定其樣式;
body:after {content: 'The End.'; display: block}
//在body元素最後插入文本內容'The End.',並設定其為塊元素

1.12 結構性偽類選擇器

HTML CODE:
1.<div class="box">
2. <span>First span</span>
3. <p class="ft">First p</p>
4. <div>First div<strong class="ft">Strong text</strong></div>
5. <p class="ft">Second p</p>
6. <div class="ft">Second div <span>Second span</span><span>Third span</span></div>
7.</div>

結構性偽類選擇器的冒號前邊可以跟一個其他選擇器做為限定;
帶括弧的選擇器,裡面一定要有參數;
匹配子元素,同時也會匹配孫子元素,因為子元素是孫子元素的父元素;

下面的 !lte8是指IE8一下瀏覽器不支持,包括IE8也不支持

:first-of-type,選擇相對父元素里同類型子元素中的第一個,!lte8
.box :first-of-type {color: #f00}
//匹配2.3.4以及4裡面的strong和6裡面的第一個span,因為這個span是6里的第一個span子元素
.box .ft:first-of-type {color: #ff0}
//匹配3和4裡面的strong,因為3是box裡面的第一個p且class=”ft”,而4里只有一個strong且class=”ft”,而5和6雖然class=”ft”但是他們相對於box的同類型中不是第一個出現的;

:last-of-type,選擇相對父元素里同類型子元素中的最後一個,!lte8
.box :last-of-type {color: #f00}
//匹配2.5.6以及4里的strong和6里的最後一個span

:only-of-type,選擇相對父元素里同類型子元素中只有一個的元素,!lte8
.box :only-of-type {color: #f00}
//匹配2以及4里的strong,類為box里同類型元素只有一個的只有span
.box .ft:only-of-type {color: #f00}
//只匹配4里的strong
:only-child,選擇的元素相對於其父元素是唯一的子元素,!lte8
.box :only-child {color: #f00}
//只匹配4里的strong

:nth-child(n),選擇其父元素的第n個子元素或多個子元素,索引從1開始,當n用於表達式時索引從0開始!lte8
.box :nth-child(3) {color: #f00}
//匹配第三個子元素即這裡的4
.box :nth-child(odd) {color: #f00} 等價於 .box :nth-child(2n + 1) {color: #f00}
//匹配奇數即這裡的2.4.6以及4里的strong和6里的第一個span
.box :nth-child(even) {color: #f00} 等價於 .box :nth-child(2n + 2) {color: #f00}和.box :nth-child(2n)
//匹配偶數即這裡的3.5以及6里的第二個span
.box :nth-child(n + 1) {color: #f00}
//匹配 n + 1開始的所有子元素即.box里所有的子元素以及子孫元素,因為這裡n是從1開始的即:
n = 0 ----> n + 1 = 0 + 1 = 1,即這裡的2
n = 1 ----> n + 1 = 1 + 1 = 2,即這裡的3
... ...
n = 4 ----> n + 1 = 4 + 1 = 5,即這裡的6

:nth-last-child(n),跟:nth-child(n)使用類似,只是索引是從最後開始往前數,!lte8
.box :nth-last-child(3) {color: #f00}
//匹配倒數第三個子元素即這裡的4

:nth-of-type(n),選擇父元素的第n個或多個同類型的子元素,!lte8
.box :nth-of-type(2) {color: #f00}
//匹配5和6以及6裡面的第二個span

:nth-last-of-type(n),同上,只是從最後開始往前數,!lte8
.box :nth-last-of-type(2) {color: #f00}
//匹配3和4以及6裡面的第一個span
:first-child,選擇父元素里的第一個子元素,!ie6
.box :first-child {color: #f00}
//匹配2和4里的strong以及6里的第一個span

:last-child,選擇父元素里的最後一個子元素,!lte8
.box :last-child {color: #f00}
//匹配6和6里的最後一個span以及4里的strong

:root,選擇文檔的根元素,在HTML中就是指<html>標籤,!lte8
:empty,選擇沒有任何內容的元素,那怕是有一個空格也不行,!lte8
table td:empty {background-color: #ffc}
//匹配表格里沒有內容的td
:target,選擇當前活動的元素,指錨點點擊後跳轉到的那一個元素,!lte8
:not(selector),選擇排除selector以外的其他所有元素,!lte8
.box *:not(div) {background-color: #ffc}
//選擇box里除div以外的所有後代元素,如果div里有其他非div元素,也會選擇上,如上的HTML CODE就會選擇上div裡面的span和strong

1.13 UI元素狀態偽類選擇器

:enabled,指定元素處於可用狀態時的樣式,一般用於input,select和textarea
:disabled,指定元素處於不可用狀態時的樣式,一般用於input,select和textarea

:read-only,指定元素為唯讀狀態時的樣式,FF為-moz-read-only,一般用於input和textarea
:read-write,指定元素為只可寫狀態時的樣式,FF為-moz-read-write,一般用於input和textarea
:checked,指定元素被選中狀態時的樣式,FF為-moz-checked一般用於checkbox和radio
:default,指定元素默認選中的樣式,一般用於checkbox和radio
:indeterminate,指定默認一組單選或複選都沒被選中的樣式,只要有一個被選中則樣式被取消,一般用於checkbox和radio
::selection,指定元素處理選中狀態時的樣式,可用於所有元素,上面的幾個基本上只用於表單元素;!lte8
FF為::-moz-selection,不能用群組選擇器來寫;
::selection {background-color: #ffc; color: #fff}
::-moz-selection {background-color: #ffc; color: #fff}

注意事項

由於對CSS的解釋是自上而下的,對於一個元素的相同屬性描述,放在下面的會覆蓋掉位於上面的屬性描述,因此我們在對元素的選擇中一定要注意書寫順序,如:

a:visited {color: #00FF00; text-decoration: none}
a:hover {color: #FF00FF; text-decoration: underline}

採用這樣的書寫順序,無論連結有沒有被訪問過,只要當滑鼠移到連結上,連結都會變成藍色並有下劃線。但是,如果採用下面的書寫順序:

a:hover {color: #FF00FF; text-decoration: underline}

a:visited {color: #00FF00; text-decoration: none}

如果連結被訪問過,則當你滑鼠移到連結上時不會變成藍色並有下劃線,依然保持綠色。

相關詞條

相關搜尋

熱門詞條

聯絡我們