Affected Versions
This bug affects: IE7
Symptoms
horizontal margins on <input> and <textarea> elements are "inherited" from the ascendant with a margin and "layout"
Date of the Tutorial
Mon Aug 17 22:37:49 2009
This bug affects: IE7
horizontal margins on <input> and <textarea> elements are "inherited" from the ascendant with a margin and "layout"
Mon Aug 17 22:37:49 2009
Note: even though, the demo shows valid HTML markup, this is not a proper way to create HTML forms; the demo is a simplified version.
<form action=""> <div> <input type="text" name="ber"><br> <textarea cols="10" rows="5" name="baz"></textarea><br> <select name="ber"><option>foo</option></select><br> </div> </form>
div { margin-left: 100px; width: 100%; /* gives "layout" */ }
What we have here is an ascendant that has "layout" and margin-left
set on it. In IE7 the ' element"><input>
element and ' element"><textarea>
element seems to have "inherited" the margin
from the ascendant ' element"><div>
and their margin is doubled. Same happens with margin-right
set on the ascendant. In sane browsers ' element"><input>
and ' element"><textarea>
will vertically align with the ' element"><select>
element.
Below are solutions for the above bug ordered by the solution type.
Mon Aug 17 22:47:07 2009
All of the affected
The fix for this bug is a rather brute-force hack. Let's take a look:
<form action=""> <div> <input type="text" name="ber"><br> <textarea cols="10" rows="5" name="baz"></textarea><br> <select name="ber"><option>foo</option></select><br> </div> </form>
div { margin-left: 100px; width: 100%; /* gives "layout" */ }
<!--[if lte IE 7]>
<style type="text/css">
input,
textarea {
margin-left: -100px;
}
</style>
<![endif]-->
Let's break down what I did here. This is the only fix I have found so far. I have used conditonal comments to target IE7 - feel free to use whatever method you like to do that. For those specific IE versions I've set negative margin-left
equal to the margin-left
set on the ascendant (except negative, of course) on our ' element"><input>
and ' element"><textarea>
. Now both of those elements align with ' element"><select>
in affected browsers just as they supposed to. The same principle would apply for margin-right
. Just a note: you're not mean to use the same selector I've used, make sure to localize the negative margin for it to be applied only on form elements that manifest this bug.