• CSS布局之圣杯布局和双飞翼布局


    其实圣杯布局和双飞翼布局实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应,也就是我们常说的固比固布局。它们实现的效果都是一样的,差别在于其实现的思想。

    一、圣杯布局

    html代码中,将重要的内容middle放在container的最前面,然后是left、right
    1、将三者均设置

    float:left
    

    2、将middle的宽度设置为

    100%;
    

    使得middle占满一行
    3、将left放在middle所在行的最左边,给left设置

    margin-left:-100%;
    

    4、left覆盖了middle内容的最左端,此时给container设置

    padding:0 100px;
    

    5、将left填充container最左边的空白部分,为left设置

    position:relative;
    left:-100px;
    

    6、同理先给right设置

    margin-left:-100px;
    

    7、然后给right添加

    position:relative;
    right:-100px;
    

    实现圣杯布局的代码如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>圣杯布局</title>
    <meta name="description" content="">
    <meta name="keywords" content="">
    <style>
        html,body{
            margin:0;
            padding:0;
        }
        .container{
            border:1px solid;
            padding:0 100px;
            500px;
        }
        .container:after{
            content:'';
            display: block;
            clear:both;
            height: 0;
        }
        .main{
            100%;
            height:300px;
            background-color: red;
            float:left;
        }
        .aside{
            100px;
            height:100px;
            background:blue;
            float:left;
            position: relative;
            left:-100px;
            margin-left:-100%;
        }
        .extra{
            100px;
            height:100px;
            float:left;
            background:yellow;
            position: relative;
            left:100px;
            margin-left:-100px;
        }
    </style>
    </head>
    <body>
        <div class="container">
            <div class="middle"></div>
            <div class="left"></div>
            <div class="right"></div>
        </div>
    </body>
    </html>
    

    二、双飞翼布局

    双飞翼布局与圣杯布局不同的是,在中间重要的内容块里面再嵌套了一个div用于放内容,然后设置该div的margin,来达到三栏式的效果。

    1、将三者均设置

    float:left
    

    2、将middle的宽度设置为

    100%;
    

    使得middle占满一行
    3、将left放在middle所在行的最左边,给left设置

    margin-left:-100%;
    

    4、将right放到middle所在行的最右变,给right设置

    margin-left:-100px;
    

    5、middle的一部分给left和right覆盖了,给middle中添加

    <div class="wrap"></div>
    

    6、然后设置wrap

    margin:0 110px;
    

    双飞翼的代码如下:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>双飞翼布局</title>
    <meta name="description" content="">
    <meta name="keywords" content="">
    <style>
        html,body{
            margin:0;
            padding:0;
        }
        .container{
            border:1px solid;
            500px;
        }
        .container:after{
            content:'';
            display: block;
            clear:both;
            height: 0;
        }
        .middle{
            100%;
            height:300px;
            float:left;
        }
        .middle .wrap{
            background:pink;
            height:300px;
            margin-left: 100px;
            margin-right: 100px;
        }
        .left{
            100px;
            height:100px;
            background:blue;
            float:left;
            margin-left:-100%;
        }
        .right{
            100px;
            height:100px;
            float:left;
            background:yellow;
            margin-left:-100px;
        }
    </style>
    </head>
    <body>
        <div class="container">
            <div class="middle">
                <div class="wrap"></div>
            </div>
            <div class="left"></div>
            <div class="right"></div>
        </div>
    </body>
    </html>
    

    三、两个布局的异同

    • 1.两种布局方式都是把主列放在文档流最前面,使主列优先加载;
    • 2.两者在实现上的相同点在于都让三列浮动,然后通过负外边距形成三列布局;
    • 3.两种布局方式的不同在于如何处理中间主列的位置:圣杯布局是利用父容器的左右内边距定位;双飞翼布局是把主列嵌套在div后利用主列的左右外边距定位。
  • 相关阅读:
    类和对象的一些BIF
    mac入门--通过hhomebrew下载过慢问题
    Vue的组件及传参
    Vue的指令和成员
    Vue基础(1)
    Python中好用的模块们
    Django-Auth认证模块
    Django杂篇(2)
    Django杂篇(1)
    Django的日常-AJAX
  • 原文地址:https://www.cnblogs.com/mcray/p/6686078.html
Copyright © 2020-2023  润新知