圣杯布局 双飞翼布局

圣杯布局和双飞翼布局效果相同,实现方法不同。都是为了实现两侧宽度固定,中间宽度自适应的三栏布局

如下图:

圣杯布局借助的是其他非主要元素覆盖了其父元素的padding值所占据的宽度,同一个杯子,非主要元素其只是占据了全部容器的padding值部分;

使用flex弹性布局实现

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .HolyGrail{
            display: flex;
            flex-direction: column;
            text-align: center;
            min-height: 100vh;
        }
        .header{
            flex: 1;
            background-color: #f8ff73;
        }
        .footer{
            flex: 1;
            background-color: #f8ff73;
        }
        .block{
            display: flex;
            flex: 5;
            background-color: #e0868c;
        }
        .content{
            flex: 1;
        }
        .nav{
            flex: 0 0 100px;
            background-color: #78bcff;

        }
        .aside{
            flex: 0 0 100px;
            background-color: #78bcff;
        }
    </style>
</head>
<body>
<div class="HolyGrail">
    <div class="header">Header</div>
    <div class="block">
        <div class="nav">Left</div>
        <div class="content">Center</div>
        <div class="aside">Right</div>
    </div>
    <div class="footer">Footer</div>
</div>
</body>
</html>

使用浮动的方法实现

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        *{
            padding: 0;
            margin: 0;
            text-align: center;
        }
        .block {
            padding: 0 100px;
            overflow:hidden;
        }
        .col {
            position: relative;
            float: left;
        }
        .main {
            width: 100%;
            height: 200px;
            background:yellow;
        }
        .left,.right {
            width: 100px;
            height: 200px;
            background:red;
        }
        .left{
            margin-left: -100%;
            left: -100px;
        }
        .right {
            margin-left: -100px;
            right: -100px;
        }
        .header,.footer{
            background-color: #45baff;
            height: 30px;
        }

    </style>
</head>
<body>
<header class="header">header</header>
<section class="block">
    <section class="col main">main</section>
    <aside class="col left">left</aside>
    <aside class="col right">right</aside>
</section>
<footer class="footer">footer</footer>
</body>
</html>

上面出现的<section>、<aside>、<header>、<footer>标签都是HTML5中出现的新标签,含义如下:

<section> 标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。

<aside> 标签定义其所处内容之外的内容。

<header> 标签定义文档的页眉(介绍信息)。

<footer> 标签定义文档或节的页脚。

圣杯布局的缺点:正常情况下是没有问题的,当main部分的宽小于left部分时就会发生布局混乱。

双飞翼布局是给主要部分main-wrap添加一个外层元素main,其他非主要元素所占据的空间是主要部分(main-wrap)的margin空间,像鸟的两个翅膀,与主要部分main脱离(main和main-wrap是下面双飞翼布局的元素id)。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
            text-align: center;
        }
        body{
            min-height: 600px;
        }
        .header,.footer{
            background-color: #45baff;
            height: 50px;
        }
        .main{
            width: 100%;
            height: 200px;
            background-color: #f8ff73;
            float: left;
        }
        .mian-wrap{
            margin: 0 190px;
            /*这是圣杯和双飞翼最明显的区别,在main内部使用的是margin,*/
            /*而圣杯是直接在container部分使用padding*/
        }
        .left,.right{
            width: 190px;
            height: 200px;
            background-color: #e0868c;
        }
        .left{
            margin-left: -100%;
            float: left;
        }
        .right{
            margin-left: -190px;
            float: left;
        }
        .footer{
            clear: both;
        }
    </style>
</head>
<body>
<div class="container">
    <div class="header">header</div>
    <div class="main">
        <div class="mian-wrap">main</div>
    </div>
    <div class="left">left</div>
    <div class="right">right</div>
    <div class="footer">footer</div>
</div>
</body>
</html>

双飞翼布局的缺点是多一层dom结果,增加渲染树生成的计算量。

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值