【发布时间】:2019-11-02 08:50:51
【问题描述】:
我正在使用 flexbox 的 justify-content: space-between; 开发一个网格系统,我注意到在某些屏幕尺寸(大约每隔一个像素)上,某些列的末尾会出现 1 个像素的间隙。
如果您开始使用以下示例调整浏览器大小,您会看到 1 个像素的空间出现和消失。
示例
* {
margin: 0;
padding: 0;
}
.row {
display: flex;
flex-wrap: wrap;
max-width: 550px;
width: 100%;
margin: 0 auto;
border: 2px solid #888;
justify-content: space-between;
}
div[class^="col"] {
border: 2px solid red;
}
.col-12 {
flex-basis: calc(100% - 4px);
}
.col-11 {
flex-basis: calc(11/12*100% - (1.167 - 11/12)*24px);
}
.col-10 {
flex-basis: calc(5/6*100% - (1.167 - 5/6)*24px);
}
.col-9 {
flex-basis: calc(3/4*100% - (1.167 - 3/4)*24px);
}
.col-8 {
flex-basis: calc(2/3*100% - (1.167 - 2/3)*24px);
}
.col-7 {
flex-basis: calc(7/12*100% - (1.167 - 7/12)*24px);
}
.col-6 {
flex-basis: calc(1/2*100% - (1.167 - 1/2)*24px);
}
.col-5 {
flex-basis: calc(5/12*100% - (1.167 - 5/12)*24px);
}
.col-4 {
flex-basis: calc(1/3*100% - (1.167 - 1/3)*24px);
}
.col-3 {
flex-basis: calc(1/4*100% - (1.167 - 1/4)*24px);
}
.col-2 {
flex-basis: calc(1/6*100% - (1.167 - 1/6)*24px);
}
.col-1 {
flex-basis: calc(1/12*100% - (1.167 - 1/12)*24px);
}
<div class="row">
<div class="col-12">col-12</div>
<div class="col-6">col-6</div>
<div class="col-6">col-6</div>
<div class="col-4">col-4</div>
<div class="col-4">col-4</div>
<div class="col-4">col-4</div>
<div class="col-3">col-3</div>
<div class="col-3">col-3</div>
<div class="col-6">col-6</div>
<div class="col-3">col-3</div>
<div class="col-3">col-3</div>
<div class="col-3">col-3</div>
<div class="col-3">col-3</div>
<div class="col-4">col-4</div>
<div class="col-8">col-8</div>
<div class="col-7">col-7</div>
<div class="col-5">col-5</div>
<div class="col-6">col-6</div>
<div class="col-4">col-4</div>
<div class="col-2">col-2</div>
</div>
这是一个可用的 Fiddle,因此您可以更轻松地调整它的大小。
*注意:
我知道我在用calc() 做一些疯狂的事情,但即使你只是减去5px 而不是(1.167 - 1/12)*24px),问题仍然存在。
这是 flexbox 的错误吗?
我需要做什么才能消除这些列末尾的间隙?
【问题讨论】:
-
可能是亚像素舍入。
-
坦率地说,我认为使用 CSS-Grid 可能会更好
-
这是一个更好的选择@Paulie_D,但我需要支持
css-grid不支持的某些浏览器。 -
没有确切的方法来避免使用 CSS 进行子像素舍入。要么让它们变成 1px 到宽以适应父级,然后使用
overflow: hidden,或者使用脚本,这样你就可以自己做数学,并确保四舍五入符合你的需要。