【发布时间】:2020-03-25 19:09:34
【问题描述】:
考虑以下 flex 布局:
body {
margin: 0;
}
.container {
background: red;
color: white;
height: 100vh;
display: flex;
}
.left {
flex-grow: 1;
height: 100%;
padding: 1em;
}
.main-content {
background: blue;
height: 130%;
}
.right {
height: 100%;
}
.side-content-upper {
padding: 1em;
height: 50%;
}
.side-content-lower {
padding: 1em;
height: 60%;
background: black;
}
<div class="container">
<div class="left">
<div class="main-content">some some some some some some some some some some some some some some some some some some some some some</div>
</div>
<div class="right">
<div class="side-content-upper">more</div>
<div class="side-content-lower">more</div>
</div>
</div>
由于.main-content 和.side-content-upper 的高度加上.side-content-lower 的高度大于100%,我们得到垂直溢出。现在让我们通过添加 box-sizing: border-box; overflow-y: scroll; 使第一列适合屏幕高度并单独滚动(为了使这更紧凑,我将未更改的 CSS 对齐为单行):
body { margin: 0; }
.container { background: red; color: white; height: 100vh; display: flex; }
.left {
flex-grow: 1;
height: 100%;
padding: 1em;
box-sizing: border-box;
overflow-y: scroll;
}
.main-content { background: blue; height: 130%; }
.right {
height: 100%;
}
.side-content-upper { padding: 1em; height: 50%; }
.side-content-lower { padding: 1em; height: 60%; background: black; }
<div class="container">
<div class="left">
<div class="main-content">some some some some some some some some some some some some some some some some some some some some some</div>
</div>
<div class="right">
<div class="side-content-upper">more</div>
<div class="side-content-lower">more</div>
</div>
</div>
工作正常,不是吗?现在让我们将相同的样式应用到.right 容器:
body { margin: 0; }
.container { background: red; color: white; height: 100vh; display: flex; }
.left {
flex-grow: 1;
height: 100%;
padding: 1em;
box-sizing: border-box;
overflow-y: scroll;
}
.main-content { background: blue; height: 130%; }
.right {
height: 100%;
box-sizing: border-box;
overflow-y: scroll;
}
.side-content-upper { padding: 1em; height: 50%; }
.side-content-lower { padding: 1em; height: 60%; background: black; }
<div class="container">
<div class="left">
<div class="main-content">some some some some some some some some some some some some some some some some some some some some some</div>
</div>
<div class="right">
<div class="side-content-upper">more</div>
<div class="side-content-lower">more</div>
</div>
</div>
如果您的屏幕分辨率不是太高,您会看到我没有预料到的情况:右列不仅适合高度并获得垂直滚动,还会缩小并获得水平滚动。这是为什么?看起来不仅仅是垂直滚动条的宽度:将.right 的overflow-y 从scroll 切换到hidden,您将再次得到.right 变形。我很困惑如何对此进行推理。以防万一,这就是我看到的hidden:
【问题讨论】: