• Css布局:左边固定,右边自适应


    要实现左边固定,右边自适应有好几种方法,flex,calc,float,下面我来分析一下每种方法各自的特点级缺陷。

    1. flex

    用flex可以实现两个div,一个左固定,一个右自适应。思路就是在要处理的div的父级div里添加display:flex属性,然后将左边的div设置固定的宽度,右边的div直接将width设置为100%,将容器撑满即可。代码如下:

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <style>
                div {
                    height: 200px;
                }
                .flex-container {
            //设置父级div的display属性为flex
    display: flex; width: 100%; } .div-green {
            //设置左边div的宽度也定宽
    background-color: green; width: 220px; } .div-red {
            //右边的div将容器撑满
    background-color: red; width: 100%; } </style> </head> <body> <div class="flex-container"> <div class="div-green">div1</div> <div class="div-red">div2</div> </div> </body> </html>

    2. calc + inline

    要想左定宽,右自适应,其实其中很纠结的点就是,怎么计算右边div的width,怎么在容器宽度不断变化的时候,计算出来右边div的宽度。calc就提供了计算的方法。

    假设左边div的220px; 则右边div的宽度 calc(100%  -  220px),因为百分比对应的值是可以根据容器大小变化而变化的,但是百分比是不会变的,所以用100% - 220px,就可以计算出来右边div的宽度。calc有个注意点就是 100% - 220px之间有空格,没有空格calc是不会有效果的

    还有个问题是一般div ,display:block, 这样div是默认占一行的,需要将它们的父级div的display属性设置为 inline-flex;

    实现代码如下:

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <style>
                div {
                    height: 200px;
                }
                .container {
                    width: 100%;
                    max-width: 1280px;
                    display: inline-flex;
                }
                .div-green {
                    background-color: green;
                    width: 220px;
                }
                .div-red {
                    background-color: red;
                    width: calc(100% - 220px);
                }
            </style>
        </head>
        <body>
            <div class="container">
                <div class="div-green">div1</div>
                <div class="div-red">div2</div>
            </div>
        </body>
    </html>

    calc虽然很好用,但是还是有一些兼容性问题:IE9+、FF4.0+、Chrome19+、Safari6+,能兼容这些浏览器,但是移动端的浏览器还没支持,仅有“firefox for android 14.0”支持,其他的全军覆没。

    3.float

    float有两种方法,一种是直接用float,一种是用float+负边距

    (1)float

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <style>
                div {
                    height: 200px;
                }
                .div-green {
                    //设置左边的div为float:left,并且定宽
                    background-color: green;
                    width: 220px;
                    float: left;
                }
                .div-red {
                    //需要设置margin-left,因为float使得左边的div脱离文档流,所以右边的div会占据左边的位置,可以去掉margin-left试试
                    background-color: red;
                    margin-left: 220px;
                }
            </style>
        </head>
        <body>
            <div class="div-green">div1</div>
            <div class="div-red">div2</div>
        </body>
    </html>

    (2)float+负边距

    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <style>
                div {
                    height: 200px;
                }
                .div-green {
                    background-color: green;
                    width: 220px;
                    float: left;
                    margin-right: -100%; // >220px即可
                }
                .container {
                    float: left;
                    width: 100%;
                }
                .div-red {
                    background-color: red;
                    margin-left: 220px;
                }
            </style>
        </head>
        <body>
            <div class="div-green">div1</div>
            <div class="container">
                <div class="div-red">div2</div>
            </div>
        </body>
    </html>

    float方法基本没有浏览器兼容性问题,可以很好的适用各种浏览器。

    以上三种方法,是我总结的可以实现左边固定,右边自适应的方法,可以还有写的不是很正确的地方,欢迎指出~

  • 相关阅读:
    变参宏 __VA_ARGS__
    预处理中的 # 和 ##
    strlen与sizeof异同
    .vimrc
    sudo:有效用户 ID 不是 0,sudo 属于 root 并设置了 setuid 位吗
    远程ssh登陆时报错:/bin/bash: Permission denied
    Excel中VBA进行插入列、格式化、排序
    ORACLE发送带附件邮件的二三事之一
    Windows Server 2008 双网卡同时上内外网 不能正常使用
    VMWARE修改CPUID
  • 原文地址:https://www.cnblogs.com/ycherry/p/7272816.html
Copyright © 2020-2023  润新知