以下是我用来实现上述布局的代码:

.header { height: 50px; } .body { position: absolute; top: 50px; right: 0; bottom: 0; left: 0; display: flex; } .sidebar { width: 140px; } .main { flex: 1; display: flex; flex-direction: column; } .content { flex: 1; display: flex; } .column { padding: 20px; border-right: 1px solid #999; } <div class="header">Main header</div> <div class="body"> <div class="sidebar">Sidebar</div> <div class="main"> <div class="page-header">Page Header. Content columns are below.</div> <div class="content"> <div class="column">Column 1</div> <div class="column">Column 1</div> <div class="column">Column 1</div> </div> </div> </div>

我省略了用于样式化的代码。你可以在笔里看到所有这些。


上述方法是有效的,但是当内容区域的内容溢出时,会导致整个页面滚动。我只想让内容区域本身滚动,所以我在内容div中添加了overflow: auto。

现在的问题是,列本身并没有超出它们的父高度,所以边界也在那里被切断了。

这支笔显示了滚动问题。

如何将内容区域设置为独立滚动,同时仍然让其子区域超出内容框的高度?


当前回答

经过多次尝试和错误,我刚刚非常优雅地解决了这个问题。

看看我的博客文章:http://geon.github.io/programming/2016/02/24/flexbox-full-page-web-app-layout

基本上,要使一个flexbox单元格可滚动,你必须让它所有的父单元格overflow: hidden;,否则它会忽略你的溢出设置,而让父单元格变大。

其他回答

这个问题的解决方案是添加overflow: auto;到.content,使内容包装器可滚动。

此外,在Flexbox包装器和溢出可滚动内容时,也会出现类似这种情况。

解决方案是添加overflow: hidden(或auto);到围绕大内容的包装器的父类(使用overflow: auto;设置)。

经过多次尝试和错误,我刚刚非常优雅地解决了这个问题。

看看我的博客文章:http://geon.github.io/programming/2016/02/24/flexbox-full-page-web-app-layout

基本上,要使一个flexbox单元格可滚动,你必须让它所有的父单元格overflow: hidden;,否则它会忽略你的溢出设置,而让父单元格变大。

下面粗体的CSS更改(加上列中的一堆内容以测试滚动)将工作。好吧,它使每个内容列都可以单独滚动,这可能比最初要求的更多(更好?)不管怎样,看看这支笔的结果吧。

.content {flex: 1;显示:flex;身高:1 px;} .column {padding: 20px;右边框:1px实体#999;溢出: 汽车;}

这里的技巧似乎是,可滚动面板需要在某个地方设置高度(在本例中,通过其父),而不仅仅是由flexbox决定。等高1px也可以。flex-grow:1仍然将面板大小适当地适应。

.list-wrap {
  width: 355px;
  height: 100%;
  position: relative;

  .list {
    position: absolute;
    top: 0;
    bottom: 0;
    overflow-y: auto;
    width: 100%;
  }
}

工作位置:绝对;与flex一起:

使用Position: relative定位伸缩项。然后在它内部,添加另一个<div>元素:

position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;

这将元素扩展到其相对位置的父元素的边界,但不允许对其进行扩展。内部,溢出:自动;然后将按预期工作。

.all-0 { top: 0; bottom: 0; left: 0; right: 0; } p { text-align: justify; } .bottom-0 { bottom: 0; } .overflow-auto { overflow: auto; } <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" rel="stylesheet" /> <div class="p-5 w-100"> <div class="row bg-dark m-0"> <div class="col-sm-9 p-0 d-flex flex-wrap"> <!-- LEFT-SIDE - ROW-1 --> <div class="row m-0 p-0"> <!-- CARD 1 --> <div class="col-md-8 p-0 d-flex"> <div class="my-card-content bg-white p-2 m-2 d-flex flex-column"> <img class="img img-fluid" src="https://via.placeholder.com/700x250"> <h4>Heading 1</h4> <p> Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old... </div> </div> <!-- CARD 2 --> <div class="col-md-4 p-0 d-flex"> <div class="my-card-content bg-white p-2 m-2 d-flex flex-column"> <img class="img img-fluid" src="https://via.placeholder.com/400x250"> <h4>Heading 1</h4> <p> Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old... </div> </div> </div> <div class="row m-0"> <!-- CARD 3 --> <div class="col-md-4 p-0 d-flex"> <div class="my-card-content bg-white p-2 m-2 d-flex flex-column"> <img class="img img-fluid" src="https://via.placeholder.com/400x250"> <h4>Heading 1</h4> <p> Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old... </div> </div> <!-- CARD 4 --> <div class="col-md-4 p-0 d-flex"> <div class="my-card-content bg-white p-2 m-2 d-flex flex-column"> <img class="img img-fluid" src="https://via.placeholder.com/400x250"> <h4>Heading 1</h4> <p> Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old... </div> </div> <!-- CARD 5--> <div class="col-md-4 p-0 d-flex"> <div class="my-card-content bg-white p-2 m-2 d-flex flex-column"> <img class="img img-fluid" src="https://via.placeholder.com/400x250"> <h4>Heading 1</h4> <p> Contrary to popular belief, Lorem Ipsum is not simply random text. It has roots in a piece of classical Latin literature from 45 BC, making it over 2000 years old... </div> </div> </div> </div> <div class="col-sm-3 p-0"> <div class="bg-white m-2 p-2 position-absolute all-0 d-flex flex-column"> <h4>Social Sidebar...</h4> <hr /> <div class="d-flex overflow-auto"> <p> Topping candy tiramisu soufflé fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halva fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. opping candy tiramisu soufflé fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halva fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. opping candy tiramisu soufflé fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halva fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halvafruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halvafruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halvafruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halvafruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Topping candy tiramisu soufflé fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halva fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. opping candy tiramisu soufflé fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halva fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. opping candy tiramisu soufflé fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halva fruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halvafruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halvafruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halvafruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halvafruitcake ice cream chocolate bar. Bear claw ice cream chocolate bar donut sweet tart. Pudding cupcake danish apple pie apple pie. Halva </div> </div> </div> </div>

最终结果:

CodePen链接