圣杯布局
原理:
[css] 圣杯布局 双飞翼布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container{
width: 100%;
padding: 0 100px;
box-sizing: border-box;
}
.center{
width:100%;
min-height:100px;
background-color: rgb(129, 113, 221);
float: left;
}
.left{
width: 200px;
min-height: 100px;
background-color: rgb(175, 226, 133);
float: left;
margin-left: -100%;
position: relative;
left: -200px;
}
.right{
width: 100px;
min-height: 100px;
background-color: rgb(133, 226, 221);
float: left;
margin-left: -100px;
position: relative;
left: 100px;
}
</style>
</head>
<body>
<div class="container">
<div class="center">中</div>
<div class="left">左</div>
<div class="right">右</div>
</div>
</body>
</html>
calc
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>定位</title>
<style>
html,
body {
height: 100%;
overflow: hidden;
}
.container {
height: 100%;
}
.left,.right {
width: 200px;
min-height: 200px;
background: lightblue;
float: left;
}
.center {
width: calc(100% - 400px);
min-height: 200px;
background: lightsalmon;
float: left;
}
</style>
</head>
<body>
<div class="container">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
</div>
</body>
</html>
flex布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>flex布局</title>
<style>
html,
body{
overflow: hidden;
}
.container{
display: flex;
/*space-between:空白均匀分布到元素间*/
justify-content: space-between;
height: 100%;
}
.left,
.right{
/*flex:放大倍数 缩小倍数 占据大小*/
flex: 0 0 200px;
height: 200px;
background: lightblue;
}
.center{
/*flex:1 把剩余空间全都占据(自动分配占据空间)*/
flex: 1;
min-height: 200px;
background: lightsalmon;
}
</style>
</head>
<body>
<div class="container">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
</div>
</body>
</html>
定位方式布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>定位</title>
<style>
html,
body{
height: 100%;
overflow: hidden;
}
.container{
position: relative;
height: 100%;
}
.left,
.right{
position: absolute;
top: 0;
width: 200px;
min-height: 200px;
background: lightblue;
}
.left{
left: 0;
}
.right{
right: 0;
}
.center{
margin: 0 200px;
min-height: 200px;
background: lightsalmon;
}
</style>
</head>
<body>
<div class="container">
<div class="left"></div>
<div class="center"></div>
<div class="right"></div>
</div>
</body>
</html>
双飞翼布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container {
width: 100%;
height: 100px;
}
.center {
width: 100%;
height: 100px;
background-color: rgb(129, 113, 221);
float: left;
}
.center .center-inner{
height: 100px;
background-color: rgb(233, 162, 215);
margin: 0 200px;
}
.left {
width: 200px;
height: 100px;
background-color: rgb(175, 226, 133);
float: left;
margin-left: -100%;
}
.right {
width: 200px;
height: 100px;
background-color: rgb(133, 226, 221);
float: left;
margin-left: -200px;
}
</style>
</head>
<body>
<div class="container">
<div class="center">
<div class="center-inner">中间弹性区</div>
</div>
<div class="left">左边栏</div>
<div class="right">右边栏</div>
</div>
</body>
</html>
参考:
前端面试题 HTML5 CSS3(盒子模型、盒子水平垂直居中、经典布局) JS(闭包、深浅克隆、数据劫持和拦截) 算法(排序、去重、数组扁平化) Vue(双向数据绑定原理、通信方式)