.container {_x000D_
width: 850px;_x000D_
padding: 0;_x000D_
display: table;_x000D_
margin-left: auto;_x000D_
margin-right: auto;_x000D_
}_x000D_
.row {_x000D_
display: table-row;_x000D_
margin-bottom: 30px;_x000D_
/* HERE */_x000D_
}_x000D_
.home_1 {_x000D_
width: 64px;_x000D_
height: 64px;_x000D_
padding-right: 20px;_x000D_
margin-right: 10px;_x000D_
display: table-cell;_x000D_
}_x000D_
.home_2 {_x000D_
width: 350px;_x000D_
height: 64px;_x000D_
padding: 0px;_x000D_
vertical-align: middle;_x000D_
font-size: 150%;_x000D_
display: table-cell;_x000D_
}_x000D_
.home_3 {_x000D_
width: 64px;_x000D_
height: 64px;_x000D_
padding-right: 20px;_x000D_
margin-right: 10px;_x000D_
display: table-cell;_x000D_
}_x000D_
.home_4 {_x000D_
width: 350px;_x000D_
height: 64px;_x000D_
padding: 0px;_x000D_
vertical-align: middle;_x000D_
font-size: 150%;_x000D_
display: table-cell;_x000D_
}
_x000D_
<div class="container">_x000D_
<div class="row">_x000D_
<div class="home_1"></div>_x000D_
<div class="home_2"></div>_x000D_
<div class="home_3"></div>_x000D_
<div class="home_4"></div>_x000D_
</div>_x000D_
_x000D_
<div class="row">_x000D_
<div class="home_1"></div>_x000D_
<div class="home_2"></div>_x000D_
</div>_x000D_
</div>
_x000D_
My question is relative to the line marked HERE
in the CSS. I found out that the rows are too near to each other, so I tried to add a bottom margin to separate them. Unfortunately it does not work. I have to add the margins to the table cells to separate the rows.
What is the reason behind this behavior?
Also, is it ok to use this strategy to perform layouting as I am doing:
[icon] - text [icon] - text
[icon] - text [icon] - text
or is there a better strategy?
If you want a specific margin e.g. 20px, you can put the table inside a div.
<div id="tableDiv">
<table>
<tr>
<th> test heading </th>
</tr>
<tr>
<td> test data </td>
</tr>
</table>
</div>
So the #tableDiv has a margin of 20px but the table itself has a width of 100%, forcing the table to be the full width except for the margin on either sides.
#tableDiv {
margin: 20px;
}
table {
width: 100%;
}
Add spacer span between two elements, then make it unvisible:
<img src="#" />
<span class="spacer">---</span>
<span>Text TEXT</span>
.spacer {
visibility: hidden
}
Have you tried setting the bottom margin to .row div
, i.e. to your "cells"?
When you work with actual HTML tables, you cannot set margins to rows, too - only to cells.
There is a pretty simple fix for this, the border-spacing
and border-collapse
CSS attributes work on display: table
.
You can use the following to get padding/margins in your cells.
.container {_x000D_
width: 850px;_x000D_
padding: 0;_x000D_
display: table;_x000D_
margin-left: auto;_x000D_
margin-right: auto;_x000D_
border-collapse: separate;_x000D_
border-spacing: 15px;_x000D_
}_x000D_
_x000D_
.row {_x000D_
display: table-row;_x000D_
}_x000D_
_x000D_
.home_1 {_x000D_
width: 64px;_x000D_
height: 64px;_x000D_
padding-right: 20px;_x000D_
margin-right: 10px;_x000D_
display: table-cell;_x000D_
}_x000D_
_x000D_
.home_2 {_x000D_
width: 350px;_x000D_
height: 64px;_x000D_
padding: 0px;_x000D_
vertical-align: middle;_x000D_
font-size: 150%;_x000D_
display: table-cell;_x000D_
}_x000D_
_x000D_
.home_3 {_x000D_
width: 64px;_x000D_
height: 64px;_x000D_
padding-right: 20px;_x000D_
margin-right: 10px;_x000D_
display: table-cell;_x000D_
}_x000D_
_x000D_
.home_4 {_x000D_
width: 350px;_x000D_
height: 64px;_x000D_
padding: 0px;_x000D_
vertical-align: middle;_x000D_
font-size: 150%;_x000D_
display: table-cell;_x000D_
}
_x000D_
<div class="container">_x000D_
<div class="row">_x000D_
<div class="home_1">Foo</div>_x000D_
<div class="home_2">Foo</div>_x000D_
<div class="home_3">Foo</div>_x000D_
<div class="home_4">Foo</div>_x000D_
</div>_x000D_
_x000D_
<div class="row">_x000D_
<div class="home_1">Foo</div>_x000D_
<div class="home_2">Foo</div>_x000D_
</div>_x000D_
</div>
_x000D_
Note that you have to have
border-collapse: separate;
Otherwise it will not work.
.row-seperator{
border-top: solid transparent 50px;
}
<table>
<tr><td>Section 1</td></tr>
<tr><td>row1 1</td></tr>
<tr><td>row1 2</td></tr>
<tr>
<td class="row-seperator">Section 2</td>
</tr>
<tr><td>row2 1</td></tr>
<tr><td>row2 2</td></tr>
</table>
#Outline
Section 1
row1 1
row1 2
Section 2
row2 1
row2 2
this can be another solution
Works - Add Spacing To Table
#options table {
border-spacing: 8px;
}
adding a br tag between the divs worked. add br tag between two divs that are display:table-row in a parent with display:table
The closest thing I've seen would be to set border-spacing: 0 30px;
to the container div. However, this just leaves me with space on the upper edge of the table, which defeats the purpose, since you wanted margin-bottom.
How's this for a work around (using an actual table)?
table {
border-collapse: collapse;
}
tr.row {
border-bottom: solid white 30px; /* change "white" to your background color */
}
It's not as dynamic, since you have to explicitly set the color of the border (unless there's a way around that too), but this is something I'm experimenting with on a project of my own.
Edit to include comments regarding transparent
:
tr.row {
border-bottom: 30px solid transparent;
}
Source: Stackoverflow.com