这里简单记录常用的四种布局方式,分别为: float浮动布局、position定位方式、还有方便的flex布局和网格grid布局。

下面这里将用这四种布局方式,举例实现左右固定,中间自适应的布局。

float浮动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            margin: 0;
        }
        .container {
            /* vw: view width */
            width: 100vw;
            height: 100vh;
        }
        .container>div {
            height: 100%;
            float: left;
        }
        .left-sider,
        .right-sider {
            width: 100px;
            background-color: green;
        }
        .main {
            /* calculate */
            /* 当前方案的重点 */
            /*注意这里采用左右两边固定宽度,中间自适应宽度的方式,进行布局,注意➖号两边的空格*/
            width: calc(100% - 200px);
            background-color: grey;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="left-sider"></div>
        <div class="main"></div>
        <div class="right-sider"></div>
    </div>

</body>
</html>

效果如图

浮动布局很方便,但是它容易影响标准流的其他元素,造成父级元素的塌陷或者"消失",所以我们在使用的时候应当注意这些因素,必要的时候采用"清除浮动"的方式来阻止它对其他元素影响。

position定位方式布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            margin: 0;
        }
        .container {
            /* vw: view width */
            width: 100vw;
            height: 100vh;
            position: relative;
        }
        .container>div {
            height: 100%;
            position: absolute;
        }
        .left-sider,
        .right-sider {
            width: 100px;
            background-color: aquamarine;
        }
        .main {
            background-color: red;
            /* 当前方案的重点:左右都定位,不给宽度 */
            left: 100px;
            right: 100px;
        }
        .left-sider {
            left: 0;
        }
        .right-sider {
            right: 0;
        }


    </style>
</head>
<body>
    <div class="container">
        <div class="left-sider"></div>
        <div class="main"></div>
        <div class="right-sider"></div>
    </div>

</body>
</html>

也实现了相同的效果

定位布局的方式的重点在于中间的盒子不设置宽度,只设置定位距离左右两侧的距离.

flex布局

flex布局当前的实用度越来越高,只用几行代码,便可以实现复杂漂亮的页面布局,适用于不需考虑浏览器兼容性的伙伴使用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            margin: 0;
        }
        .container {
            /* vw: view width */
            width: 100vw;
            height: 100vh;
            display: flex;
        }
        .container>div {
            height: 100%;
        }
        .left-sider,
        .right-sider {
            width: 100px;
            background-color: #000;
        }
        .main {
            /* 当前方案的重点 */
            flex: 1;
            background-color: #333;
        }

    </style>
</head>
<body>
    <div class="container">
        <div class="left-sider"></div>
        <div class="main"> flex布局</div>
        <div class="right-sider"></div>
    </div>

</body>
</html>

flex布局相对来说的话比较的方便,所以这里将在这里详细的介绍一下使用的基本方法,详情请参阅《flex布局的基本使用》。上述布局的实现是为父盒子添加display: flex;属性,同样的两边固定,中间占据1份,flex:1 。

grid布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            margin: 0;
        }
        .container {
            /* vw: view width */
            width: 100vw;
            height: 100vh;
            display: grid;
            /*
                grid: 网格/栅格
                template: 模板
                column: 列
                fr: 份儿
                fragment: 片段/片元
                repeat: 重复
            */

            /* 当前方案的重点 */
            grid-template-columns: 100px 1fr 100px;
            /* grid-template-columns: 1fr 1fr 1fr; */
            /* grid-template-columns: repeat(3, 1fr); */
        }
        .container>div {
            height: 100%;
        }
        .left-sider,
        .right-sider {
            background-color: yellow;
        }
        .main {
            background-color: pink;
        }

    </style>
</head>
<body>
    <div class="container">
        <div class="left-sider"></div>
        <div class="main"></div>
        <div class="right-sider"></div>
    </div>

</body>
</html>

简单来说就是左右固定,中间一份.相对于flex布局来讲,grid布局优点是比较强大,但是学习成本高,知识点多,兼容性不如flex!

总结

这就是四种布局的简单使用,也可以总结成三种

1.传统布局方式

利用position + display属性 + float属性布局, 兼容性最好,但是效率较低

2.flex布局

拥有自己独特属性, 布局效率高, 学习成本低, 兼容性强!

3.grid布局 dispaly:grid;

网格布局(grid)是最强大的布局方案, 但是知识点比较多, 学习成本相对较高, 兼容性不如flex!

因篇幅原因,将常用方便的flex布局单独整理了一篇文章,详情请参阅:《flex布局的基本使用

最后修改:2021 年 12 月 05 日
感谢大哥送来的卡布奇诺和冰阔乐!