I have div
elements next to each other with display: table-cell;
.
I want to set margin
between them, but margin: 5px
has no effect. Why?
My code:
<div style="display: table-cell; margin: 5px; background-color: red;">1</div> <div style="display: table-cell; margin: 5px; background-color: green;">1</div>
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Cause
From the MDN documentation:
[The margin property] applies to all elements except elements with
table display types other than table-caption, table and inline-table
In other words, the margin
property is not applicable to display:table-cell
elements.
Solution
Consider using the border-spacing
property instead.
Note it should be applied to a parent element with a display:table
layout and border-collapse:separate
.
For example:
HTML
<div class="table"> <div class="row"> <div class="cell">123</div> <div class="cell">456</div> <div class="cell">879</div> </div> </div>
CSS
.table {display:table;border-collapse:separate;border-spacing:5px;}
.row {display:table-row;}
.cell {display:table-cell;padding:5px;border:1px solid black;}
See jsFiddle demo
Different margin horizontally and vertically
As mentioned by Diego Quirós, the border-spacing
property also accepts two values to set a different margin for the horizontal and vertical axes.
For example
.table {/*...*/border-spacing:3px 5px;} /* 3px horizontally, 5px vertically */
Method 2
You can use inner divs to set the margin.
<div style="display: table-cell;"> <div style="margin:5px;background-color: red;">1</div> </div> <div style="display: table-cell; "> <div style="margin:5px;background-color: green;">1</div> </div>
Method 3
Table cells don’t respect margin, but you could use transparent borders instead:
div { display: table-cell; border: 5px solid transparent; }
Note: you can’t use percentages here… 🙁
Method 4
If you have div next each other like this
<div id="1" style="float:left; margin-right:5px"> </div> <div id="2" style="float:left"> </div>
This should work!
Method 5
I was also looking how to use display: table-cell;
(so to make equal height) and also have left-margin
. No proposed solutions worked for me. So I came to my dump workaround – I just added one more span with display: table-cell;
with width of the size required margin. Not elegant but it works.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0