主要特点
- 保持充满整个窗口
- 滚动条往往控制局部区域
需求
顶栏和低栏是定高的,整体的宽度是自适应的,中间的主内容去,侧边栏定宽,内容区自适应。
实现方案一:Position
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>全屏布局position</title>
<style type="text/css">
html,body,.parent{height: 100%;overflow: hidden;}
div{border: 1px solid black;}
.top{position: absolute;top: 0;right: 0;left: 0;height: 100px;}
.left{position:absolute;top:100px;bottom: 50px;left:0;width: 200px;}
.right{position: absolute;left: 200px;top: 100px;bottom: 50px;right: 0;overflow: auto;}
.inner{height: 1000px}
.bottom{position: absolute;bottom: 0;height: 50px;left: 0;right:0;}
</style>
</head>
<body>
<div class="parent">
<div class="top">top</div>
<div class="left">left</div>
<div class="right">
<div class="inner"></div>
</div>
<div class="bottom">bottom</div>
</div>
</body>
</html>
解决方案二:flex
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>全屏布局flex</title>
<style type="text/css">
html,body,.parent{height: 100%;overflow: hidden;}
div{border:1px solid black;}
.parent{display: flex;flex-direction: column;}
.top{height:100px;}
.bottom{height: 50px;}
.middle{flex:1;display: flex;}
.left{width: 200px;}
.right{flex: 1;overflow: auto;}
.inner{height: 1000px;}
</style>
</head>
<body>
<div class="parent">
<div class="top"></div>
<div class="middle">
<div class="left"></div>
<div class="right">
<div class="inner"></div>
</div>
</div>
<div class="bottom"></div>
</div>
</body>
</html>
需求改变
让之前定宽,定高的区域变为自适应的,由内容所决定
实现方案flex
显然的,position是没法解决的,而由于flex的优良特性,我们只需要将之前的属性去掉即可
html,body,.parent{height: 100%;overflow: hidden;}
div{border:1px solid black;}
.parent{display: flex;flex-direction: column;}
.middle{flex:1;display: flex;}
.right{flex: 1;overflow: auto;}
.inner{height: 1000px;}
总结
方案 | 兼容性 | 性能 | 自适应 |
---|---|---|---|
position | 好(hack兼容) | 好 | 部分自适应 |
flex | 较差(ie低版本不兼容) | 差 | 可自适应 |
grid | 差(目前还是草案) | 较好 | 可自适应 |