元素選擇器(標籤名選擇器)其實就是文檔的元素,如html,body,p,div等等,html
下面例子中選擇了span元素,並設置了字體顏色爲紅色。瀏覽器
<body> <p>這裏使用<span>標籤名選擇器</span>改變了樣式</p> </body>
CSS:字體
span{ color: red; }
效果:spa
(全部瀏覽器都支持類選擇器,但多類選擇器(.className1.className2)不被ie6支持。)firefox
類選擇器根據類名來選擇,前面以」.」來標誌,使用類選擇器以前須要在html元素上定義類名,類名自定義。3d
<body> <div class="demo"></div> </body>
CSScode
.demo{ width: 150px; height: 150px; background:#0e0; }
效果:htm
根據元素ID來選擇元素,具備惟一性。前面以」#」號來標誌。blog
<body> <div id="demo"></div> </body>
CSS文檔
#demo{ width: 150px; height: 150px; background:red; }
效果:
後代選擇器也稱爲包含選擇器,用來選擇特定元素或元素組的後代,後代選擇器用兩個經常使用選擇器,中間加一個空格表示。
其中前面的經常使用選擇器選擇祖元素,後面的經常使用選擇器選擇子元素,樣式最終會應用於子元素中。
好比說:E F,前面E爲祖先元素,F爲後代元素。
所表達的意思就是選擇了E元素的全部後代F元素,這裏F不論是E元素的子元素或者是孫元素或者是更深層次的關係,都將被選中。
換句話說,不論F在E中有多少層關係,都將被選中。
<body> <div class="demo"> <div class="one"> <ul> <li>列表一</li> </ul> <p>這裏是一個段落</p> </div> </div> </body>
CSS
.demo .one{ color: red; }
效果:
一、通用選擇器用*來表示,下例中表示全部的元素的字體大小都是12px;
*{
font-size: 12px;
}
二、 通用選擇器還能夠和後代選擇器組合。
<body> <p> 全部的文本都被定義成紅色<br> <span>全部的文本都被定義成紅色</span><br> <span>全部的文本都被定義成紅色</span><br> <span>全部的文本都被定義成紅色</span> </p> </body>
CSS
p *{ color: red; }
表示全部p元素後代的全部元素都應用這個樣式,注意,若p元素後沒有元素,則樣式沒有效果。
三、與後代選擇器的搭配容易出現瀏覽器不能解析的狀況。
<body> <p> <p>全部的<span>文本</span>都被定義成紅色</p> <span>此處沒有變色</span><br> <span>此處沒有變色</span> </p> </body>
CSS
p *{ color: red; }
效果:
請注意這個選擇器與後代選擇器的區別:
子選擇器(child selector)僅是指它的直接後代,或者你能夠理解爲做用於子元素的第一個後代。
然後代選擇器是做用於全部子後代元素。
後代選擇器經過空格來進行選擇,而子選擇器是經過「>」進行選擇
<body> <p id="links"> <a href="#">連接一</a> <span><a href="#">連接二</a></span> <span><a href="#">連接三</a></span> </p> </body>
CSS
#links a {color:red;} #links > a {color:blue;}
效果:
當幾個元素樣式屬性同樣時,能夠共同調用一個聲明,元素之間用逗號分隔。
<body> <p>這裏是一個段落!</p> <ul><li>列表</li></ul> <a href="#" class="demo1">連接一</a><br> <span class="demo2">文字文字!</span> </body>
CSS
p,li{ color: blue; } .demo1,.demo2{ color: red; }
效果:
相鄰兄弟選擇器能夠選擇緊接在另外一元素後的元素,並且他們具備一個相同的父元素。
換句話說,EF兩元素具備一個相同的父元素,並且F元素在E元素後面,並且相鄰,這樣咱們就可使用相鄰兄弟元素選擇器來選擇F元素(選中的僅一個元素)。
<body> <ul> <li>列表一</li> <li class="active">列表二</li> <li>列表三</li> <li>列表四</li> <li>列表五</li> </ul> </body>
CSS
.active+li{ background: #0e0; }
效果:
註釋:選擇了li.active後面相鄰的li元素,注意了和li.active後面相鄰的元素僅只有一個的。
通用兄弟元素選擇器是CSS3新增長一種選擇器。
這種選擇器將選擇某元素後面的全部兄弟元素,他們也和相鄰兄弟元素相似,須要在同一個父元素之中。
換句話說,E和F元素是屬於同一父元素以內,而且F元素在E元素以後,那麼E ~ F 選擇器將選擇中全部E元素後面的F元素。
<body> <ul> <li>列表一</li> <li class="active">列表二</li> <li>列表三</li> <li>列表四</li> <li>列表五</li> </ul> </body>
CSS
.active~li{ background: #0e0; }
效果:
選擇器的優先級問題?
如何規定優先級?
通常而言,選擇器越特殊,優先級越高。也就是選擇器指向越準確,它的優先級就越高。
如用數字來表示優先級高低:
標籤名選擇器 = 1
類選擇器 = 10
ID選擇器 = 100
例:
結果是藍色,color沒有效果
結果:
緣由:
.demo span{ color: blue;}的選擇器優先級是10+1=11
.color{color: red;}的優先級是10
因此瀏覽器顯示的是藍色。
後代選擇器定位原則:
對於後代選擇器,瀏覽器是如何查找元素的呢?
瀏覽器CSS匹配不是從左到右進行查找,而是從右到左進行查找。
好比DIV#divBox p span.red{color:red;},
瀏覽器的查找順序以下:先查找html中全部class='red'的span元素,找到後,再查找其父輩元 素中是否有p元素,再判斷p的父元素中是否有id爲divBox的div元素,若是都存在則匹配上。
瀏覽器從右到左進行查找的好處是爲了儘早過濾掉一些無關的樣式規則和元素。
若是按從左到右查找,那會先查找到不少不相關的p和span元素。
而若是按從左到右的方式進行查找,則首先就查找到<span class='red'>的元素。
firefox稱這種查找方式爲key selector(關鍵字查詢),所謂的關鍵字就是樣式規則中最後(最右邊)的規則,上面的key就是span.red。