CSS選擇器原理以及如何提高CSS選擇器效率兵迅?

CSS選擇器原理

瀏覽器是如何讀取選擇器泰讽,以識別樣式例衍,并將相應(yīng)的樣式附于對應(yīng)的HTML元素昔期,達到美化頁面的效果。Chris
Coyier曾在《Efficiently Rendering CSS》一文中說過“瀏覽器讀取你的選擇器佛玄,遵循的原則是從選擇器的右邊到左邊讀取硼一。換句話說,瀏覽器讀取選擇器的順序是由右到左進行”梦抢。比如說:
  div.nav > ul li a
  上面的實例來說般贼,瀏覽器首先會嘗試在你的HTML標簽中尋找“a”元素,接著在匹配“l(fā)i和ul”奥吩,最后在去匹配“div.nav”哼蛆。這就是前成所主的“選擇器從右到左的原則”。
  選擇器的最后一部分霞赫,也就是選擇器的最右邊(在這個例子中就是a[title]部分)部分被稱為“關(guān)鍵選擇器”腮介,它將決定你的選擇器的效率如何?是高還是低端衰。
  老版本的瀏覽器可以過濾掉不匹配的選擇器叠洗,而直接匹配更高效的選擇器。記得David Hyatt在《Writing efficient CSS for use in the Mozilla UI》說過:“這個關(guān)鍵選擇器可以大大提高選擇器的性能旅东,少檢查一個給定的元素規(guī)則灭抑,就可以更有效的將樣式匹配給對應(yīng)的HTML元素〉执”那么如何讓關(guān)鍵選
擇器更有效名挥,性能化更高呢?其實很簡單主守,主要把握一點“越具體的關(guān)鍵選擇器禀倔,其性能越高”

提高選擇器效率

那么什么樣類型的選擇器,其性能高参淫?什么樣的類型的選擇器性能低呢救湖?下面我們就針對兩個問題來展開具體的學(xué)習(xí)。
CSS選擇器的效率
  如果你閱讀了本站的有關(guān)于選擇器類型的介紹的話涎才,你對選擇器并不會感到陌生鞋既。就算你沒讀過,我想CSS選擇器不會讓我們覺得是新東西耍铜,比如我們
常用的基本選擇器“元素標簽選擇器div”邑闺、“id選擇器#header”、“類選擇器.class”棕兼,或者說我們很少見的偽類選擇器“:focus”以
及更復(fù)雜的css3選擇器“:nth-child”等等陡舅。
  選擇器有一個固有的效率,我們來看Steve Souders給排的一個順序:
id選擇器(#myid)
類選擇器(.myclassname)
標簽選擇器(div,h1,p)
相鄰選擇器(h1+p)
子選擇器(ul > li)
后代選擇器(li a)
通配符選擇器(*)
屬性選擇器(a[rel="external"])
偽類選擇器(a:hover,li:nth-child)
  上面九種選擇器的效率是從高到低排下來的伴挚,基中ID選擇器的效率是最高靶衍,而偽類選擇器的效率則是最底灾炭。詳細的介紹大家還可以點擊Writing efficient CSS selectors。
  綜合上面的順序颅眶,我們清楚的知道蜈出,id和類名用于關(guān)鍵選擇器上效率是最高的,而CSS3的仿偽類和屬性選擇器涛酗,雖然使用方便铡原,但其效率卻是最低的。我們下面一起來看幾個實例的對比:
  div #myid
  效率要比下面的高:
  #myid div
  第一種選擇器比第二種選擇器效率高商叹,大家或許會問為什么眷蜈?其實根據(jù)前面所介紹的我們就不難理解了,因為第一個選擇器的“關(guān)鍵選擇器”使用了
“ID選擇器”沈自,而第二個選擇器的“關(guān)鍵選擇器”使用的是“標簽選擇器”,對比下來辜妓,“ID選擇器”效率高過“標簽選擇器”枯途,所以說第一個選擇器的效率要
高于第二個選擇器。
  在類名或ID名前面加上標簽也會致使選擇器效率變低的籍滴,比如說:
  div

myid

上面兩個選擇的效率要高于下面的選擇器:
  p#mydiv
p.myclassname
來自Mozilla的幾點建議
  David在《Use efficient CSS selectors》中介紹了幾種書寫高效率的CSS選擇器的方法酪夷,下面我將他們移到這里來讓大家參考:
  寫道
  1 避免普遍規(guī)則
2 不要在ID選擇器前加標簽名或類名
3 不要在類名選擇器前加標簽名
4 盡可能使用具體的類別
5 避免使用后代選擇器
6 標簽分類規(guī)則中不應(yīng)該包含一個子選擇器
7 子選擇器的問題
8 借助相關(guān)繼承關(guān)系
9 使用范圍內(nèi)的樣式表
  如果你不夠清楚上面所講的是什么,你可以點擊這里孽惰,他會讓你更容易了解這些規(guī)則晚岭。
我們應(yīng)該怎么做
  前面說“ID選擇器”的效率是最高的,那么今天我們寫樣式坦报,為了提高選擇器的效率,是不是我們要在每一個文檔的HTML元素中都加入ID名呢狂鞋?
我想這樣的做法是沒有的片择。對于一個有語義的代碼編寫和如何提高性能,以前他們之間如何的平衡骚揍?其實這個選擇器的效率低一點字管,對于大多數(shù)網(wǎng)站來說并不會有太
大的影響,但對于一個大型的網(wǎng)站信不,產(chǎn)生大量的流量這就會有差別了嘲叔,也就很值得我們?nèi)λM行優(yōu)化。那么我們就很有必要的去了解他們是如何工作抽活,比如說硫戈,一
般情況下哪些選擇器的使用效率更高。來看兩個簡單的例子:
  #myid
  上面的選擇器高于下面的:
  p#myid
  后者的寫法我發(fā)現(xiàn)還是有很多朋友這樣寫下硕,但我不知道你為什么需要在ID前面加一個標簽掏愁?難道你同一個頁面會有多個相同的ID不成歇由?
  我們接下來在來看一個實例,用于列表上的果港,比如說我們制作導(dǎo)航菜單的:
  #nav a
  高效于:
  #nav li a
  上面只是介紹了兩個常碰到的實例沦泌,在這里說這兩個實例,主要目的是讓你在今后的編寫樣式時辛掠,能注意這方面的的細節(jié)谢谦,從而加快你的代碼效率。

