美文网首页CSS查漏补缺
三栏布局的实现方法

三栏布局的实现方法

作者: ALOLONGHUN | 来源:发表于2017-10-15 23:15 被阅读66次

对于三栏布局,大家应该很熟悉了,像淘宝等电商网站,亦或是某网站的后台管理系统,都有三栏布局的身影。如果你还不知道三栏布局是什么,可以先看下面这个效果图:

三栏布局

接下来,我会介绍六种三栏布局的实现方法,它们各有各的优点,当然也有其不足之处。

三栏布局——流体布局

// CSS
.left, .right, .center {
    height: 100vh;
}
.left {
    width: 200px;
    background: lightblue;
    float: left;
}
.right {
    width: 300px;
    background: yellowgreen;
    float: right;
}
.center {
    background: orangered;
    margin-left: 210px;
    margin-right: 310px; 
}   

// HTML
<div class="left"></div>
<div class="right"></div>
<div class="center"></div>

实现原理:左右边栏各自浮动,之后设置中间块的margin值,这样中间模块宽度就自适应了。
缺点:两侧内容先加载,主体内容后加载,当页面内容较多时会影响用户的体验。

三栏布局——BFC布局

// CSS
.left, .right, .center {
    height: 100vh;
}
.left {
    width: 200px;
    background: lightblue;
    float: left;
    margin-right: 10px;
}
.right {
    width: 300px;
    background: yellowgreen;
    float: right;
    margin-left: 10px;
}
.center {
    background: orangered;
    overflow: hidden;
}   

// HTML
<div class="left"></div>
<div class="right"></div>
<div class="center"></div>

实现原理:这种方式和流体布局差别很小,但是实现方式截然不同,这是利用了overflow: hidden;属性将中间模块转为BFC容器,利用BFC区域不会与浮动元素重叠这一特性,可以实现三栏布局。
缺点:同上。

三栏布局——Table布局

// CSS
.container {
    width: 100%;
    display: table;
}
.left, .center, .right {
    display: table-cell;
    height: 100vh;
}
.left {
    width: 200px;
    background: lightblue;
}
.center {
    background: orangered;
}
.right {
    width: 300px;
    background: yellowgreen;
}   

// HTML
<div class="container">
    <div class="left"></div>
    <div class="center"></div>
    <div class="right"></div>
</div>

实现原理:运用display: table-cell;这一特性,触发BFC特性,两边定宽,中间自动填满。
缺点:不能设置栏与栏之间的间距。

三栏布局——双飞翼布局

// CSS
.main {
    width: 100%;
    float: left;
}
.center, .left, .right {
    height: 100vh;
}   
.center {
    background: orangered;
    margin-left: 210px;
    margin-right: 310px;
}
.left {
    width: 200px;
    background: lightblue;
    float: left;
    margin-left: -100%;
}
.right {
    width: 300px;
    background: yellowgreen;
    float: right;
    margin-left: -300px;
}   

// HTML
<div class="main">
    <div class="center"></div>
</div>
<div class="left"></div>
<div class="right"></div>

实现原理:利用浮动元素margin的负值来实现三栏布局,但是主体内容可以优先加载。
缺点:HTML和CSS设置比较繁琐。

三栏布局——flex布局

// CSS
.container {
    width: 100%;
    display: flex;
}
.left, .center, .right {
    height: 100vh;      
}
.left {
    width: 200px;
    background: lightblue;
}
.center {
    flex-grow: 1;
    background: orangered;
    margin-left: 10px;
    margin-right: 10px;
}
.right {
    width: 300px;
    background: yellowgreen;
}   

// HTML
<div class="main">
    <div class="center"></div>
</div>
<div class="left"></div>
<div class="right"></div>

实现原理:flex弹性布局,其中的关键是flex-grow: 1;属性使中间模块占据剩余空间,实现三栏布局。
缺点:只兼容IE+以及现代浏览器。

三栏布局——绝对定位布局

// CSS
.container {
    position: relative;
}
.center, .left, .right {
    height: 100vh;
}
.center {
    margin-left: 210px;
    margin-right: 310px;
    background-color: lightblue;
}
.left {
    width: 200px;
    background-color: orangered;
    position: absolute;
    left: 0;
    top: 0;
}
.right {
    width: 300px;
    background-color: yellowgreen;
    position: absolute;
    right: 0;
    top: 0;
}   

// HTML
<div class="container">
    <div class="center"></div>
    <div class="left"></div>
    <div class="right"></div>
</div>

实现原理:与流体布局相似,但中间模块可以优先加载。

相关文章

  • CSS布局(不完全)总结

    CSS布局(不完全)总结 实现水平居中布局的几种方式 方法一: 通过以下CSS代码实现水平居中布局 方法二: 通过...

  • CSS 页面布局的方式

    1. 实现页面布局的方法 : 2. 三栏布局 绝对顶方法--代码 绝对顶方法--图例 弹性盒子方法--代码 弹性盒...

  • 2019-01-26

    一、总结一下CSS的几种布局以及实现方法 左右布局 左中右 水平居中 垂直居中 1. 左右布局 左右布局很多种实现...

  • 对字符串的操作

    实现效果图如下: 实现方法: 方法一:可以放两个label,设置布局 方法二:用UITextView实现 准备两个...

  • 常见CSS布局

    左右布局 左中右布局 水平居中 垂直居中 - 左右布局 方法1:利用float实现左右布局 给所有子元素加 flo...

  • RecylerView(二)设置布局管理器LayoutManag

    设置布局管理器方法,实现RecylerView布局里面的内容显示方式; recyclerView.setLayou...

  • UICollectionViewLayout自定义布局学习(一)

    一、基本方法 如果您的布局不支持补充视图或装饰视图,则不要实现相应的方法。因此最基本的自定义布局必须实现1、2、3...

  • UIButton按钮文字图片任意布局

    实现方法 重写下面两个方法,返回正确的布局即可。 - (CGRect)titleRectForContentRec...

  • Android clipChild属性应用

    如果我们要实现这个布局,一般都是用相对布局RelativeLayout来实现,但是有个更简单的多的方法。 clip...

  • 动态布局实现方法

    1.Native 体验好,但不够灵活。新功能需要发版。 2.H5 灵活性好,部署快,但体验不佳,转化率较Nativ...

网友评论

    本文标题:三栏布局的实现方法

    本文链接:https://www.haomeiwen.com/subject/crxhuxtx.html