css選擇器

css選擇器

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

HTML頁面中的元素就是通過CSS選擇器進行控制的。

簡介,1.1 類別選擇器,1.2 標籤選擇器,1.3 ID選擇器,1.4 後代選擇器,1.5 子選擇器,1.6 偽類選擇器,1.7 通用選擇器,1.8 群組選擇器,1.9 相鄰同胞選擇器,1.10 屬性選擇器,1.11 偽元素選擇器,1.12 結構性偽類選擇器,1.13 UI元素狀態偽類選擇器,注意事項,

簡介

什麼是選擇器呢?
每一條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 {
color:#c00;
}
#main p, #sider span {
color:#000;
line-height:26px;
}
.#main p span {
color:#f60;
}
.text1 h1,#sider h3,.art_title h2 {
}
使用群組選擇器,將會大大的簡化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}
如果連結被訪問過,則當你滑鼠移到連結上時不會變成藍色並有下劃線,依然保持綠色。

相關詞條

熱門詞條

聯絡我們