HTML Code Snippet:
<fieldset id="o-bs-sum-buginfo">
<label for="o-bs-sum-bug-ErrorPrefix">Error Prefix</label>
<input type="text" id="o-bs-sum-bug-ErrorPrefix" name="ErrorPrefix" value="" />
<label for="o-bs-sum-bug-ErrorNumber">Error Number</label>
<input type="text" id="o-bs-sum-bug-ErrorNumber" name="ErrorNumber" value="" />
....
</fieldset>
Using only CSS (or jquery), irrespective of the browser size, I want to pair label and input elements next to each other. I also do have freedom to change tweak the HTML. if required.
I think using javascript for a simple css trick is overkill. Here is the one i made just now: http://jsfiddle.net/t6R93/
PS: It may have flaws with other browsers. I only tested with Chrome.
There's no need to use JavaScript, jQuery, or additional
div
s. You just have to:input
andlabel
to left (note thatinput
has to be block to be floated).clear: both
tolabel
.100px
) tolabel
.I was curious to see if this could be done with the "natural" semantic markup, i.e. with no non-semantic wrapper elements and with the
label
containing its correspondinginput
rather than having to refer to it with the slightly clunkyfor
attribute:A fixed-width label won't align the inputs here because the text isn't a separate element, and Shahid's elegantly minimal solution doesn't work either, but if you're willing to make all inputs the same width (which IMHO looks nice anyway) you can
float
themright
:The
-moz-box-sizing
should be redundant when FF29 is released, and even thebox-sizing
isn't needed unless you're mixing form control types. Theclear
andoverflow
are specifically needed fortextarea
.Full mixed-input-type example:
#o-bs-sum-buginfo label, #o-bs-sum-buginfo input{display:inline-block;width:50%;}
Put the every label with its corresponding input into a p tag. Then add the following css:
This is one of those things which can be surprisingly tricky to get right.
Many people will suggest using
float:left;
for this. Personally, I really dislike floats; they seem to cause more problems than they solve.My preference is to use inline-block. This is a display method that combines inline properties (so you can easily align elements next to each other, etc) with block properties (such as being able to specify dimensions).
So the answer is simply to make them both
display:inline-block;
and give the prompts a fixed width, which will make the input fields next to them line up.You'll also need some sort of line feed or break after the input field, otherwise the next prompt will appear on the same line, which isn't the desired effect. The best way to achieve this is to put each prompt and its field into a container
<div>
.So your HTML will look like this:
and your CSS will look like this:
Hope that helps.
Edit: you can use this plugin for setting the width of each label:
from this page in a comment
and you use it this way:
and thats all... all your labels are going to take the width of the longest label