css3學習 之 css選擇器(結構性偽類選擇器)


同上篇:先說明下本機瀏覽器吧:opera 10 firefox 4.0 chrome 由於是公司機器xp的。。所以ie版本為 ie8  另外有一個ietest 

所謂偽元素選擇器,是指並不是針對真正的元素使用的選擇器,而是針對css中已經定義好的偽元素使用的選擇器,它的使用方法如下所示。

選擇器:偽元素{屬性:值}

偽元素選擇器也可以與類配合使用,使用方法如下所示。 

選擇器 類名:偽元素{屬性:值} 

 

1:在css中,主要有如下四個偽元素選擇器

first-line 、 first-letter 、before 、after

說明: first-letter:用於為某個元素中的文字的首字母(歐美文字)或第一個字(中文或者日文等漢字)使用樣式(其實就是第一個字符)

其他的我就不說明了。。大家看字面意思就明白了。

 

2:選擇器root、not、empty、target

root: 

root選擇器將樣式綁定到頁面的根元素中。所謂根元素是指位於文檔樹中最頂層結構的元素,在html頁面中就是指包含着整個頁面的<html>部分。

 example:


<html>  

<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<style>
:root{
    background-color:yellow;
}
body{
    background-color:limegreen;
}
</style>
</head>
<body>
<h1>選擇器概述</h1>
<p>在css3中,提倡使用選擇器來將樣式與元素直接綁定起來,這樣的話,在樣式表中什么樣式與元素相匹配變得一目了然,修改起來也很方便。不僅如此,通過選擇器,我們還可以實現各種復雜的指定,同時也能大量減少樣式表的代碼書寫量,最終書寫出來的樣式也會變得簡潔明</p>
</body>
</html>

 

運行效果:opera 和firefox起作用。ie與chrome不起作用

 

ps:這里有個好玩的現象:當root 與body同時出現的時候 body樣式有效范圍為頁面body范圍內。。但是當僅僅使用body樣式的時候整個頁面為body的有效范圍

 

 not:

 如果相對某個結構元素使用樣式,但是想排除這個結構元素下面的子結構元素,讓它不使用這個樣式時,可以使用not選擇器。

 

example:

< html >  
< head >
< meta  content ="text/html; charset=UTF-8"  http-equiv ="Content-Type" >
< style >
body *:not(h1)
{
    background-color
: limegreen ;
}
</ style >
</ head >
< body >
< h1 >選擇器概述 </ h1 >
< p >在css3中,提倡使用選擇器來將樣式與元素直接綁定起來,這樣的話,在樣式表中什么樣式與元素相匹配變得一目了然,修改起來也很方便。不僅如此,通過選擇器,我們還可以實現各種復雜的指定,同時也能大量減少樣式表的代碼書寫量,最終書寫出來的樣式也會變得簡潔明 </ p >
</ body >

</html>  


運行效果:除了ie其他均能正常顯示。。 

 

 

empty:

 使用empty選擇器來指定當元素內容為空白時使用的樣式

 example:

< html >  
< head >
< meta  content ="text/html; charset=UTF-8"  http-equiv ="Content-Type" >
< style >
:empty
{
    background-color
: limegreen ;
}
</ style >
</ head >
< body >
< h1 >選擇器概述 </ h1 >
< table  border ="1" >
  < tr >< td >A </ td >< td >B </ td >< td >C </ td ></ tr >
  < tr >< td >D </ td >< td >E </ td >< td ></ td ></ tr >
</ table >
</ body >

</html> 


 運行效果:同樣除了IE其他都可以顯示(PS:目前我沒有在ie9中運行。所以沒有資格在這里說明)

 這里我有一個疑問:

    :empty{

      background-color:limegreen;

content:"no"; 

 }

也就是說當為空的時候顯示“no” 。。但是我發現content無法顯示.這是為啥呢?

 

 target

使用target選擇器來對頁面某個target元素(該元素的id被當做頁面中的超鏈接來使用)指定樣式,該樣式只在用戶點擊了頁面中的超鏈接,並且跳轉到target元素后起作用

example:

<html> 

<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<style>
:target{
    background-color:yellow;
}
</style>
</head>
<body>
<id="menu">
<href="#text1">示例文字1</a> |
<href="#text2">示例文字2</a> |
<href="#text3">示例文字3</a> |
<href="#text4">示例文字4</a> 
</p>
<div id="text1">
 <h2>示例文字1</h2>
 <p>...此處略去...</p>
</div>
<div id="text2">
 <h2>示例文字2</h2>
 <p>...此處略去...</p>
</div>
<div id="text3">
 <h2>示例文字3</h2>
 <p>...此處略去...</p>
</div>
<div id="text4">
 <h2>示例文字4</h2>
 <p>...此處略去...</p>
</div>
</body>
</html>

運行效果:除了ie其他均能夠正常顯示

其中說明:  href="#text1"  是進行描點定位一旦去掉這個就不能滿足“並且跳轉到target元素后起作用” 故其樣式也將不起作用

 

3:選擇器first-child、last-child、nth-child、nth-last-child、nth-of-type、nth-last-of-type

 

 first-child、last-child 這里我就不詳細描述了。

 

nth-child、nth-last-child

針對一個父元素的第一個子元素開始起第多少個元素和最后一個子元素起第多少個元素起作用。

example:


<html>  

<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<style>
li:nth-child(2){
 background-color:yellow;
}
li:nth-last-child(2){
 background-color:skyblue;
}
</style>
</head>
<body>
<h2>列表A</h2>
<ul>
  <li>列表項目1</li>
  <li>列表項目2</li>
  <li>列表項目3</li>
  <li>列表項目4</li>
</ul>
</body>
</html>

 

同樣ie不爭氣。。。

但是我想說明的是某些情況下會有問題:

比如某個div中有以下元素<h2>標題1</h2><p>正文1</p> <h2>標題2</h2><p>正文2</p> <h2>標題3</h2><p>正文3</p>  當我們設置h2:nth-child(odd){background-color:yellow;}

本來我們是希望所有奇數標題(h2)顯示黃色。但是我們發現所有標題(h2)均顯示黃色。這時為啥呢?

因為nth-child選擇器在計算子元素是第奇數個元素,是連同所有父元素中所有子元素一起計算的這樣<h2>永遠都是奇數元素了。

nth-of-type能夠有效的解決這個問題。 

 

最后再舉一個循環使用的例子:

  

<html> 

<head>
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
<style>
li:nth-child(2n+1){
 background-color:yellow;
}
li:nth-child(2n+2){
 background-color:skyblue;
}
</style>
</head>
<body>
<h2>列表A</h2>
<ul>
  <li>列表項目1</li>
  <li>列表項目2</li>
  <li>列表項目3</li>
  <li>列表項目4</li>
</ul>
</body>
</html>

 

原來可以這樣的。。。css選擇器真的很神奇 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM