<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 36, comments - 419, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理


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

    用了這么多年的CSS,現在才明白CSS的真正匹配原理,不知道你是否也跟我一樣?看1個簡單的CSS:

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


    匹配原理:

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

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

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

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

    簡潔、高效的CSS:
          所謂高效的CSS就是讓瀏覽器在查找style匹配的元素的時候盡量進行少的查找,下面列出一些我們常見的寫CSS犯一些低效錯誤(也是我以前常常犯的錯誤,還老以為這樣寫才是高效的):
       
      1.不要在ID選擇器前使用標簽名
     一般寫法:DIV#divBox
     更好寫法:#divBox
     解釋: 因為ID選擇器是唯一的,加上div反而增加不必要的匹配。
      
      2.不要再class選擇器前使用標簽名
     一般寫法:span.red
     更好寫法:.red
     解釋: 同第一條,但如果你定義了多個.red,而且在不同的元素下是樣式不一樣,則不能去掉,比如你css文件中定義如下:
         p.red{color:red;}
         span.red{color:#ff00ff}
         如果是這樣定義的就不要去掉,去掉后就會混淆,不過建議最好不要這樣寫
      3.盡量少使用層級關系
     一般寫法:#divBox p .red{color:red;}      
     更好寫法:.red{..}
      
      4.使用class代替層級關系
     一般寫法:#divBox ul li a{display:block;}      
     更好寫法:.block{display:block;}




        有需要請查看:高性能WEB開發系列



    [作者]:BearRui(AK-47)
    [博客]: http://m.tkk7.com/bearrui/
    [聲明]:本博所有文章版權歸作者所有(除特殊說明以外),轉載請注明出處.
    英雄,別走啊,幫哥評論下:  

    精彩推薦 好文要頂 水平一般 看不懂 還需努力

    評論

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-08 08:43 by BeanSoft
    學習 收藏了

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-08 08:49 by BearRui(AK-47)
    @BeanSoft
    謝謝老大支持啊,^_^

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-08 16:57 by BearRui(AK-47)
    @愛之谷
    謝謝收藏

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-08 17:05 by 16樓
    實用,總結的不賴

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-08 17:07 by BearRui(AK-47)
    謝謝

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-09 16:48 by panasia
    很實用的例子。。學習了。。

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-12 17:58 by Aidan
    好文章,頂一下!

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-12 20:23 by BearRui(AK-47)
    謝謝樓上的支持

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-16 20:31 by 向東而立
    ( 不要再class選擇器前使用標簽名
    一般寫法:span.red
    更好寫法:.red
    解釋: 同第一條....)
    要再class選擇器前使用標簽名!
    class,表示一組(類)或一個具有同樣性質的元素,它們可以共用樣式,并且在頁面中將會出現多次(如果他能唯一,那么要ID又是什么)
    所以CSS選擇器選擇class時,沒有標簽名,選擇將是所以的類的集合...

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-16 21:31 by BearRui(AK-47)
    @向東而立
    class當然唯一是表示在產品中所有唯一,比如.red就表示所有的文字顏色為紅色,并不是跟id一樣的含義。

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-06-17 10:07 by tony徐
    簡單實用啊,現在才發現原來是倒著匹配的

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效[未登錄]  回復  更多評論   

    2010-06-20 19:42 by kkk
    的確,倒著查找是單鏈,順次查找是多鏈

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-09-23 18:14 by jsonz
    當時我就精呆啦。

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-11-18 14:15 by Ace.lee
    4.使用class代替層級關系
    一般寫法:#divBox ul li a{display:block;}
    更好寫法:.block{display:block;}

    首先,這個原理。俺還真是現在才知道。大部分觀點表示贊同。
    前面3點總結來說,就是在能正確實現樣式的情況下,層級盡可能少。
    第4點有點疑問。雖然用class代替層級減少了匹配的時間,但是,class多用一個就多了一個額外的資源開銷,通常,提倡的是盡可能少用類和ID,從這個方面來說,是否是就是因為類和ID的開銷超過了匹配所浪費的資源??

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2010-12-17 13:55 by nicolas
    是的,一直以為也是從左至右的,直到有次面試,面試官問了我CSS的優化,我才知道,原來一直習慣的span.classname{}反而比.classname{}的性能差,CSS的遍歷是從右向左的。支持!

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2011-05-16 00:06 by hax
    知其然不知其所以然。瀏覽器為什么要這樣匹配?不就是為了優化CSS匹配的性能?而web開發者為啥要優化css的寫法?這不是浪費了瀏覽器實現者的苦心么?css selector你該怎么寫就應該怎么寫。首先考慮的應該是這條規則想要表達什么,而不是是否能快20ms(實際上在通常的case里根本快不了20ms)。

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2011-06-12 21:32 by 水煮丫軟件
    而如果按從左到右的方式進行查找,則首先就查找到<span class='red'>的元素。

    樓主,上面這句話好像有點問題,應該是而如果按從右到左的方式進行查找

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2011-08-18 16:31 by wangjie
    老大不看你這篇文章我還以為我寫的css都是高效的呢

    # ID選擇器前究竟用不用用標簽名?  回復  更多評論   

    2013-04-11 17:31 by 森-pirate
    我現在在做一個頁面,出現的問題就是如果id選擇器不設置標簽div的話,選擇器內所設置的效果就無效。
    div#llinks ul {
    list-style: none;
    padding: 0px;
    margin: 5px 5px 0px 25px;
    }
    div#llinks ul li {
    float: left; /* 顯示為同一行,如果不加div浮動無效 */
    width: 80px; /* 指定每一項的寬度 */
    background: none;
    padding: 0px;
    border: none;
    }

    # re: 了解CSS的查找匹配原理,讓CSS更簡潔、高效  回復  更多評論   

    2013-06-07 16:52 by 漂流的兔子
    寫的很清楚 很受用 學習了
    主站蜘蛛池模板: 亚洲国产aⅴ成人精品无吗| 国产成人免费高清激情视频| 亚洲日韩在线中文字幕综合 | 亚洲熟伦熟女专区hd高清| 国产亚洲精品精华液| 亚洲AV网站在线观看| 亚洲va久久久久| 亚洲∧v久久久无码精品| 亚洲高清成人一区二区三区| 欧美好看的免费电影在线观看| 国产真人无码作爱视频免费 | 久久亚洲中文字幕精品一区| 韩国免费三片在线视频| 很黄很黄的网站免费的| 亚洲国产日韩综合久久精品| 日本久久久久亚洲中字幕| 亚洲乱码中文字幕综合| 亚洲人AV永久一区二区三区久久| 久久这里只精品热免费99| caoporm超免费公开视频| 免费看美女午夜大片| 亚洲国产成人AV网站| 亚洲精品无码久久久久久 | 成年在线观看免费人视频草莓| 3344免费播放观看视频| 国产成人精品日本亚洲专区6| 97亚洲熟妇自偷自拍另类图片 | 黄色网址免费在线观看| 国产黄在线观看免费观看不卡| 一级**爱片免费视频| 亚洲一级毛片免费观看| 亚洲videosbestsex日本| 亚洲国产成人91精品| 亚洲av片不卡无码久久| 亚洲色成人网站WWW永久四虎| 亚洲综合激情五月色一区| 亚洲 欧洲 视频 伦小说| 亚洲国产精品网站在线播放| 亚洲AV综合永久无码精品天堂 | 亚洲精品一级无码鲁丝片| 亚洲国产a级视频|