【发布时间】:2019-01-07 20:26:08
【问题描述】:
我想用 flexbox 制作一个可滚动的表格。
具有静态尺寸的表格必须适合固定尺寸的视口。
基本上是这样的:
<div class="container" style="width: x; height: y; overflow: scroll">
<div data-row="1">
<div data-column="1"></div>
<div data-column="2"></div>
<div data-column="3"></div>
</div>
<div data-row="2">
<div data-column="1"></div>
<div data-column="2"></div>
<div data-column="3"></div>
</div>
<div data-row="3">
<div data-column="1"></div>
<div data-column="2"></div>
<div data-column="3"></div>
</div>
</div>
这是我目前所拥有的:
#viewport {
border: 1px solid black;
overflow: auto;
width: 350px;
}
#content {
#position: relative;
overflow: hidden;
}
.cell {
display: flex;
flex-shrink: 0;
flex-grow: 0;
flex-wrap: nowrap;
overflow: hidden;
box-sizing: border-box;
}
.column {
width: 200px;
height: 100px;
}
.row {
display: flex;
flex-direction: row;
overflow: hidden;
border: 1px solid black;
#overflow-x: scroll;
overflow: visible;
box-sizing: border-box;
}
.viewport {
display: flex;
flex-direction: column;
width: 300px;
height: 500px;
overflow: scroll;
flex-wrap: wrap;
#flex-wrap: nowrap;
box-sizing: border-box;
flex-basis: 0;
}
<div class="viewport"><!--
--><div class="row"><!--
--><div class="cell column" style="background-color: red;"></div><!--
--><div class="cell column" style="background-color: green;"></div><!--
--><div class="cell column" style="background-color: blue;"></div><!--
--><div class="cell column" style="background-color: hotpink;"></div><!--
--></div><!--
--><div class="row"><!--
--><div class="cell column" style="background-color: red;"></div><!--
--><div class="cell column" style="background-color: green;"></div><!--
--><div class="cell column" style="background-color: blue;"></div><!--
--><div class="cell column" style="background-color: hotpink;"></div><!--
--></div><!--
--></div>
但这给了我奇怪的空白。
但仅在 Chrome 和 IE11 中 - 在 Firefox 和 Edge 中可以正常工作。
如果我删除 .viewport 上的 flex-wrap,我会在 Edge 和 Firefox 中遇到同样的问题。
另外,我真的不希望 .viewport 上的 flex-wrap 。
到目前为止,我一直无法弄清楚问题所在。
这种废话让我发疯。有人有想法吗?
【问题讨论】:
-
你检查过浏览器的默认样式吗?也许某处是继承的边距。
-
这对我来说并不奇怪..这些是边框的空间,你的元素溢出了
-
我知道,但这不是问题.. 元素在另一个带边框的元素内并且它们正在溢出,因此外部元素停止并且内部元素继续。所以边界的空间被保留了
-
这看起来像
border+overflow问题,正如@TemaniAfif 所提到的(以及浏览器渲染变化)。background-color+overflow也存在类似的问题,正如我在这里介绍的:Make background color extend into overflow area。 -
@Michael_B 你是对的,对不起。但是为什么不给行
width: 802px;,因为所有尺寸都是静态的?