參考:
1 https://zhidao.baidu.com/question/938672733065817972.html?fr=iks&word=css+%D1%A1%D4%F1%C6%F7+%D4%F5%C3%B4%D1%F9%D7%EE%B6%CC&ie=gbk

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末萝衩,一起剝皮案震驚了整個濱河市回挽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猩谊,老刑警劉巖千劈,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牌捷,居然都是意外死亡墙牌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門暗甥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喜滨,“玉大人,你說我怎么就攤上這事撤防∷浞纾” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵寄月,是天一觀的道長辜膝。 經(jīng)常有香客問我,道長漾肮,這世上最難降的妖魔是什么内舟? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮初橘,結(jié)果婚禮上验游,老公的妹妹穿的比我還像新娘。我一直安慰自己保檐,他們只是感情好耕蝉,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夜只,像睡著了一般垒在。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扔亥,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天场躯,我揣著相機與錄音谈为,去河邊找鬼。 笑死踢关,一個胖子當著我的面吹牛伞鲫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播签舞,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼秕脓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了儒搭?” 一聲冷哼從身側(cè)響起吠架,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搂鲫,沒想到半個月后傍药,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡魂仍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年拐辽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓄诽。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖媒吗,靈堂內(nèi)的尸體忽然破棺而出仑氛,到底是詐尸還是另有隱情,我是刑警寧澤闸英,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布锯岖,位于F島的核電站,受9級特大地震影響甫何,放射性物質(zhì)發(fā)生泄漏出吹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一辙喂、第九天 我趴在偏房一處隱蔽的房頂上張望捶牢。 院中可真熱鬧,春花似錦巍耗、人聲如沸秋麸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灸蟆。三九已至,卻和暖如春亲族,著一層夾襖步出監(jiān)牢的瞬間炒考,已是汗流浹背可缚。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斋枢,地道東北人帘靡。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像杏慰,于是被迫代替她去往敵國和親测柠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5缘滥? 答:HTML5是最新的HTML標準轰胁。 注意:講述HT...
    kismetajun閱讀 27,422評論 1 45
  • 學(xué)會使用CSS選擇器熟記CSS樣式和外觀屬性熟練掌握CSS各種選擇器熟練掌握CSS各種選擇器熟練掌握CSS三種顯示...
    七彩小鹿閱讀 6,305評論 2 66
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 13,728評論 1 92
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級和職位的變化朝扼,入門級到專家級赃阀,廣度和深度都會有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,569評論 0 7
  • CSS基礎(chǔ) 本文包括CSS基礎(chǔ)知識選擇器(重要G嬗薄i凰埂!)繼承搂捧、特殊性驮俗、層疊、重要性CSS格式化排版單位和值盒模型浮動...
    廖少少閱讀 3,057評論 0 40