I'm going crazy trying to get the following layout right:
HTML
<div class="container">
<div class="all left">
Left1
</div>
<div class="all left">
Left2
</div>
<div class="all center">
Center
</div>
<div class="all right">
Right1
</div>
<div class="all right">
Right2
</div>
</div>
CSS
.container {
display: table;
position: relative;
width: 100%;
height: 100px;
border-spacing: 5px;
}
.all {
display: table-cell;
border: 1px solid #333;
margin: 5px;
}
.left {
width: 45px;
}
.right {
width: 45px;
}
.center {
width: auto;
}
FIDDLE
http://jsfiddle.net/ozrentk/VdryG/3/
However, whatever I try (e.g. putting border-spacing: 0px
in left or right div, margin: 0
, border-collapsing) all of my margins end up the same.
To simplify it, I want this:
+--------------------------------------------------------------+
|+-----++-----+ +------------------------------++-----++-----+|
|| || | | || || ||
|| || | | || || ||
|| || | | || || ||
|| || | | || || ||
|| || | | || || ||
|| || | | || || ||
|| || | | || || ||
|| || | | || || ||
|+-----++-----+ +------------------------------++-----++-----+|
+--------------------------------------------------------------+
But currently I have this:
+--------------------------------------------------------------+
| |
| +----+ +----+ +--------------------------+ +----+ +----+ |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| | | | | | | | | | | |
| +----+ +----+ +--------------------------+ +----+ +----+ |
| |
+--------------------------------------------------------------+
How can I control individual margins in this layout?
P.S.
As a quick solution that doesn't need to change the whole layout model, you can just add an invisible separator to your table structure, like in this edited fiddle:
hr {
display: table-cell;
width: 10px;
visibility: hidden;
}
table-cell
display types do not recognize margins, so that is why setting left and right margins are not getting you the desired result.
One work around is to specify display: block
on the .center
element:
.container {
display: table;
width: 100%;
height: 100px;
border-spacing: 5px;
}
.all {
display: table-cell;
border: 1px solid #333;
}
.left {
width: 45px;
}
.right {
width: 45px;
}
.center {
width: auto;
display: block;
margin: 0 10px 0 10px;
border: 1px solid red;
height: inherit;
}
Fiddle: http://jsfiddle.net/audetwebdesign/GNVfG/
The one limitation is that the parent block .container
needs an explicit height so that all the .container
child elements can inherit or compute the same height.
Thanks to Ilya Streltsyn for suggesting display: block
which solved the margin problem.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With