上一篇写了双飞翼布局,这篇我就写下他的兄弟圣杯布局吧~ 圣杯布局也是实现三栏布局的方法,左右定宽,中间自适应,中间内容优先加载。 最原始的圣杯布局是通过负边距、左浮动、相对定位、内边距实现的,然后我在实践中也发现了另外两种实现方式,分别是通过怪异盒模型和flex布局
HTML
HTML结构都是相同的,我先放在这里
<body>
<div class="container">
<div class="main">main</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
</body>
####CSS 我们先看下最祖先的方式吧 通过负边距、左浮动、相对定位、内边距实现 1.首先给main一个100%宽度,left和right分别给一个固定的宽度,三者高度和父盒子一样高,都实现左浮动 效果如下,由于main宽度已经撑满了整个父盒子,left和right被挤到父盒子下面




完整的CSS
/* 使用浮动、负边距、内边距、相对定位实现 */
.container {
height: 300px;
background-color: black;
overflow: hidden;
padding: 0 200px;
min-width: 800px;
}
.main {
width: 100%;
height: 300px;
background-color: blue;
float: left;
}
.left {
width: 200px;
height: 300px;
background-color: pink;
float: left;
margin-left: -100%;
position: relative;
left: -200px;
}
.right {
width: 300px;
height: 300px;
background-color: red;
float: left;
margin-left: -300px;
position: relative;
right: -300px;
}
其他两种方式
怪异盒模型
使用怪异盒模型的区别就是这里不需要用定位,在mian上加padding替代container上的padding,然后将mian修改为怪异盒模型 box-sizing: border-box,我试了下效果是一样滴
/* 使用浮动、负边距、内边距、怪异盒模型实现 */
.container {
height: 300px;
background-color: black;
overflow: hidden;
min-width: 800px;
}
.main {
width: 100%;
height: 300px;
background-color: blue;
float: left;
padding: 0 300px 0 200px;
box-sizing: border-box;
}
.left {
width: 200px;
height: 300px;
background-color: pink;
float: left;
margin-left: -100%;
}
.right {
width: 300px;
height: 300px;
background-color: red;
float: left;
margin-left: -300px;
}
flex
这个不得了了,什么浮动、内边距、外边距、怪异盒模型统统都不要🙅,一个flex搞定,给父盒子一个display:flex,left和right给固定的宽度,main来个flex:1自适应,给left盒子一个order:-1,让他排在最左边,毕竟html结构我们是不能改变滴。
/* 使用弹性盒模型实现圣杯模型 */
.container {
height: 300px;
background-color: black;
overflow: hidden;
min-width: 800px;
display: flex;
}
.main {
flex: 1;
height: 300px;
background-color: blue;
}
.left {
width: 200px;
height: 300px;
background-color: pink;
order: -1;
}
.right {
width: 300px;
height: 300px;
background-color: red;
}
OKK,bye~