大家在寫按鈕(input、button)的時候會發現在 IE 下:
隨著字數的增多,兩邊的間距也會越來越大。
在 WIN 的XP 風格下,當字數很多時,兩邊還會出現嚴重的鋸齒。
到底是什麼原因呢?
藍色理想原WEB標準化專欄的斑竹zbm2001z 給了一個答案:
1、IE 在按鈕的value 值每增加4 個位元組(漢字為2 個)時,就會在按鈕的兩邊產生總共一個位元組的內邊距寬度。
2、IE 的按鈕(XP 風格)預設樣式是一個固定尺寸的圓角矩形圖片作背景,所以一旦按鈕變寬變高後,這個固定尺寸的圓角矩形圖片的邊緣自然就會出現“拉毛」的現象了。
對於第二個問題我們暫時沒辦法去解決,除非 WIN 系統自己修復 BUG ,但對於第一個問題 ,我們還是可以修復的。
IE 下為按鈕元素設定overflow 屬性的visible 值(註:padding 值只在設定了overflow:visible 屬性後才有效),這個屬性其實在上次寫的《background-clip 與background-origin 的一則運用》一文中已經使用。不過在今天閱讀了《The stretched buttons problem in IE》後,發現原來還有一個小BUG —— 如果將按鈕置於表格單元格中,雖然按鈕顯示正確了,但是原先預留的寬度大小卻沒有改變,仍然佔據空間,需要在IE6 中設定按鈕的寬度(width)為0(IE7同樣也存在此BUG,但暫時沒有尋找到好的方式解決)。
最終的修復程式碼如下(Demo):
input.button { padding: 0 .25em; width: auto; _width: 0; overflow:visible !ie;}