亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

詳解CSS選擇器、優先級與匹配原理

2024-07-11 09:05:38
字體:
來源:轉載
供稿:網友

作為一個Web開發者,掌握必要的前臺技術也是很重要的,特別是在遇到一些實際問題的時候。這里給大家列舉一個例子:

給一個p標簽增加一個類(class),可是執行后該class中的有些屬性并沒有起作用。通過Firebug查看,發現沒有起作用的屬性被覆蓋了。這個時候突然意識到了CSS選擇器的優先級問題,這里就CSS選擇器的優先級問題做了一些總結。

選擇器種類

嚴格來講,選擇器的種類可以分為三種:標簽名選擇器、類選擇器和ID選擇器。而所謂的后代選擇器和群組選擇器只不過是對前三種選擇器的擴展應用。而在標簽內寫入style=""的方式,應該是CSS的一種引入方式,而不是選擇器,因為根本就沒有用到選擇器。而一般人們將上面這幾種方式結合在一起,所以就有了5種或6種選擇器了。

三種基本的選擇器類型

語法如下:

◆標簽名選擇器,如:p{},即直接使用HTML標簽作為選擇器。

◆類選擇器,如.polaris{}。

◆ID選擇器,如#polaris{}。

注意,ID選擇器跟類選擇器有很大的不同:一個頁面內不能出現相同的ID;再就是ID也是后臺開發人員會經常用的,所以前端開發人員應該盡量少的使用。當然跟后臺人員的工作配合十分嫻熟之后,這些都不會成為限制。

擴展選擇器

◆后代選擇器,如.polaris span img{},后代選賊器實際上是使用多個選擇器加上中間的空格來找到具體的要控制標簽。

◆群組選擇器,如div,span,img{},群組選擇器實際上是對CSS的一種簡化寫法,只不過把有相同定義的不同選擇器放在一起,省了很多代碼。

選擇器的優先級別

了解了各種選擇器后,還有一個重要的知識點就是CSS選擇器的優先級。這也就是為什么polaris會遇到文章開頭的問題。舉個簡單的例子:

  1. <div class="polaris"> 
  2. <span class="beijixing"> 
  3. beijixing  
  4. </span> 
  5. <span> 
  6. polaris  
  7. </span> 
  8. </div> 

如果已經把.polaris下面span內的字體設置成紅色:

  1. .polaris span {color:red;} 

這時,如果要改變.beijixing的顏色為藍色,用下面的命令是不能實現的:

  1. .beijixing {color:blue;} 

出現這種情況就是因為后一個命令的優先級不夠,兩條相互沖突的樣式設置,瀏覽器只會執行優先級較高的那個。

那么選擇器的優先級是怎么規定的呢?

一般而言,選擇器越特殊,它的優先級越高。也就是選擇器指向的越準確,它的優先級就越高。通常我們用1表示標簽名選擇器的優先級,用10表示類選擇器的優先級,用100標示ID選擇器的優先級。比如上例當中 .polaris span {color:red;}的選擇器優先級是 10 + 1 也就是11;而 .polaris 的優先級是10;瀏覽器自然會顯示紅色的字。理解了這個道理之后下面的優先級計算自是易如反掌:

  1. div.test1 .span var 優先級 1+10 +10 +1  
  2. span#xxx .songs li 優先級1+100 + 10 + 1  
  3. #xxx li 優先級 100 +1 

對于什么情況下使用什么選擇器,用不同選擇器的原則是:第一:準確的選到要控制的標簽;第二:使用最合理優先級的選擇器;第三:HTML和CSS代碼盡量簡潔美觀。通常:

1、最常用的選擇器是類選擇器。

2、li、td、dd等經常大量連續出現,并且樣式相同或者相類似的標簽,我們采用類選擇器跟標簽名選擇器結合的后代選擇器 .xx li/td/dd {} 的方式選擇。

3、極少的情況下會用ID選擇器,當然很多前端開發人員喜歡header,footer,banner,conntent設置成ID選擇器的,因為相同的樣式在一個頁面里不可能有第二次。

