使用flex固定头部和底部中间滚动
关键点:
- root纵向布局高度充满整个浏览器界面并且隐藏滚动条
- content设置滚动,flex设置1,否则当所有item的高度太小时footer会离开底部
- item设置高度后,必须设置flexShrink为0,否则当所有item高度超过content高度时item会被压缩掉
‘100vh’浏览器视口高度的百分比,这里是100%;
flex为1其他元素为0时(默认为0),当有多余空间时会被flex为1的元素侵占;
flexShrink为0,当空间被压缩时flexShrink为0的元素不被压缩;
代码如下:
class App extends React.Component {
render() {
const items = [1, 2, 3, 4, 5, 6, 7]
return (
<div style={Style.root}>
<div style={Style.head}>head</div>
<div style={Style.content}>
{items.map((item, index) => {
return <div key={index} style={Style.item}>{item}</div>
})}
</div>
<div style={Style.footer}>footer</div>
</div>
)
}
}
const Style = {}
Style.root = {
display: 'flex',
flexDirection: 'column',
height: '100vh',
overflowY: 'hidden'
}
Style.head = {
height: 80,
backgroundColor: '#ccc',
}
Style.footer = {
height: 80,
backgroundColor: '#ccc',
}
Style.content = {
display: 'flex',
flexDirection: 'column',
flex: 1,
overflowY: 'scroll'
}
Style.item = {
display: 'flex',
height: 200,
flexShrink: 0,
backgroundColor: 'rgb(232, 128, 36)',
margin: 10
}
export default App;