zoukankan      html  css  js  c++  java
  • css布局--圣杯布局和双飞翼布局

    圣杯布局和双飞翼布局是经典的三栏式布局。两种布局达到效果上基本相同,都是两边两栏宽度固定,中间栏宽度自适应。(这两种布局都比较老)

    在HTML结构上中间栏在最前面保证了最先渲染中间提升性能,并且兼容性良好。两种布局的实现方法前半部分相同,后半部分的实现各有利弊,下面会简单介绍两者的区别。

    布局效果:

    注意点:

    1. .middle元素位于最前面,保证最先渲染middle部分

    2. 三个元素都浮动,使元素保持在一行上

    3. .middle元素宽度设为100%,独占一行

    4. .left元素设置margin-left: -100%,即可占据最左侧位置;.right元素设置margin-left: -200px;(元素宽为200px)

    5. .left元素与.right元素将.middle元素左右两侧遮挡了,

    针对遮挡,双飞翼布局的解决办法是(中间为两侧腾开位置),为.middle设置一个子元素,通过margin值来为左右两侧让道。

    针对遮挡,圣杯布局的解决办法是:为三个元素的父元素加上padding属性,然后腾开位置(两侧采用相对定位为中间腾开位置),middle内容拉回来了,但left也跟着过来了,所以要还原,就对left使用相对定位 left:-200px  同理,right也要相对定位还原 right:-220px

    贴上代码

    双飞翼布局:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
        .middle {
            width: 100%;
            height: 200px;   
            background: #abcdef;
            float: left;
        }
        .middleChild{
            /*margin: 0 200px;*/
            height: 100%;
        }
        .left, .right {
            width: 200px;
            height: 200px;
            float: left;
        }
        .left {
            background: #ccc;
            margin-left: -100%;
        }
        .right {
            background: pink;
            margin-left: -200px;
        }
        .left, 
        .middle,
        .right{
            text-align: center;
            line-height: 200px;
        }
    
        </style>
    </head>
    <body>
            <div class="middle">
                 <div class="middleChild">middle</div>
            </div>
            <div class="left">left</div>
            <div class="right">right</div>
    </body>
    <script>
    
    
    </script>
    </html>
    View Code

    圣杯布局

    <!DOCTYPE html>
    <html lang="en">
    <head>
    
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
        .container {
            padding: 0 200px;
        }
        .middle {
            width: 100%;
            height: 200px;   
            background: #abcdef;
            float: left;
            /*position: relative;*/
        }
        .middleChild{
            /*margin: 0 200px;*/
            height: 100%;
        }
        .left, .right {
            width: 200px;
            height: 200px;
            float: left;
            position: relative;
        }
        .left {
            background: #ccc;
            margin-left: -100%;
            left: -200px;
        }
        .right {
            background: pink;
            margin-left: -200px;
            right: -200px;
        }
        .left, 
        .middle,
        .right{
            text-align: left;
            line-height: 200px;
        }
    
        </style>
    </head>
    <body>
        <div class="container">
            <div class="middle">
                 <!-- <div class="middleChild">middle</div> -->
                 middle
            </div>
            <div class="left">left</div>
            <div class="right">right</div>
        </div>
    </body>
    <script>
    
    
    </script>
    </html>
    View Code
    致力于前端技术学习与分享,会及时更新博客。
  • 相关阅读:
    linux下mysql定时备份数据库
    怎么不让别人ping服务器
    忘记了本地mysql密码应该怎么找回
    配置 centos apache 的日志文件为每天保存,在home分区
    Android 开发环境安装配置手册
    jquery定时器
    谷歌浏览器控制台出现 Unchecked runtime.lastError: The message port closed before a response was received. 的报错
    百度文库下载文档没有下载劵解决
    JRebel安装部署,激活
    用Cygwin实现在window环境下使用Linux命令-nohup 来后台运行程序
  • 原文地址:https://www.cnblogs.com/caoxueying2018/p/10937649.html
Copyright © 2011-2022 走看看