CSS-常见两栏、三栏布局(双飞翼布局、圣杯布局)

1,269 阅读2分钟

两栏布局

左侧定宽,右侧自适应

1、右侧设置绝对定位将其从文档流中删除

//左侧
width:200px;
//右侧
position:absolute;
left:200px;

2、浮动法

不利于页面优化,右侧主要内容后加载

//左侧
float:left;
width:200px;
//右侧
无需设置

3、margin负值法

三栏布局

两边固定宽度,中间随浏览器自适应的布局

1、利用绝对定位

父元素设置position: relative;依此写mainleftrightmain设置左右margin值为左右div宽度rightleft均设置position: absolute; top: 0; width: XX; 以及分别right: 0left: 0

<div class="container">
    <div class="main"></div>
    <div class="left"></div>
    <div class="right"></div>
</div>
<style>
.container {
    position: relative;
}
.main {
    margin: 0 120px;
}
.left {
    position: absolute;
    width: 120px;
    left: 0;
    top: 0;
}
.right {
    position: absolute;
    width: 120px;
    right: 0;
    top: 0;
}
</style>

2、浮动法

依此写leftrightmainleft设置float: left; left: 0; width: xxright设置float: right; right: 0; width: xxmain设置左右margin值为左右div宽度,或者形成BFC,因为BFC区域不会与浮动元素重叠

缺点:主要内容模块无法最先加载,当页面中内容较多时会影响用户体验

<div class="container">
    <div class="left"></div>
    <div class="right"></div>
    <div class="main"></div> ## main放最后
</div>
<style>
.left {
    float: left;
    width: 100px;
}
.right {
    width: 200px;
    float: right;
}
.main {
    margin-left: 120px;
    margin-right: 220px;
}
## 或者 触发BFC,BFC区域不会与浮动元素重叠
.main {
    overflow: hidden;
}
</style>

3、双飞翼布局(利用浮动并且main先渲染,margin负值法)

出自淘宝前端UED团队,它将内容比作鸟的身体,左右比作双翼,所以叫作双飞翼

原理:内容div里再嵌套一个div,全部向左浮动,内容div的margin为左右div预留位置,左右div只设置margin负值即可实现。与圣杯布局相比,少了position:relative,多了一个div。

考点是margin的负值:margin 的left, top, right, bottom设置负值的分别作用

  • margin-left 和 margin-top 会使元素向左和向上移动
  • margin-right 和 margin-bottom 会使自身在布局中所占的位置减少, 使右边的元素或下边的元素向自身移动
<div class='content'>## main外包一层div
    <div class='main'></div>
</div>
<div class='left'></div>
<div class='right'></div>

<style>
.content{
    float:left;
    width:100%;
}
.main{
    margin-left:200px;## 左侧固定宽度
    margin-right:100px;## 右侧固定宽度
}
.left{
    float:left;
    width:200px;
    margin-left:-100%;##回到上一行
}
.right{
    float:left;
    width:100px;
    margin-left:-100px;##right的宽度
}
</style>

4、圣杯布局

圣杯是曾经用来接耶稣的血,所以被基督徒看作圣物,圣杯流传几千年了,好像到现在也没找到圣杯(西班牙疑似发现了,暂且不讨论),毕竟流传几千年了寻找起来比较困难,所以常常用它来比喻难以寻找的事物。三栏布局在web设计中,有很多解决方案但是每种方案都有缺点,所以业界对于完美解决三栏布局的方案称为圣杯布局

原理:设置内容、左、右全部往左浮动,父div的margin留出间距来,以放左、右div;然后在左、右通过margin-left和相对定位移动到要求位置。

<div class="container">
    <div class="main"></div>
    <div class="left"></div>
    <div class="right"></div>
</div>
<style>
.container{## 给左右侧预留宽度
    margin-left:220px;
    margin-right:120px;
}
.main{
    width:100%;
    float:left;
}
.left{
    float:left;
    width:200px;
    margin-left:-100%;##回到上一行 但紧挨main
    position:relative;
    left:-120px;
}
.right{
    float:left;
    width:100px;
    margin-left:-100px;
    position:relative;
    left:120px;
}
<style>

5、flex布局

 <div class="container">
    <div class="main"></div>
    <div class="left"></div>
    <div class="right"></div>
</div>
<style>
.container {
    display: flex;
}
.main {
    flex-grow: 1;
}
.left {
    order: -1;
    flex: 0 1 200px;
}
.right {
    flex: 0 1 100px;
}
</style>

参考

juejin.im/entry/68449… blog.csdn.net/wangjun5159…