为什么div带有“ display:table-cell;” 不受保证金影响吗?


211

我有div彼此相邻的元素display: table-cell;

我想margin在它们之间设置,但是margin: 5px没有效果。为什么?

我的代码:

<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:


310

原因

MDN文档中

[margin属性]适用于除表标题,表和内联表以外的其他表显示类型的元素以外的所有元素

换句话说,该margin物业是适用display:table-cell的元素。

考虑border-spacing改为使用该属性。

请注意,应将其应用于具有display:table布局和的父元素border-collapse:separate

例如:

的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;}

参见jsFiddle演示


水平和垂直的边距不同

正如迭戈·基洛斯(DiegoQuirós)所述,该border-spacing属性还接受两个值来为水平轴和垂直轴设置不同的边距。

例如

.table {/*...*/border-spacing:3px 5px;} /* 3px horizontally, 5px vertically */

6
谢谢!如果水平和垂直空间需要不同的边框间距,则也有此表示法。
DiegoQuirós2014年

我以为我发现了一个错误;原来我需要学习更多CSS。
皮特·阿尔文

我想这并不能真正处理特定的左/右/上/下边距?而且没有办法让特定的表格单元格与其他表格具有不同的填充吗?
内森

像往常一样,padding可以为任何必要的选择器(例如,类或ID)设置@Nathan 。如果margin在单元格之间表示,则可以通过将两个值设置为来分别为垂直轴和水平轴设置该值border-spacing,但是它将应用于整个表格,而不是单个单元格。
波阿斯

21

您可以使用内部div设置边距。

<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>

JS小提琴


2
如果您要在单元格之间留出边距而不是在它们的左边或右边留出余地,这是一个好主意。然后您的CSS可能类似于.inner-div { margin-right: 5px; } .outer-cell:last-child .inner-div { margin-right: 0; }。但也请注意此陷阱:此示例的红色和绿色背景的高度不一定匹配,因为它们不在单元格上。
Henrik N

8

表格单元格不考虑边距,但是您可以改用透明边框:

div {
  display: table-cell;
  border: 5px solid transparent;
}

注意:您不能在此处使用百分比... :(


2

如果您有div这样彼此相邻

<div id="1" style="float:left; margin-right:5px">

</div>
<div id="2" style="float:left">

</div>

这应该工作!


10
好的,但是如果他要两个等高的div怎么办?浮动无法做到这一点。
hieroshima 2014年

这就是JS很棒的原因:)
克里斯·

@ChrisHappy如果有CSS解决方案,请不要使用JavaScript。您的代码只会变得庞大。
ssc-hrep3

@ ssc-hrep3由于需要响应能力,因此笨拙的CSS解决方案已不再足够...
Chris Happy

2
它们足够了-特别是在响应要求方面。只需看一下现在大多数主流浏览器都支持的flexbox,就可以轻松解决此确切问题。布局样式绝对不能由JavaScript完成。
ssc-hrep3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.