圣杯布局和双飞翼布局都是常用的响应式网页布局方式。
圣杯布局是一种三列布局,中间列为主要内容,左右两列为侧边栏。这种布局的优点是可以让主要内容在HTML结构中优先加载,有利于搜索引擎优化(SEO),同时也可以使用相对定位和负边距来实现等高的三列布局。但是,圣杯布局也存在一些问题,例如在使用浮动时可能会遇到元素重叠的问题,需要进行一些额外的处理。
上面就是使用圣杯布局简单的完成的效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
margin: 0;
padding: 0;
font-size: 25px;
text-align: center;
}
header,
footer {
height: 40px;
width: 100%;
background: skyblue;
}
footer {
clear: both;
}
.wrapper {
padding: 0 300px 0 150px;
height: 100px;
}
.center {
float: left;
width: 100%;
height: 500px;
background: rgb(75, 71, 107);
}
.left {
float: left;
width: 150px;
height: 500px;
margin-left: -100%;
position: relative;
left: -150px;
background: rgb(251, 255, 192);
}
.right {
float: left;
width: 300px;
height: 500px;
margin-left: -300px;
position: relative;
right: -300px;
background: rgb(91, 211, 89);
}
</style>
</head>
<body>
<header>header</header>
<div class="wrapper">
<div class="center">center</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
<footer>footer</footer>
</body>
</html>
上面这是代码,为了让中间div内容不被遮挡,将中间div设置了左右padding-left和padding-right后,将左右两个div用相对布局position: relative并分别配合right和left属性,以便左右两栏div移动后不遮挡中间div。
双飞翼布局可以看作是对圣杯布局的改进,它也是一种三列布局,同样有主要内容和两个侧边栏。与圣杯布局不同的是,双飞翼布局使用了更简单的CSS结构来实现等高的三列布局,同时还能够保证主要内容在HTML结构中的优先加载。这种布局的主要思路是通过负边距和内边距来实现左右两列的定位,并使用外边距来避免元素重叠的问题。
上面就是使用双飞翼简单的完成的效果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>10.双飞翼布局</title>
<style>
* {
margin: 0;
padding: 0;
}
.header {
background-color: cyan;
height: 10vh;
text-align: center;
}
.container {
background-color: gray;
overflow: hidden;
}
.container .column {
float: left;
height: 80vh;
}
.center {
width: 100%;
background-color: rgb(0, 255, 51);
text-align: center;
}
.left {
width: 300px;
background-color: #ff4d4f;
margin-left: -100%;
}
.right {
width: 200px;
background-color: #2e6da4;
margin-left: -200px;
}
.content {
margin-left: 300px;
margin-right: 200px;
}
.footer {
background-color: green;
height: 10vh;
text-align: center;
}
</style>
</head>
<body>
<div class="header">header</div>
<div class="container">
<div class="center column">
<div class="content">content</div>
</div>
<div class="left column">left</div>
<div class="right column">right</div>
</div>
<div class="footer">footer</div>
</body>
</html>
上面这是代码,为了让中间div内容不被遮挡,直接在中间div内部创建子div用于放置内容,在该div里用margin-left和margin-right为左右两栏div留出位置。
圣杯布局和双飞翼布局实现的效果都是相同的,只是在左右容器覆盖在中间容器中时,处理的容器不同而已。圣杯布局在处理左右容器,用相对定位时要注意左右平移的方向是相反的。双飞翼布局处理中间容器时要注意内层容器的内边距。