• css网页布局 --- 左边固定,右边自适应


    div的布局统一如下:

    <body>
      <div class="wrap">
        <div class="left"></div>
        <div class="right"></div>
      </div>
    </body>

    css的基本设置统一如下:

        * {
          margin: 0;
        }
        html,body {
           100%;
          height: 100%;
        }

     

    第一种方式:左边的div向左浮动,右边的div的width为100%,margin-left值设置为左边div的宽度。 

        div.wrap {
           100%;
          height: 100%;
          background: #fefefe;
        }
        div.left {
          float: left;
           300px;
          height: 100%;
          background: #eafeea;
        }
        div.right {
           100%;
          height: 100%;
          margin-left: 300px;
          background: pink;
        }

    这里因为没有内容,所以height: 100%来撑开。 左边div在float之后,脱离文档流,右边元素 100%,是父元素的宽度减去子元素的padding和margin的剩下的宽度,所以刚好可以做到右边div的自适应。

     

    第二种方式: 和第一种方式的思路一样,只是这次我们可以通过将父元素设置为 position: relative; 将左边的元素设置为 position: absolute; 并且left为0。右边div不变。

        div.wrap {
           100%;
          height: 100%;
          background: #fefefe;
          position: relative;
        }
        div.left {
           300px;
          position: absolute;
          left: 0;
          height: 100%;
          background: #eafeea;
        }
        div.right {
           100%;
          height: 100%;
          margin-left: 300px;
          background: pink;
        }

    第三种方式: 使用BFC方式,即将右边的div设置overflow: hidden;这样就可以出发BFC了,而BFC的规则就是不会和浮动元素重叠,如下:

        div.wrap {
           100%;
          height: 100%;
          background: #fefefe;
        }
        div.left {
          float: left;
           300px;
          height: 100%;
          background: #eafeea;
        }
        div.right {
          height: 100%;
          overflow: hidden;
          background: pink;
        }

    注意到: 这里我们直接把右边的div添加了overflow:hidden; 然后又把 100%去掉,否则会出现问题。

    第四种方式:左边固定宽度 float,右边width设置为100%, float: right,然后margin-right: -300px即可,通过margin负边距,我们就可以达到同样的效果:

        div.wrap {
           100%;
          height: 100%;
          background: #fefefe;
        }
        div.left {
          float: left;
           300px;
          height: 100%;
          background: #eafeea;
        }
        div.right {
           100%;
          float: right;
          margin-right: -300px;
          height: 100%;
          background: pink;
        }

    记住: margin负边距影响的永远都是文档流,文档流会认为其减小了,但是实际上并没有减小。

    第五种方式: 使用flex布局。 包裹层使用flex,内部就是弹性布局了,不用设置。

        div.wrap {
          display: flex;
           100%;
          height: 100%;
          background: #fefefe;
        }
        div.left {
           300px;
          height: 100%;
          background: #eafeea;
        }
        div.right {
           100%;
          height: 100%;
          background: pink;
        }

    即左边的div仅仅设置300px,右边的div设置为width:100%即可。

     

    第六种方式: 左右两边全部使用绝对定位,左边设定宽度300px,右边100%。

        div.wrap {
          position: relative;
           100%;
          height: 100%;
          background: #fefefe;
        }
        div.left {
          position: absolute;
          left: 0;
          top: 0;
           300px;
          height: 100%;
          background: #eafeea;
        }
        div.right {
          position: absolute;
          top: 0;
          left: 300px;
           100%;
          height: 100%;
          background: pink;
        }

    这种方法也是轻松实现。 

    第七种方式: 使用table布局。 包裹元素设置为 display: table; 子元素设置为 display: table-cell; 然后再设置好左边元素的宽度,右边元素不需要设置宽度。 并且是等高布局。

        div.wrap {
          display: table;
           100%;
          height: 100%;
          background: #fefefe;
        }
        div.left {
          display: table-cell;
           300px;
          height: 100%;
          background: #eafeea;
        }
        div.right {
          display: table-cell;
          height: 100%;
          background: pink;
        }

    效果如下:

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    求24点
    关于参数和返回值的常量性
    点到平面的距离公式
    大端序与小端序
    Quake3中的绝对值函数
    整数超出范围时如何表示?
    关于数组的几道面试题
    在移位数组中查找数
    时间复杂度O(n),空间复杂度O(1)的排序
    C++之对象切割
  • 原文地址:https://www.cnblogs.com/zhuzhenwei918/p/6104209.html
Copyright © 2020-2023  润新知