I've been trying to create a site with the following structure:
desired structure http://i50.tinypic.com/vhw076.png
But I can't seem to get the header correct (e1 left, e2 centered, e3 right). I want the three elements e1, e2 and e3 to be left, middle and right positioned. This is what I'm trying:
<div id="wrapper">
<div id="header">
<div id="header-e1">
1
</div>
<div id="header-e2">
2
</div>
<div id="header-e3">
3
</div>
</div>
<div id="nav">
links
</div>
<div id="content">
content
</div>
<div id="footer">
footer
</div>
</div>
With this css:
#wrapper
{
width: 95%;
margin: 20px auto;
border: 1px solid black;
}
#header
{
margin: 5px;
}
#header-e1
{
float: left;
border: 1px solid black;
}
#header-e2
{
float: left;
border: 1px solid black;
}
#header-e3
{
border: 1px solid black;
}
#nav
{
margin: 5px;
}
#content
{
margin: 5px;
}
#footer
{
margin: 5px;
}
Can someone give me tips to what I can do? The structure is going to be used on a mobile website.
UPDATE
The code I have above gives me this: current result http://i46.tinypic.com/2mg87ya.png But I want the 2 centered and the 3 on the right side. I don't want to set the width to a percent because the content in the elements may vary, meaning it may be 20/60/20 - 10/80/10 - 33/33/33 or something else.
You need to give the divs in your header a width, and float header-e3 left.
Note: They all have the same CSS properties, so just give them the same class like .headerDivs and then you don't have repeating code
Edit: here is a working jsfiddle: http://jsfiddle.net/eNDPG/
I'm using a similar idea to what RevCocnept suggested with the
width: 33%
, except usingdisplay: inline-block
instead offloat: left
. This is to avoid removing thediv
elements inside#header
from the flow of the page and causing the height of#header
to become zero.Demo
You can do something like this:
HTML
CSS
The centered
<div>
must come as the last one in theHTML
code.Here's a JS Bin to test: http://jsbin.com/evagat/2/edit
Utilize the Magic of Overflow: Hidden
If you can swap the html position of 2 & 3 like so:
Then you can set this css which will cause 2 to "fill" the available space because of the
overlow: hidden
on it. So if 1 & 3 expand, 2 narrows (shrink window down to see what happens at really small size).Technically, you could keep your current html order and your
float: left
on both 1 & 2 and make 3 the flex div withoverflow: hidden
. You could do the same with 1 by reversing the order of the html completely and setting 2 & 3 tofloat: right
with 1 havingoverflow: hidden
. To me it would seem best to have the middle flex, but you know your application better than I.If you are trying to make the site with a responsive width, you can try the following (33% is roughly one-third):
You could also used fixed widths for the divs. If you want the further from each other you can play with their left/right margins etc. Hope that helps!
Here is an edit for no widths:
now check comment for html design.