zoukankan      html  css  js  c++  java
  • 转载:CSS实现三栏布局的四种方法示例

    转载网址:http://www.jb51.net/css/529846.html

    前言

    其实不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那某一种方法,本文具体的介绍了三栏布局的四种方法,并介绍了它的使用场景。

    所谓三栏布局就是指页面分为左中右三部分然后对中间一部分做自适应的一种布局方式。

    1.绝对定位法

    HTML代码如下:

    <div class="left">Left</div>
    <div class="main">Main</div>
    <div class="right">Right</div>
    CSS代码如下:
    //简单的进行CSS reset
    body,html{
        height:100%;
        padding: 0px;
        margin:0px;
    }
    //左右绝对定位
    .left,.right{
        position: absolute;
        top:0px;
        background: red;
        height:100%;
    }
    .left{
        left:0;
        100px;
    }
    .right{
        right:0px;
        200px;
    }
    //中间使用margin空出左右元素所占据的空间
    .main{
        margin:0px 200px 0px 100px;
        height:100%;
        background: blue;
    }

    该方法有个明显的缺点,就是如果中间栏含有最小宽度限制,或是含有宽度的内部元素,当浏览器宽度小到一定程度,会发生层重叠的情况。

    2. 圣杯布局

    HTML代码如下:

    //注意元素次序
    <div class="main">Main</div>
    <div class="left">Left</div>
    <div class="right">Right</div>

    CSS代码如下:

    //习惯性的CSS reset
    body,html{
        height:100%;
        padding: 0;
        margin: 0
    }
    //父元素body空出左右栏位
    body {
        padding-left: 100px;
        padding-right: 200px;
    }
    //左边元素更改
    .left {
        background: red;
         100px;
        float: left;
        margin-left: -100%;
        position: relative;
        left: -100px;
        height: 100%;
    }
    //中间部分
    .main {
        background: blue;
         100%;
        height: 100%;
        float: left;
    }
    //右边元素定义
    .right {
        background: red;
         200px;
        height: 100%;
        float: left;
        margin-left: -200px;
        position: relative;
        right: -200px;
    }

    相关解释如下:

          (1)中间部分需要根据浏览器宽度的变化而变化,所以要用100%,这里设左中右向左浮动,因为中间100%,左层和右层根本没有位置上去

          (2)把左层margin负100后,发现left上去了,因为负到出窗口没位置了,只能往上挪

          (3)按第二步这个方法,可以得出它只要挪动窗口宽度那么宽就能到最左边了,利用负边距,把左右栏定位

          (4)但由于左右栏遮挡住了中间部分,于是采用相对定位方法,各自相对于自己把自己挪出去,得到最终结果

    3. 双飞翼布局

    HTML代码如下:

    <div class="main">
        <div class="inner">
            Main
        </div>
    </div>
    <div class="left">Left</div>
    <div class="right">Right</div>

    CSS代码如下:

    //CSS reset
    body,html {
        height:100%;
        padding: 0;
        margin: 0
    }
    body {
        /*padding-left:100px;*/
        /*padding-right:200px;*/
    }
    .left {
        background: red;
         100px;
        float: left;
        margin-left: -100%;
        height: 100%;
        /*position: relative;*/
        /*left:-100px;*/
    }
    .main {
        background: blue;
         100%;
        float: left;
        height: 100%;
    }
    .right {
        background: red;
         200px;
        float: left;
        margin-left: -200px;
        height: 100%;
        /*position:relative;*/
        /*right:-200px;*/
    }
    //新增inner元素
    .inner {
        margin-left: 100px;
        margin-right: 200px;
    }

    圣杯布局实际看起来是复杂的后期维护性也不是很高,在淘宝UED的探讨下,出来了一种新的布局方式就是双飞翼布局,代码如上。增加多一个div就可以不用相对布局了,只用到了浮动和负边距。和圣杯布局差异的地方已经被注释。

    4. 浮动

    HTML代码如下:

    //注意元素次序
    <div class="left">Left</div>
    <div class="right">Right</div>
    <div class="main">Main</div>

    CSS代码如下:

    //CSS reset
    body,html {
        height:100%;
        padding: 0;
        margin: 0
    }
    //左栏左浮动
    .left {
        background: red;
         100px;
        float: left;
        height: 100%;
    }
    //中间自适应
    .main {
        background: blue;
        height: 100%;
        margin:0px 200px 0px 100px;
    }
    //右栏右浮动
    .right {
        background: red;
         200px;
        float: right;
        height: 100%;
    }

    这种方式代码足够简洁与高效,也容易理解

    总结

    以上就是这篇文章的全部内容了,四种方法其实只有圣杯布局和双飞翼布局较难理解,但实际上理解了圣杯布局,双飞翼布局自然就理解了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流。

  • 相关阅读:
    jQuery之父:每天都写点代码
    XtraTabControl 控件使用
    Linq:使用Take和Skip实现分页
    WCF教程一之WCF是什么,能做什么
    WCF发布后远程访问的域名解析问题
    C# WinForm下,隐藏主窗体,只在进程管理器中显示进程,在任务栏,状态栏都不显示窗体的方法
    在bat脚本写入中文远行后乱码
    VS2010DebugView捕捉
    Web Service 的工作原理
    String.Format 方法
  • 原文地址:https://www.cnblogs.com/lraa/p/6389951.html
Copyright © 2011-2022 走看看