国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > CSS > 正文

了解CSS的查找匹配原理,讓CSS更簡潔、高效

2024-07-11 09:01:26
字體:
供稿:網(wǎng)友
用了這么多年的CSS,現(xiàn)在才明白CSS的真正匹配原理,不知道你是否也跟我一樣?
 
 
 
看1個(gè)簡單的CSS: 

DIV#divBox p span.red{color:red;},按習(xí)慣我們對這個(gè)CSS 的理解是,瀏覽器先查找id為divBox的DIV元素,當(dāng)找到后,再找其下的所有p元素,然后再查找所有span元素,當(dāng)發(fā)現(xiàn)有span的class為red的時(shí)候,就應(yīng)用該style。多么簡單易懂的原理,可是這個(gè)理解卻是完完全全相反、錯(cuò)誤的。 


匹配原理: 

瀏覽器CSS匹配不是從左到右進(jìn)行查找,而是從右到左進(jìn)行查找。比如之前說的 DIV#divBox p span.red{color:red;},瀏覽器的查找順序如下: 

  先查找html中所有class='red'的span元素,找到后,再查找其父輩元素中是否有p元素,再判斷p的父元素中是否有id為divBox的div元素,如果都存在則匹配上。 

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

復(fù)制代碼代碼如下:

<style> 
DIV#divBox p span.red{color:red;} 
<style> 
<body> 
<div id="divBox"> 
<p><span>s1</span></p> 
<p><span>s2</span></p> 
<p><span>s3</span></p> 
<p><span class='red'>s4</span></p> 
</div> 
</body> 

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


簡潔、高效的CSS: 
所謂高效的CSS就是讓瀏覽器在查找style匹配的元素的時(shí)候盡量進(jìn)行少的查找,下面列出一些我們常見的寫CSS犯一些低效錯(cuò)誤(也是我以前常常犯的錯(cuò)誤,還老以為這樣寫才是高效的): 

1.不要在ID選擇器前使用標(biāo)簽名 
一般寫法:DIV#divBox 
更好寫法:#divBox 
解釋: 因?yàn)镮D選擇器是唯一的,加上div反而增加不必要的匹配。 

2.不要再class選擇器前使用標(biāo)簽名 
一般寫法:span.red 
更好寫法:.red 
解釋: 同第一條,但如果你定義了多個(gè).red,而且在不同的元素下是樣式不一樣,則不能去掉,比如你css文件中定義如下: 
p.red{color:red;} 
span.red{color:#ff00ff} 
如果是這樣定義的就不要去掉,去掉后就會混淆,不過建議最好不要這樣寫 
3.盡量少使用層級關(guān)系 
一般寫法:#divBox p .red{color:red;} 
更好寫法:.red{..} 

4.使用class代替層級關(guān)系 
一般寫法:#divBox ul li a{display:block;} 
更好寫法:.block{display:block;} 

PS:看有些同學(xué)對從右到左的理論保持懷疑,下面貼出firefox和google的2篇相關(guān)css解釋的文章,供大家參考 

mozilla firefox:https://developer.mozilla.org/en/Writing_Efficient_CSS 

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岳普湖县| 马边| 林西县| 吉木萨尔县| 建瓯市| 磐石市| 河源市| 朔州市| 星子县| 陇南市| 浦县| 托克托县| 鄂伦春自治旗| 义乌市| 乌恰县| 沈阳市| 揭阳市| 利辛县| 仁布县| 冕宁县| 交城县| 松滋市| 萨迦县| 宜良县| 宜良县| 上饶县| 安图县| 保亭| 仁怀市| 陈巴尔虎旗| 南京市| 波密县| 舒城县| 封丘县| 聂荣县| 吐鲁番市| 永胜县| 巍山| 准格尔旗| 香港| 库车县|