为 div[display:table] 修复角单元格的单元格间距
Fixing cell-spacing for corner cells for div[display:table]
我正在为我的内部 css 框架开发一种基于 display: table
的网格方法,并且刚刚面临整个问题的关键问题。基本上,我希望我的布局看起来像这样:
这里的灰色区域应该来自 cell-spacing
属性。理想情况下,源代码应该是这样的,没有什么新发明:
<div class="unit">
<div class="one third"></div>
<div class="two thirds"></div>
</div>
我说的问题来了。事实上,cell-spacing
是为所有单元格定义的,并用固定边距将它们包裹起来。在我的例子中,我不希望它在相应的边包裹角单元格(例如,所以左上角的单元格不会在顶部和左侧产生间距)。我想到的第一个明显的解决方案是使用负边距:
.unit {
display: table;
box-sizing: border-box;
position: relative;
width: 100%;
overflow: auto;
border-spacing: 0.2em;
margin: -0.2em;
}
不幸的是,这没有按预期工作。它确实删除了左上角的间距,但保留了右上角的间距。有解决这个问题的想法吗?
你的方法不错,问题是table不够宽。您可以使用 calc
:
修复它
width: calc(100% + 2*0.2em);
然后,table 将比其包含块更宽。但这不是什么大问题,因为单元格会因为负边距而正确定位。你只需要在容器中添加overflow: hidden
。
.wrapper {
overflow: hidden;
}
.unit {
display: table;
overflow: auto;
background: #aaa;
border-spacing: 2em;
margin: -2em;
width: 100%; /* fallback */
width: calc(100% + 2*2em);
}
.unit > * {
display: table-cell;
border: 2px solid;
background: #fff;
}
<div class="wrapper">
<div class="unit">
<div class="one third">a</div>
<div class="two thirds">b</div>
</div>
</div>
我正在为我的内部 css 框架开发一种基于 display: table
的网格方法,并且刚刚面临整个问题的关键问题。基本上,我希望我的布局看起来像这样:
cell-spacing
属性。理想情况下,源代码应该是这样的,没有什么新发明:
<div class="unit">
<div class="one third"></div>
<div class="two thirds"></div>
</div>
我说的问题来了。事实上,cell-spacing
是为所有单元格定义的,并用固定边距将它们包裹起来。在我的例子中,我不希望它在相应的边包裹角单元格(例如,所以左上角的单元格不会在顶部和左侧产生间距)。我想到的第一个明显的解决方案是使用负边距:
.unit {
display: table;
box-sizing: border-box;
position: relative;
width: 100%;
overflow: auto;
border-spacing: 0.2em;
margin: -0.2em;
}
不幸的是,这没有按预期工作。它确实删除了左上角的间距,但保留了右上角的间距。有解决这个问题的想法吗?
你的方法不错,问题是table不够宽。您可以使用 calc
:
width: calc(100% + 2*0.2em);
然后,table 将比其包含块更宽。但这不是什么大问题,因为单元格会因为负边距而正确定位。你只需要在容器中添加overflow: hidden
。
.wrapper {
overflow: hidden;
}
.unit {
display: table;
overflow: auto;
background: #aaa;
border-spacing: 2em;
margin: -2em;
width: 100%; /* fallback */
width: calc(100% + 2*2em);
}
.unit > * {
display: table-cell;
border: 2px solid;
background: #fff;
}
<div class="wrapper">
<div class="unit">
<div class="one third">a</div>
<div class="two thirds">b</div>
</div>
</div>