效能差異:
【border:0;】把border設為“0”像素雖然在頁面上看不見,但按border預設值理解,瀏覽器依然對border-width/border-color進行了渲染,即已經佔用了記憶體值。
【border:none;】把border設為“none”即沒有,瀏覽器解析“none”時將不作出渲染動作,即不會消耗記憶體值。
相容性差異:
相容性差異只針對瀏覽器IE6、IE7與標籤button、input而言,在win、win7、vista 的XP主題下均會出現此情況。
【border:none;】當border為“none”時似乎對IE6/7無效邊框依然存在,如下
代碼
代碼如下 |
複製代碼 |
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>borderl:none;與border:0;的區別</title> <style type="text/css"> input,button{border:none;} </style> </head> <body> <h3><button></h3> <button type="button">button</button> <h3><input></h3> <input name="" type="button" value="input button" /> <br /><br /> <input name="" type="text" value="input text" /> </body> </html> |
效果
注意在firebug中border:none和border:0的區別
下面舉個例子來具體說明下
代碼如下 |
複製代碼 |
<style> div {border: 1px solid black; margin: 1em;} .zerotest div {border: 0;} .nonetest div {border: none;} div.setwidth {border-width: 3px;} div.setstyle {border-style: dashed;} </style>
<div class="zerotest"> <div class="setwidth"> "Border: 0" and "border-width: 3px" </div> <div class="setstyle"> "Border: 0" and "border-style: dashed" </div> </div> <div class="nonetest"> <div class="setwidth"> "Border: none" and "border-width: 3px" </div> <div class="setstyle"> "Border: none" and "border-style: dashed" </div> </div>
|
有興趣的朋友可以複製以上代碼在這個瀏覽器試一試:
測試結果:
1、.zerotest .setwidth
雖然定義了border-width:3px,但是border-style:none 所以無邊框(IE7會顯示3像素的邊框,這跟border:0解析有關。)
2、.zerotest .setstyle
雖然定義了border-style: dashed,但是border-width:0 所以無邊框
3、.nonetest .setwidth
雖然定義了border-width:3px,但是border-style:none 所以無邊框(IE7下無邊框)
4、.nonetest .setstyle
定義了border-style:dashed border-style為預設值medium border-color為預設值black 所以會顯示3像素黑色的虛線框(IE7下為一像素)
綜合1、4可以分析出在ie6、IE7下:
border:0 被解析為 border-width:0
border:none 被解析為 border-style:none
再來看看標準瀏覽器
border:0 比 border:none多渲染了一個border-width:0,也就是為什麼border:none的效能要比border:0高。border:none;被理解為關閉此標籤,設定為0,雖然不顯示,但是同樣占記憶體。
為了少渲染border-width:0,和不佔用記憶體,這裡我們寫一個相容所有瀏覽器的最優寫法:
border:0 none;前面的0是針對ie6和ie7的相容,後面的none是針對標準瀏覽器的。
測試了下border:0 none;和border:none 0;ie6和ie7效果一致,至於渲染的和佔用記憶體情況的利弊分析,有待進一步的分析測試,推薦用前者。
總結:
對比border:0;與border:none;之間的區別在於有渲染和沒渲染,感覺他們和display:none;與visibility:hidden;的關係類似,而對於border屬性的渲染效能對比暫時沒找測試的方法,雖然認為他們存在渲染效能上的差異但也只能說是理論上。
如何讓border:none;實現全相容?只需要在同一選擇符上添加背景屬性即可,如下例Demo3:
代碼如下 |
複製代碼 |
<style type="text/css"> input,button{border:none;background:none;} </style> <h3>button</h3> <button type="button">button</button> <h3>input</h3> <input name="" type="button" value="input button" /> <br /><br /> <input name="" type="text" value="input text" /> |
對於border:0;與border:none;個人更向於使用,border:none;,因為border:none;畢竟在效能消耗沒有爭議,而且相容性可用背景屬性解決不足以成為障礙。