两栏三栏布局的变通

本篇幅的内容,算是上一篇的补充

三栏布局,上下高度固定,中间自适应 

1)绝对定位

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    *{
        padding: 0px;
        margin: 0px
    }
        .box div{
            position: absolute;
        }
        .head{
            top: 0;
            100%;
            height: 100px;
            background: red
        }
        .middle{
            top: 100px;
            bottom: 100px;
            100%;
            background: yellow;
            overflow: auto;
        }
        .footer{
            bottom: 0px;
            background: blue;
            height: 100px;
             100%
        }
    </style>
</head>

<body>
    <div class="box">
        <div class="head"></div>
        <div class="middle">
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
            <p>111<p>
        </div>
        <div class="footer"></div>
    </div>
</body>

</html>
View Code

 2) flex布局

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * {
        margin: 0px;
        padding: 0px;
    }
    .box {
        display: flex;
        background: red;
        flex-direction: column;
        height: 100vh
    }

    .head {
        flex: 0 0 300px;
        background: #53DE30;
    }

    .middle {
        flex: 1;
        background: #B6D51E;
    }

    .foot {
        flex: 0 0 300px;
        background: #EFBD59;
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="head">1</div>
        <div class="middle">
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
        </div>
        <div class="foot">3</div>
    </div>
</body>

</html>
View Code

这两个布局,当中间的内容超过了区域的高度的时候,绝对定位的时候,直接overflow设置为auto,采用flex布局的时候,当我们内容超过容器的宽度的时候,他会自动的撑开内容区域的高度。

这里用到了一个新的属性

height: 100vh

这个意思是,占据电脑屏幕可用的全部高度,我们没有设置height:100%,因为这个根本无法取到这个高度,注意,是这个电脑荧幕的可用高度,而不是页面的高度,页面由于会出现滚动条,但是可视区域的高度,就是电脑荧幕的可用高度

两栏布局:左宽度固定,右边自适应

1)浮动布局

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * {
        padding: 0px;
        margin: 0px;
    }

    .box {
         100%;
    }

    .left {
        background: #1164F6;
        float: left;
         100px;
    }

    .right {
        background: #F5F716;
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="left">1</div>
        <div class="right">
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
        </div>
    </div>
</body>

</html>
View Code

和三栏布局一样,一旦高度不确定,浮动就会出现问题,而且还有这个文字环绕效果

2)绝对定位

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * {
        padding: 0px;
        margin: 0px;
    }

    .box div{
        position: absolute;
    }

    .left {
        background: #1164F6;
        left: 0px;
         100px;
    }

    .right {
        background: red;
        left: 100px;
        right: 0px;
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="left">1</div>
        <div class="right">
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
        </div>
    </div>
</body>

</html>
View Code

绝对定位和这个浮动一样,也只能是高度已知的情况,不然就会出现问题,而且,看着行代码

.right {
        background: red;
        left: 100px;
        right: 0px;
    }

我们为什么要把right设置了0,因为你一旦设置了绝对定位,那么这个right元素将会包裹起来,宽度会有内容撑开,而不是原来的占据一行

但是如果我们绝对定位设置了right,那么他的宽度又会被拉开,可以自己注释这一行,看看效果

3)flex布局

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * {
        padding: 0px;
        margin: 0px;
    }

    .box{
      display: flex;
    }

    .left {
        background: #1164F6;
        flex: 0 0 100px;
    }

    .right {
        background: red;
        flex:1;
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="left">1</div>
        <div class="right">
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
        </div>
    </div>
</body>

</html>
View Code

这个和三栏布局一样,都差不多,是一个目前比较流行的布局

4)表格布局

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * {
        padding: 0px;
        margin: 0px;
    }

    .box{
      display: table;
       100%
    }
    .box div{
        display: table-cell;
    }

    .left {
        background: #1164F6;
         100px;
    }

    .right {
        background: red;
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="left">1</div>
        <div class="right">
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
        </div>
    </div>
</body>

</html>
View Code

这个也没有什么难度,和三栏布局的表格布局一样

5)网格布局

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * {
        padding: 0px;
        margin: 0px;
    }

    .box{
      display: grid;
      grid-template-columns:100px auto;
    }

    .left {
        background: #1164F6;
    }

    .right {
        background: red;
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="left">1</div>
        <div class="right">
            <p>111</p>
            <p>111</p>
            <p>111</p>
            <p>111</p>
        </div>
    </div>
</body>

</html>
View Code

这个布局是最简单的一个,真的是方便的很啊,两句话就搞定了

两栏布局:右宽度固定,左边自适应

这个和上面的差不多,一个是左固定,一个是右固定,以上的5种实现方式,稍作修改,就可以了,这里就不上代码了。

两栏布局:上宽度固定,下边自适应

1)flex布局

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * {
        padding: 0px;
        margin: 0px;
    }

    .box {
        display: flex;
        flex-direction: column;
        height: 100vh
    }

    .head {
        flex:0 0 100px;
        background: red;
    }
    .foot{
        flex:1;
        background: yellow;
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="head">1</div>
        <div class="foot">2</div>
    </div>
</body>

</html>
View Code

这个和上面的那个  三栏布局,上下高度固定,中间自适应 很类似,这个flex布局,也算是比较流行的移动端的布局

2)绝对定位

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
    * {
        padding: 0px;
        margin: 0px;
    }
    .box div{
        position: absolute;
         100%
    }

    .head {
        top:0;
        height: 100px;
        background: red;
    }
    .foot{
        background: yellow;
        bottom: 0px;
        top: 100px;
    }
    </style>
</head>

<body>
    <div class="box">
        <div class="head">1</div>
        <div class="foot">2</div>
    </div>
</body>

</html>
View Code

同样的,这个代码也是很类似的,需要注意的是

.box div{
        position: absolute;
         100%
    }

这里也是一样的,由于绝对定位,导致容器包裹,宽度收缩,所以我们要手动设置宽度,让他撑开整行

 两栏布局:下宽度固定,上边自适应

这个和上面的类似,也是不给代码了

 总结:以上是我整理的一些布局,当然,还不全面,以后要是遇到了新的布局方案,会保持更新!

原文地址:https://www.cnblogs.com/yiyistar/p/7532437.html