在這里不得不提使用在標簽內引入CSS的方式來寫CSS,即:

  1. <div style="color:red">polaris</div> 

這時候的優先級是最高的。我們給它的優先級是1000,這種寫法不推薦使用,特別是對新手來說。這也完全違背了內容和顯示分離的思想。DIV+CSS的優點也不能再有任何體現。

后代選擇器的定位原則

在這里介紹一下對于后代選擇器,瀏覽器是如何查找元素的呢?

瀏覽器CSS匹配不是從左到右進行查找,而是從右到左進行查找。比如DIV#divBox p span.red{color:red;},瀏覽器的查找順序如下:先查找html中所有class='red'的span元素,找到后,再查找其父輩元素中是否有p元素,再判斷p的父元素中是否有id為divBox的div元素,如果都存在則匹配上。

瀏覽器從右到左進行查找的好處是為了盡早過濾掉一些無關的樣式規則和元素。比如如下html和css:

  1. <style> 
  2. DIV#divBox p span.red{color:red;}  
  3. ><style> 
  4. <body> 
  5. <div id="divBox"> 
  6. <p><span>s1</span></p> 
  7. <p><span>s2</span></p> 
  8. <p><span>s3</span></p> 
  9. <p><span class='red'>s4</span></p> 
  10. </div> 
  11. </body> 

如果按從左到右查找,哪會先查找到很多不相關的p和span元素。而如果按從左到右的方式進行查找,則首先就查找到<span class='red'>的元素。firefox稱這種查找方式為key selector(關鍵字查詢),所謂的關鍵字就是樣式規則中最后(最右邊)的規則,上面的key就是span.red。

簡潔、高效的CSS

所謂高效的CSS就是讓瀏覽器在查找style匹配的元素的時候盡量進行少的查找,下面列出一些我們常見的寫CSS犯一些低效錯誤:

◆不要在ID選擇器前使用標簽名

一般寫法:DIV#divBox

更好寫法:#divBox

解釋: 因為ID選擇器是唯一的,加上div反而增加不必要的匹配。

◆不要再class選擇器前使用標簽名

一般寫法:span.red

更好寫法:.red

