IE CSS Bug系列:表單控制元件雙邊距BUG

酸齋笑我發表於2013-09-09

伯樂線上導讀:IE 瀏覽器不支援很多 CSS 屬性是出了名的,即便在支援的部分中,也是有很多 Bug 的。Zoffix Znet 整理了 IE 中的 CSS 問題,有簡單的問題示例,也有解決方法。 這個系列共有 58 個指南,70 個解決方案。

這篇由伯樂線上前端開發小組的@szxw 翻譯。(歡迎更多前端開發朋友來加入“前端開發小組。)

 

受影響版本

該BUG影響:IE7、IE6

表現

<input>和<textarea>元素會從用擁有邊距(margin)屬性和佈局的父節點繼承水平方向的邊距(margin)屬性。

教程日期

2009-08-17 22:37:49 星期一

描述

這是我在Gérard Talbot 的 IE7 BUG 集合頁上發現的另外一個BUG。 雙邊距 Bug現在有了新的表現,而且在IE7下也出現了。現在它主要的表現是影響了<input>和<textarea>元素。讓我們來看一下示例。

示例

示例在一個單獨頁面上。

注意:雖然該演示顯示了合法的HTML標記,但它並不是建立HTML表單的合適方法,本演示只是一個簡化的版本。

HTML 程式碼:

CSS 程式碼:

現在,我們有一個擁有佈局並且設定了margin-left屬性的父節點。在IE6與IE7中,<input>和<textarea>元素的表現看起來就好像它們從父節點<div>那裡繼承了margin屬性一樣,這樣它們的margin屬性的值就是雙重疊加的。在父節點上設定margin-right屬性結果也是一樣的。在功能更健全的瀏覽器中,<input>和<textarea>元素在垂直方向上應該和<select>對齊。

 

解決方案

下面是按照解決方案型別排序的對上述問題的解決方案。

解決方案(條件註釋解決方案)

解決方案日期

2009-08-17 22:37:49 星期一

修復版本

所有受影響版本

描述

對於本BUG的修復是一個相當暴力直接的解決方案。讓我們一起看一下: 修復後的例項在一個單獨頁面上。

HTML 程式碼:

CSS 程式碼:

條件註釋程式碼:

讓我們來分解一下我在這裡的解決辦法。這個是迄今為止我發現的唯一一個解決方案。我通過使用條件註釋來針對IE6和IE7做了處理,您也可以選擇任何您喜歡的方式來達成這個目標。對於這些特定版本的IE瀏覽器,我為<input>和<textarea>設定了與父節點中的margin-left屬性值大小相等,符號相反的margin-left值。現在,在受該BUG影響瀏覽器中,所有的元素都像他們應該表現的那樣,與<select>元素在垂直方向對齊。該方案對於margin-right來說同樣適用。

註釋:你可以直接使用我在CSS裡定義的選擇條件,這不算惡意侵權。要確保修正其中margin的負數,把它只應用到和這個bug相關的表單元素中。

相關文章