zoukankan      html  css  js  c++  java
  • css实现三栏自适应布局(两边固定,中间自适应)以及优缺点

    方法一:绝对定位(absolute + margin

    原理:给左右两边的元素设置absolute,这样左右两边的元素脱离标准文档流的控制,中间的元素自然会上来,然后给中间的元素设置margin留出左右两边元素的位置,也就是说margin-left = “左边元素的宽度”  margin-right = "右边元素的宽度"

    优点:三个div的顺序是任意的

    缺点:要对样式进行初始化,否则元素间会出现空隙,因为使用了absolute,如果页面还有其他内容处理时要小心!

    注:随着浏览器窗口缩小,会发生压缩,左右元素重叠

    代码:

    <style>
            *{
                padding: 0;
                margin: 0;
            }
            .left,.right{
                 200px;
                height: 200px;
                position: absolute;
            }
            .left{
                background-color: green;
                left: 0;
            }
            .right{
                background-color: blue;
                right: 0;
            }
            .center{
                height: 200px;
                margin-left: 200px;
                margin-right: 200px;
                background-color: red;
            }
    </style>
    <body>
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="center">center</div>
    </body>

    效果:

    方法二:自身浮动(float)

    原理:给左右元素分别设置左浮动和右浮动,这样左右元素就脱离了标准文档流的控制, 但中间的元素还在标准文档流中,之后给中间的元素设置margin,设置方法同方法一

    优点:受外界因素影响小

    缺点:三个div的顺序有固定性,因为中间的元素任然在文档流中,所以要放在最后面,左右元素顺序不固定,这也是与绝对定位不同的地方

    注:随着浏览器窗口缩小,右边元素会被挤到下一行

    代码:

     <style>
            .left,.right{
                 200px;
                height: 200px;
            }
            .left{
                background-color: green;
                float: left;
            }
            .right{
                background-color: blue;
                float: right;
            }
            .center{
                height: 200px;
                margin-left: 200px;
                margin-right: 200px;
                background-color: red;
            }
    </style>
    <body>
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="center">center</div>
    </body>

    效果:

     

    方法三:圣杯布局(BFC+负margin)

    原理:使用margin负值法,使用圣杯布局首先需要将中间元素用div包住,设置float使其形成一个BFC,并且要设置宽度,整个宽度和左边元素的margin负值要相互配合,也就是margin-left = "-中间元素外层div宽度" ,右边元素的margin负值要和它自己的宽度配合,也就是margin-left = “-右边元素宽度”

    优点:三栏有相互关联性,有抗性

    缺点:三个元素的顺序也是固定的,中间元素要放置在最前面,左右元素顺序不固定,并且左元素的margin-left = "中间元素外层div宽度" 

    注:随着浏览器窗口缩小,会发生压缩,左右元素重叠,继续缩小之后右边元素会又会被挤到下一行,但是同方法二有不同

    代码:

    <style>
            .wrap{
                 100%;
                float: left;
            }
            .left,.right{
                 200px;
                height: 200px;
            }
            .left{
                background-color: green;
                float: left;
                margin-left: -100%;
            }
            .right{
                background-color: blue;
                float: left;
                margin-left: -200px;
            }
            .center{
                height: 200px;
                background-color: red;
            }
    </style>
    <body>
        <div class="wrap">
            <div class="center">center</div>
        </div>
        <div class="left">left</div>
        <div class="right">right</div>
    </body>

    效果:

    方法四:flex布局

    原理:将左中右三个元素用div包裹起来,给外层div设置display:flex,之后给中间元素设置flex:1

    优点:解决了之前方式带来的问题,例如浮动

    缺点:三个元素的顺序也是固定的,中间元素要放在中间,不能兼容IE8及以下浏览器。

    注:随着浏览器窗口的缩小,会发生压缩,但是不会重叠和换行

    代码:

    <style>
            .wrap{
                 100%;
                display: flex;
            }
            .left,.right{
                 200px;
                height: 200px;
            }
            .left{
                background-color: green;
            }
            .right{
                background-color: blue;
            }
            .center{
                flex: 1;
                height: 200px;
                background-color: red;
            }
    </style>
    <div class="wrap">
            <div class="left">left</div>
            <div class="center">center</div>
            <div class="right">right</div>
    </div>

    效果:

    注:其实还有网格布局和表格布局

  • 相关阅读:
    无法添加sql server ER图
    我和COC
    WordPress怎样设置菜单栏旋转小图标
    VS Code怎样设置成中文
    初探 Git Submodules
    使用 rsync-deploy-action 同步 Hexo 博客到个人服务器
    Latex基本语法简记
    SQLAlchemy建立数据库模型之间的关系
    Flask的请求钩子与上下文简览
    如何将本地项目推送到Github
  • 原文地址:https://www.cnblogs.com/kunmomo/p/9915165.html
Copyright © 2011-2022 走看看