几种圣杯布局的方式

308 阅读2分钟

1.      
Grid布局<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .container {
            display: grid;
            grid-template-columns: 50px auto 50px;
            grid-template-rows: 100px 100px 100px;
            grid-template-areas: "header header header" "left middle right" "footer footer footer";
        }
        .header {
            grid-area: header;
            height: 100px;
            background-color: red;
            line-height: 100px;
            text-align: center;
            color: #fff;
        }
        .left {
            grid-area: left;
            width: 200px;
            background-color: blue;
        }
        .middle {
            grid-area: middle;
            background-color: orange;
        }
        .right {
            grid-area: right;
            width: 200px;
            background-color: fuchsia;
        }
        .footer {
            grid-area: footer;
            background-color: blanchedalmond;
        }

    </style>
</head>
<body>
<div class="container">
    <div class="header">header</div>
    <div class="left">left</div>
    <div class="middle">middle</div>
    <div class="right">right</div>
    <div class="footer">footer</div>
</div>
</body>
</html>2. Position和float方法的圣杯布局

<!doctype html><html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .header {
            width: 100%;
            height: 50px;
            background-color: red;
        }
        .main {
            padding: 0 200px;
        }
        .main:after {
            content: "";
            display: block;
            visibility: hidden;
            clear: both;
            height: 0;
            line-height: 0;
        }
        .main div {
            position: relative;
            float: left;
            min-height: 80px;
        }
        .main .center { /*由于在.main中已设置padding值,所以width在-200px处*/
            width: 100%;  /* 表示中间部分自适应 */
            background-color: orange;
        }
        .main .left {
            width: 200px;
            margin-left: -100%; /*必须写在left前面*/
            left: -200px; /*由于在.main中已设置padding值,所以width在-200px处 所以left值是-200px*/
            background-color: tan;
        }
        .main .right {
            width: 200px;
            background-color: #ab9900;
            margin-right: -200px;
        }
        .footer {
            height: 80px;
            background-color: lightgrey;
            line-height: 80px;
            text-align: center;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="header">header</div>
    <div class="main">
        <div class="center">center</div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
    <div class="footer">footer</div>
</div>
</body>
</html>效果图:

3. Flex 圣杯布局
<!DOCTYPE html><html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }
        .container {
            width: 100%;
            display: flex;
            flex-direction: column;
        }
        .header {
            flex: 1;
            background-color: yellow;
            text-align: center;
        }
        .main {
            display: flex;
            background-color: red;
            height: 300px;
            line-height: 300px;
        }
        .main .left {
            width: 200px;
            background-color: palegoldenrod;
            text-align: center;
        }
        .main .center {
            flex: 1;
            background-color: deeppink;
            text-align: center;
        }
        .main .right {
            width: 200px;
            background-color: papayawhip;
            text-align: center;
        }
        .footer {
            flex: 1;
            background-color: blueviolet;
            text-align: center;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="header">
        header
        <br>
        header
    </div>
    <div class="main">
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </div>
    <div class="footer">footer</div>
</div>
</body>
</html>