CSS and Label Input alignment vs. tables

css, html, html-table, jquery

Solution

It sounds like you essentially are after a table layout without using tables.. In which case, just using CSS table-row/table-cell styles could work:

.labelInputArea 
{
    display:table-row;
}
.labelInputArea label
{
    text-align:right;
    display:table-cell;
}

.labelInputArea input
{
    text-align:left;
    display:table-cell;
}

Fiddle here: http://jsfiddle.net/x5c8N/

For what it's worth, I'd probably stick with a fixed width label that will wrap it's contents, eg

.labelInputArea 
{
    display:block;
    padding-top:5px;
}
.labelInputArea label
{
    width:150px;
    display:inline-block;
}

.labelInputArea input
{
    vertical-align:top;
}

http://jsfiddle.net/n4xzF/1/

as I prefer a design that uses vertical space over horizontal space, but that's just my preference :)

Problem

This is what I'm trying to accomplish: ``` First Name: Textbox Last Name: Textbox ... more labels with unknown widths: more text boxes ``` - Using a table it's dead easy to accomplish this - Using CSS is also dead easy, for as long as you somehow indicate the width of the label(either percentage or hard coded) - Using jquery to re-calculate the max width and assign it to all labels is also easy Problem None of the above is elegant. I want a generic CSS that I can use across all of my websites, where I can display a right aligned group of labels for my inputs and if later the text for one of my label is changed I don't have to redeploy my entire code just to change a darn width value Something like: ``` <div class="labelInputArea"> <label for="userName" class="lable">User Name:</label> <input name="userName" type="text" value="" /> </div> <div class="labelInputArea"> <label for="password" class="lable">Password:</label> <input name="password" type="text" value="" /> </div> <div class="labelInputArea"> <label for="longText" class="lable">Some Long Label:</label> <input name="longText" type="text" value="" /> </div> ``` and in my .css I would have something like: ``` .labelInputArea { display:block; } .labelInputArea .label { text-align:right; display:inline; } .labelInputArea input { text-align:left; display:inline; } ```

Original source