圣杯布局是一种相对布局,主体的中间栏要在浏览器中优先展示渲染
具体实现方法:
设置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>点击 "运行实例" 按钮查看在线实例
总结思考:
圣杯布局使用了绝对定位来调整区块位置,适当使用负边距可以让元素向左移动
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号