解釋:同第一條,但如果你定義了多個.red,而且在不同的元素下是樣式不一樣,則不能去掉,比如你css文件中定義如下:

 

  1. p.red{color:red;}  
  2. span.red{color:#ff00ff} 

如果是這樣定義的就不要去掉,去掉后就會混淆,不過建議最好不要這樣寫

◆盡量少使用層級關系

一般寫法:#divBox p .red{color:red;}

更好寫法:.red{..}

◆使用class代替層級關系

一般寫法:#divBox ul li a{display:block;}

更好寫法:.block{display:block;}

原文鏈接:http://polaris1119.javaeye.com/blog/764428

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲美女又黄又爽在线观看| 欧美日韩美女在线观看| 亚洲一区二区三区在线视频| 日本高清视频一区| 亚洲色图第三页| 国产91色在线|免| 一区二区亚洲欧洲国产日韩| 欧美亚洲激情视频| 国产精品高清网站| 久久精品国产清自在天天线| 国产精品福利在线| 97在线免费观看视频| 成人国产亚洲精品a区天堂华泰| 国产精品视频白浆免费视频| 国产高清视频一区三区| 精品亚洲夜色av98在线观看| 俺去了亚洲欧美日韩| 国产精品av电影| 久热精品在线视频| 在线播放日韩精品| 国内精品模特av私拍在线观看| 综合国产在线视频| 欧美激情性做爰免费视频| 91热福利电影| 日本精品一区二区三区在线播放视频| 国产日产久久高清欧美一区| 欧美另类在线观看| 日韩视频欧美视频| 91在线视频一区| 久久久久久午夜| 青青草一区二区| 亚洲国产精久久久久久久| 亚洲一区二区三区毛片| 欧美性猛交xxxx富婆弯腰| 欧美日韩国产中字| 日韩在线免费观看视频| 亚洲综合精品伊人久久| 国产日韩亚洲欧美| 91精品综合久久久久久五月天| 久久久极品av| 欧美日韩国产页| 欧美激情精品久久久久久| 亚洲www视频| 久久影视电视剧免费网站清宫辞电视| 国产成人一区二区三区小说| 久久久久久久色| 97色在线播放视频| 久久免费观看视频| 精品欧美aⅴ在线网站| 日韩精品在线观看网站| 欧美孕妇毛茸茸xxxx| 日韩精品一区二区三区第95| 日韩免费观看在线观看| 国产欧美精品一区二区三区-老狼| 九九九热精品免费视频观看网站| 久久久精品视频成人| 精品无人区太爽高潮在线播放| 国产日韩av在线播放| 国外日韩电影在线观看| 欧美精品做受xxx性少妇| 26uuu国产精品视频| 97av在线视频| 欧美精品久久久久久久久久| 久久综合色影院| 九九九热精品免费视频观看网站| 精品调教chinesegay| 中文字幕九色91在线| 久久视频这里只有精品| 538国产精品视频一区二区| 亚洲国产成人精品久久久国产成人一区| 久久久999成人| 日韩精品中文字| 日韩精品在线免费观看视频| 黑人极品videos精品欧美裸| 中文字幕免费精品一区高清| 国产亚洲视频在线观看| 狠狠综合久久av一区二区小说| 在线观看久久av| 欧美日韩激情网| 欧美午夜影院在线视频| 亚洲一区二区三区毛片| 欧美激情视频网站| 4k岛国日韩精品**专区| 在线观看国产欧美| 国产91ⅴ在线精品免费观看| 精品亚洲一区二区三区在线播放| 清纯唯美亚洲激情| 欧美国产精品日韩| 国产盗摄xxxx视频xxx69| 日韩精品中文字幕久久臀| 国内精品久久久久影院 日本资源| 久久久极品av| 国产成人精品a视频一区www| 91欧美精品成人综合在线观看| 91沈先生作品| 全色精品综合影院| 亚洲成人激情在线| 国产精品视频白浆免费视频| 精品久久久久久中文字幕大豆网| 久久久精品免费视频| 日韩精品小视频| 国产自产女人91一区在线观看| 久久久国产视频| 伊人久久精品视频| 久久精品视频99| 午夜免费日韩视频| 亚洲欧美成人在线| 国产主播喷水一区二区| 亚洲福利视频专区| 国产精品自产拍在线观看中文| 亚洲高清福利视频| 欧美专区国产专区| 欧美激情啊啊啊| 国产精品视频白浆免费视频| 久久激情五月丁香伊人| 91天堂在线视频| 91爱视频在线| 国语对白做受69| 日韩中文字幕在线视频| 国产精品99久久久久久久久| 国产精品免费小视频| 久久久久女教师免费一区| 国产精品自产拍在线观| 亚洲欧美国产另类| 国产精品视频白浆免费视频| 日韩av手机在线| 国产精品久久久久久久久久东京| 中文综合在线观看| 久久这里只有精品视频首页| 欧美有码在线观看视频| 高跟丝袜一区二区三区| 欧美国产日韩一区| 丝袜亚洲欧美日韩综合| 欧美成人四级hd版| 久久精品国产久精国产一老狼| 欧美国产日韩一区二区| 国产精品视频一区二区三区四| 欧美在线中文字幕| 欧美韩国理论所午夜片917电影| 亚洲男人av在线| 欧美激情乱人伦一区| 亚洲一区亚洲二区亚洲三区| 在线播放国产一区二区三区| 国产欧美中文字幕| 91久久久久久| 日韩在线视频观看正片免费网站| 欧美黄色www| 欧美国产第二页| 久久成人18免费网站| 欧美日韩国产在线看| 日韩av三级在线观看| 日韩国产在线播放| 亚洲在线www| 中文字幕综合在线| 欧美极品少妇xxxxⅹ喷水| 亚洲精品久久久久久久久| 日韩欧中文字幕| 91精品国产色综合久久不卡98| 久久中国妇女中文字幕| 国产精品久久久久久久久久久久久| 色综合久久88| 国产成人精品免高潮在线观看| 亚洲国语精品自产拍在线观看| 欧美国产乱视频|