大家在寫按鈕(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;}