CSS系列(6) CSS通配符詳解


 

通配符使用星號*表示,意思是“所有的”。

 

平時使用電腦,比如要搜索C盤里所有的網頁,可以使用 *.html來搜索,.html是網頁的后綴名,*代表了所有網頁的名稱;

 

也就是使用 * 加后綴名,就可以在電腦中搜索文件。

 

在CSS中,同樣使用 * 代表所有的標簽或元素,它叫做通配符選擇器。

 

比如:* { color : red; } 這里就把所有元素的字體設置為紅色。

 

*會匹配所有的元素,因此針對所有元素的設置可以使用*來完成,用的最多的例子如下:

*{margin:0px; padding:0px;}

這里是設置所有元素的外邊距margin和內邊距padding都為0。

 

不過,由於*會匹配所有的元素,這樣會影響網頁渲染的時間,因此很多人開始停止使用*通配符選擇器,取而代之的是,把所有需要統一設置的元素,放在一起,一塊設置。

 

比如

 

(1)淘寶

 

blockquote,body,button,dd,dl,dt,fieldset,form,h1,h2,h3,h4,h5,h6,hr,input,legend,li,ol,p,pre,td,textarea,th,ul{ margin:0;       padding:0}

 

 

 

(2)騰訊

 

body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fieldset,legend,input,textarea,select{margin:0;padding:0}

 

 

(3)新浪

 

html, body, ul, li, ol, dl, dd, dt, p, h1, h2, h3, h4, h5, h6, form, fieldset, legend, img { margin:0; padding:0; }

 

 

 

也就是將需要統一設置的元素使用分組選擇器一次性設置;

 

分組選擇器的意思就是有相同設置的元素分為一組,使用逗號隔開,這樣設置的樣式就會對該組所有元素起作用。

 

 

*通配符選擇器的另一個用法是,給某個元素的后代設置相同的樣式,比如要給class=”red”元素的后代設置粗體,讓具有類red的后代元素的字體加粗,

.red * { font-weight : bold; }

 

頁面源代碼如下:

 

<html>

<head>

 

<style type="text/css">

 

.red { color:red;}

.red * { font-weight : bold; }

 

</style>

</head>

<body >

 

  <div class="red"> 

    <div> 

       長子div

          <div>

          孫子div

          </div>

    </div>   

  </div>

 

</body>

</html>

 

 

效果:

 

                       

 

 

那么,到底要不要使用通配符選擇器呢?

 

之所以不使用*通配符選擇器,主要是因為網頁打開速度,也就是性能原因。

 

但是,對於性能,沒有必要考慮的太多,只有當性能確實是個問題的時候,我們再優化也不晚。

 

這一點,對初學者十分重要,以前我寫程序,總是考慮性能,結果是浪費了時間。現在我基本都是怎么快怎么來,任務是有期限的,我們必須要抓緊時間,先把功能實現,后面再想着優化。

 

因此,對於通配符選擇器,只要你有需要,隨時可以拿過來用。

 

不過,一般公司都有封裝好的公共樣式表,直接拿來用就行了。

 

 

 

 

本文參考了很多文章,下面是文章名稱和地址,感興趣的可以看一下。

 

 

 

1,CSS * 選擇器

http://www.w3school.com.cn/cssref/selector_all.asp

知識點:

(1) * 選擇器選取所有元素。

(2) * 選擇器也能選取另一個元素中的所有元素。

 

 

2,謹慎使用CSS中的星號(*)通配符

http://dudo.org/archives/2010050520544.html

知識點

(1)    當html多層次嵌套時,樣式重復繼承和渲染的次數增多,影響效率。

 

結論:

(1)    不要在在深層次的頁面結構中使用它;

(2)    不要在頁面的根節點使用它;

(3)    不要在距離目標節點較遠的節點上使用它;

(4)    最好在父級元素中使用。

 

 

3,避免通配選擇器

http://www.douban.com/note/315614057/?type=like

知識點:

(1)    CSS選擇器是從右到左進行規則匹配。與人們閱讀順序相反。

(2)    最右邊的規則往往決定了瀏覽器繼續左移匹配的工作量,我們把最右邊選擇規則稱之為關鍵選擇器。

例子:

.selected * {color: red;}瀏覽器匹配文檔中所有的元素后分別向上逐級匹配class為selected的元素,直到文檔的根節點,因此其匹配開銷是非常大的,通常比開銷最小的ID選擇器高出1~3個數量級,所以應避免使用關鍵選擇器是通配選擇器的規則。

 

 

 

4,CSS通用元素選擇器的都市流言

http://shawphy.com/2010/11/css-universal-selector.html

知識點

(1)    由於CSS規則和HTML是並行載入的,因此把CSS放在HEAD中是非常有必要的。

(2)    少使用 :last-child 。因為這個選擇器無法索引起來,必須等DOM構件完,才能知道他是不是父元素中最后的那個元素。這種就非常慢了,慎用。

結論:只要有需要,大膽的使用 * 吧,他不會給你從性能上增加額外的麻煩。

 

 

5,關於css通配符性能問題不完全測試

http://i.wanz.im/2012/01/03/performance_testing_about_css_universal_selector/

結論:使用*通配符選擇器的時間影響很小。

 


免責聲明!

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



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