通配符使用星號*表示,意思是“所有的”。
平時使用電腦,比如要搜索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/
結論:使用*通配符選擇器的時間影響很小。