zoukankan      html  css  js  c++  java
  • 两栏三栏布局的变通

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

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

    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%
        }

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

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

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

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

  • 相关阅读:
    VMware Workstation Pro下载密钥
    hypervisor
    Xmanager6 下载地址
    linux常用命令
    linux常用
    查看机器端口信息
    windows下快捷键
    SpringMVC学习笔记整理
    2017面试题收集
    oracle 常用知识点整理
  • 原文地址:https://www.cnblogs.com/yiyistar/p/7532437.html
Copyright © 2011-2022 走看看