How to Set Dynamic Width DIVs
https://stackoverflow.com/questions/933494
Question
Here is my scenario. I have a container div that has (n) child elements inside it. For this instance lets say there are 2 divs within the container div:
<div id="container">
<div id="col1">
Stuff in col1
</div>
<div id="col2">
Stuff in col2
</div>
</div>
The container div is going to be a percentage of the viewport, say 80%. Now, what I'm looking for is for these two inner divs (col1 & col2) to be inline with each other and take up the same amount of space. So the result should look something like this:
+-------------- container -------------+
| +---- col1 ----+ +---- col2 ----+ |
| | stuff in | | stuff in | |
| | col1 | | col2 | |
| +--------------+ +--------------+ |
+--------------------------------------+
Or if the container width is changed should result in something like this:
+------------------------------ container -----------------------------+
| +------------ col1 ------------+ +------------ col2 ------------+ |
| | stuff in col1 | | stuff in col2 | |
| | stuff in col1 | | stuff in col2 | |
| +------------------------------+ +------------------------------+ |
+----------------------------------------------------------------------+
The inner divs are always of equal width and have some separation from each other. This is similar to a table layout, but I would rather not use tables if possible. I have tried various techniques like floating and displaying the divs inline to no avail. They can never seem to align just right.
OTHER TIPS
make col1 and col2 spans (not divs) with
vertical-align:top
display:inline-block
width:50%
obviously (adjust the width to account for your margins/padding. and recommended that you use percentages for margins/padding so they add up to just under 100% see:http://ejohn.org/blog/sub-pixel-problems-in-css/)
My preferred solution
Use positioning relative to the outer container:
#container, #container > div
{
position: relative;
}
#col1
{
left: 2%; /* your margin */
}
#col2
{
right: 2%;
}
#container > div
{
width: 47%;
}
Note that you leave approximately the same 2% in the middle. The #col1
and #col2
should be aligned now.
Other solutions
With CSS3: use column-count: 2
and break column after first div
.
If you really feel like floating, do only #col1 { float: left; width: 50%; }
#container{
overflow: hidden
}
#col1, #col2 {
float: left;
width: 50%;
}
Maybe the use of display: table;
would help? http://jsfiddle.net/g4dGz/119/