【发布时间】:2021-09-06 16:06:14
【问题描述】:
我正在努力让我的 flexbox 布局根据需要滚动。我的要求是:
- 固定大小的容器
- 固定页眉和页脚
- 表格水平滚动
- 表格正文垂直滚动
我希望只定义以下尺寸:
- 容器宽度/高度
- 单元格宽度
- 单元格内容高度(下面小提琴中的蓝色方块)。
这是可能的还是我需要定义更多的宽度/高度?在小提琴中,我还注意到当表格水平滚动时,背景颜色会丢失。如何保存?小提琴链接:
https://jsfiddle.net/talbot82/83wrktvb/6/
HTML:
<div id="container">
<div id="header">Header</div>
<div id="table">
<div id="tableHeader">
<div class="tableCell">Column1</div>
<div class="tableCell">Column2</div>
<div class="tableCell">Column3</div>
<div class="tableCell">Column4</div>
</div>
<div id="tableBody">
<div class="tableRow">
<div class="tableCell">
<div class="fixedSize"></div>
</div>
<div class="tableCell"></div>
<div class="tableCell"></div>
<div class="tableCell"></div>
</div>
<div class="tableRow">
<div class="tableCell">
<div class="fixedSize"></div>
</div>
<div class="tableCell"></div>
<div class="tableCell"></div>
<div class="tableCell"></div>
</div>
<div class="tableRow">
<div class="tableCell">
<div class="fixedSize"></div>
</div>
<div class="tableCell"></div>
<div class="tableCell"></div>
<div class="tableCell"></div>
</div>
<div class="tableRow">
<div class="tableCell">
<div class="fixedSize"></div>
</div>
<div class="tableCell"></div>
<div class="tableCell"></div>
<div class="tableCell"></div>
</div>
<div class="tableRow">
<div class="tableCell">
<div class="fixedSize"></div>
</div>
<div class="tableCell"></div>
<div class="tableCell"></div>
<div class="tableCell"></div>
</div>
</div>
</div>
<div id="footer">Footer</div>
</div>
CSS:
#container {
width: 400px;
height: 200px;
display: flex;
flex-direction: column;
}
#header, #footer {
background-color: #666;
}
#table {
overflow-x: scroll;
overflow-y: hidden;
}
#tableHeader {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
background-color: #AAA;
}
#tableBody {
display: flex;
flex-direction: column;
overflow-y: scroll;
}
.tableRow {
display: flex;
flex-direction: row;
flex-wrap: nowrap;
background-color: #DDD;
}
.tableCell {
padding: 4px;
width: 300px;
flex-shrink: 0;
border: solid 1px black;
}
.fixedSize {
width: 40px;
height: 40px;
background-color: blue;
}
【问题讨论】: