我有以下的工作布局。我想要一个垂直滚动条只适用于.gallery-items
元素。布局不能溢出.split-panel
容器
意外地,我发现将flex-direction: column
添加到.pane-2
会破坏布局。
问题是为什么会发生这种情况?
据我所知,如果只有一个子元素,flex-direction: row
和flex-direction: column
之间应该没有区别。
body {
margin: 0;
}
.split-panel {
height: 100vh;
display: flex;
flex-direction: column;
}
.pane-2 {
overflow: hidden;
display: flex;
/* flex-direction: column; */
}
.gallery {
display: flex;
flex-direction: column;
}
.gallery-items {
display: flex;
flex-wrap: wrap;
overflow-y: auto;
}
.item {
background: teal;
width: 200px;
height: 200px;
margin: 10px;
display: flex;
}
<div class="split-panel">
<div class="pane-1">Content</div>
<hr />
<div class="pane-2">
<div class="gallery">
<div class="toolbar">
<h1>Title</h1>
</div>
<div class="gallery-items">
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
</div>
</div>
</div>
</div>
因为列的方向是推动画廊元素的高度,以适应其内容。如果你显式地将它设置为100%,它就会工作。
body {
margin: 0;
}
.split-panel {
height: 100vh;
display: flex;
flex-direction: column;
}
.pane-2 {
overflow: hidden;
display: flex;
flex-direction: column;
}
.gallery {
display: flex;
flex-direction: column;
height: 100%; // <--------------------
}
.gallery-items {
display: flex;
flex-wrap: wrap;
overflow-y: auto;
}
.item {
background: teal;
width: 200px;
height: 200px;
margin: 10px;
display: flex;
}
<div class="split-panel">
<div class="pane-1">Content</div>
<hr />
<div class="pane-2">
<div class="gallery">
<div class="toolbar">
<h1>Title</h1>
</div>
<div class="gallery-items">
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
<div class="item">Item</div>
</div>
</div>
</div>
</div>