1、作用
圣杯布局与双飞翼布局都是两边顶宽,中间自适应的三栏布局,中间栏要放在文档流前面以优先渲染。
2、区别
圣杯布局:将中间div设置左右padding-left和padding-right,且将左右两个div用相对布局position:relative以及left和right属性,使得左右两栏div不遮挡中间div。
双飞翼布局:直接在中间div内部创建子div用于放置内容,在该子div中使用margin-left和margin-right为左右两栏div空出位置。
3、代码实现
1)圣杯布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Test</title>
<style>
* {
margin: 0;
padding: 0;
}
#header {
height: 50px;
background-color: #aaaaaa;
text-align: center;
}
#body {
padding: 0 200px 0 180px;
height: 100px;
}
#middle {
float: left;
width: 100%;
height: 100px;
background-color: red;
}
#left {
float: left;
width: 180px;
height: 100px;
margin-left: -100%;
background-color: blue;
position: relative;
left: -180px;
}
#right {
float: left;
width: 200px;
height: 100px;
margin-left: -200px;
background-color: blue;
position: relative;
right: -200px;
}
#footer {
height: 50px;
background-color: #aaaaaa;
text-align: center;
}
</style>
</head>
<body>
<div id="header">header</div>
<div id="body">
<div id="middle">middle</div>
<div id="left">left</div>
<div id="right">right</div>
</div>
<div id="footer">footer</div>
<script>
</script>
</body>
</html>
2)双飞翼布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Test</title>
<style>
* {
margin: 0;
padding: 0;
}
#header {
height: 50px;
background-color: #aaaaaa;
text-align: center;
}
#middle {
float: left;
width: 100%;
height: 100px;
background-color: red;
}
#inside {
margin: 0 200px 0 180px;
height: 100px;
}
#left {
float: left;
width: 180px;
height: 100px;
margin-left: -100%;
background-color: blue;
}
#right {
float: left;
width: 200px;
height: 100px;
margin-left: -200px;
background-color: blue;
}
#footer {
clear: both;
height: 50px;
background-color: #aaaaaa;
text-align: center;
}
</style>
</head>
<body>
<div id="header">header</div>
<div id="middle">
<div id="inside">middle</div>
</div>
<div id="left">left</div>
<div id="right">right</div>
<div id="footer">footer</div>
<script>
</script>
</body>
</html>