圣杯布局是一种相对布局,主体的中间栏要在浏览器中优先展示渲染
具体实现方法:
设置HTML基本DOM框架,mian为主体的中间栏
<!-- 主体 -->
<div class="container">
<div class="main">主体内容优先显示,所以将主体div写在开头</div>
<div class="left">左侧</div>
<div class="right">右侧</div>
</div>
设置基本的CSS样式
.container{
width:600px;
height:800px;
margin: 5px auto;
}
.container .main,.left,.right{
height: inherit;
}
.main{
width:inherit;
background-color: lightblue;
}
.left{
width: 200px;
background-color: lightcyan;
}
.right{
width: 200px;
background-color: lightgreen;
}
例如上面的样式,左右两个区块宽度都设置为200px,主体总宽度为1000px,扣去左右两个区块的宽度400px,中间区块设置为600px
将主体的三个区块修改为浮动:
.container .main,.left,.right{
float: left;
}
修改后的三个区块都在同一浮动层内,至此只要修改左边区块和右边区块到指定的位置就可以了
移动左边区块,先添加相对定位属性,再修改他的左外边距,令左区块移动到浮动层(.container .main,.left,.right)的开头
.left{
position: relative;
margin-left: -100%;
left: -200px;
}
负的margin-left会让元素沿文档流向左移动,如果负的数值比较大就会一直移动到上一行。
接着调整右边区块,也设置为相对定位并修改负的margin-left,使其向左移动
.right{
position: relative;
margin-left: -200px;
left: 200px;
}
这就完成了圣杯布局,主体区块的中间内容都会优先向用户展示,且无论浏览器的宽度有多窄,依然会显示中间区块的内容
实例
<!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>Document</title> <style> * { padding: 0%; margin: 0%; } .clear { clear: both; } .header { width: 100%; background-color: lightblue } .header .content { width: 1000px; height: 60px; margin: 0 auto; background: lightcoral; } .header .content .nav { list-style: none; } .header .content .nav a { text-decoration: none; color: lightgray; font-size: 1.2rem; min-width: 80px; min-height: 60px; line-height: 60px; text-align: center; float: left; padding: 0 15px; } .header .content .nav a:hover { background-color: #444; color: white; } .container{ width:600px; height:800px; margin: 5px auto; } .container .main,.left,.right{ height: inherit; float: left; } .main{ width: inherit; background-color: lightblue; } .left{ width: 200px; background-color: lightcyan; position: relative; margin-left: -100%; left: -200px; } .right{ width: 200px; background-color: lightgreen; position: relative; margin-left: -200px; left: 200px; } .footer { width: 100%; height: 60px; background-color: antiquewhite; } .footer .content p { text-align: center; line-height: 60px; background-color: azure; } .footer .content a { text-decoration: none; } .footer .content a:hover { text-decoration: underline; color: #444; } </style> </head> <body> <!-- 头部导航 --> <div class="header"> <div class="content"> <ul class="nav"> <li class="item"><a href="">首页</a></li> <li class="item"><a href="">公司新闻</a></li> <li class="item"><a href="">最新产品</a></li> <li class="item"><a href="">关于我们</a></li> </ul> </div> </div> <div class="clear"></div> <!-- 主体 --> <div class="container"> <div class="main">主体内容优先显示,所以将主体div写在开头</div> <div class="left">左侧</div> <div class="right">右侧</div> </div> <!-- 底部 --> <div class="footer"> <div class="content"> <p> <a href="">Copyright 2014-2018 http://www.php.cn/ All Rights Reserved</a> | <a href="">皖B2-20150071-9</a> </p> </div> </div> </body> </html>
运行实例 »
点击 "运行实例" 按钮查看在线实例
总结思考:
圣杯布局使用了绝对定位来调整区块位置,适当使用负边距可以让元素向左移动