Excellent post! Thanks. I updated the article and linked to your site.

Michiel

Ingo Chao wrote:
> Michiel van der Blonk wrote:
>   
>>   For long I have been looking for the easiest way to create forms 
>> without tables. I found several methods:
>> - floating
>> - position:absolute
>> - display:inline-block & display:-moz-inline-box
>>
>> All come with their own caveats and problems. The floating is usually 
>> considered the "best". However, it's not easy to align the input's under 
>> each other.
>>
>> The problem is usually that even if I give the label a width, it is not 
>> used by the browser, since it is inline, so it has to be made floating. 
>> Then when resizing the font the floating elements start shifting, and 
>> everything messes up.
>>
>> Recently I found out that if I give the label a little bit of padding, 
>> or an invisible border (color same as background) that the inputs are 
>> suddenly aligned correctly in both IE and FF.
>>     
>
> I'll try to discuss your test page
> http://test5.caribmedia.com/CSS/michiel/floating-forms.html
>
> (The following ascii art should align with fixed font size.)
>
>   
>> look at the difference between:
>>     form {width:20em}
>>     label {float:left;width:10em;margin-bottom:1em;}
>>     input {float:left;}
>>     
>
> Because of the margin-bottom of 1em, the label is taller than the input. 
> Apply a background color to see.
>
> |label| [input]
> |     |
>
> Floats do hook, they float /up/ as high as possible (e.g. not higher 
> than any preceding float [1]) . The subsequent label/input shows this:
>
>
> |label| [input]
> |     | |label|
>          |     |
> [input]
>
>
> There is enough room for both the labels side by side:
> 2 x 10em = 20em = width of the form
>
> There is no room left for the second input; therefore, this float /drops/ .
>
>
>
>   
>> and
>>     form {width:20em}
>>     label {float:left;width:10em;margin-bottom:1em;padding:1px}
>>     input {float:left;}
>>     
>
>
>   
>> for this html
>>     <form action="">
>>     <label>Name</label><input>
>>     <label>Address</label><input>
>>     <label>Email</label><input>
>>     </form>
>>
>>     
>
>
> The box model adds the padding to the width: the overall width of label is
> 1px + 10em + 1px
>
> But the form still has a width of 20em only. There is not enough room 
> for floating up of the subsequent label, the label itself drops.
>
> |label| [input]
> |     |
>
> |label| [input]
> |     |
>
>
> A similar effect can be achieved with the property "clear" on label [2].
>
> Ingo
>
> [1] some older browser will float up as high as possible regardless of 
> preceding floats.
> [2] IE/Win has problems with float+clear on the same element.
>
>   
______________________________________________________________________
css-discuss [EMAIL PROTECTED]
http://www.css-discuss.org/mailman/listinfo/css-d
IE7b2 testing hub -- http://css-discuss.incutio.com/?page=IE7
List wiki/FAQ -- http://css-discuss.incutio.com/
Supported by evolt.org -- http://www.evolt.org/help_support_evolt/

Reply via email to