zoukankan      html  css  js  c++  java
  • 三栏布局(双飞翼布局和圣杯布局)

    原文

      简书原文:https://www.jianshu.com/p/925b9d0ebc33

    大纲

      1、三栏布局的引入
      2、基本思路及不同实现方式的区别
      3、布局实例
        3.1、圣杯布局
        3.2、双飞翼布局

    1、三栏布局的引入

      关于三栏式布局,常规情况下,可以使用float实现,也可以使用relative来实现。
      但是,如果要求左右两层定宽,中间层的宽度随浏览器窗口宽度变化而变化,这种情况下,就适合使用圣杯和双飞翼布局。通过对圣杯及双飞翼布局学习之后,我认为两种布局的主旨是在html结构中,使中间的主体层位于左右两层的前面。
      圣杯:指的是一种常用的网页布局,他可以由现有的技术(无一没有缺点)来实现。所以找到一种最优的实现方法就好像寻找难以捉摸的圣杯一样。
      双飞翼布局:是一种灵活的布局,始于淘宝UED。如果把三栏布局比作一只大鸟,可以把main看成是鸟的身体,sub和extra则是鸟的翅膀。这个布局的实现思路是,先把最重要的身体部分放好,然后再将翅膀移动到适当的地方。是对圣杯布局的一种改良。
      其实,圣杯布局和双飞翼布局都是很早就出现了,只是国外大学生/淘宝UED将其归纳起来,系统化了。
      任务效果图:

    2、基本思路及不同实现方式的区别

      2.1、两种布局的基本构思为:首先让中间层100%宽度占满同一高度的空间,在左右两层被挤出中间层所在区域时, 使用margin-left的负值将左右两个层拉回与中间层同一高度的空间,接下来调整左右两层到指定位置, 最后使用中间层的margin或padding属性使中间层的内容躲出左右两层占住的显示区。

      2.2、两种布局的主要区别在于:圣杯布局采用一个父层包含中间、左右三个子层,设置父层的padding值腾出左右两层的显示区, 并对左右两层使用relative和left、right值调整位置;双飞翼采用中间、左右三层并列,再在中间层里设置一个子层, 设置中间层子层的margin值腾出左右两层的显示区,对左右两层使用margin值即可调整位置;

     3、布局实例

    3.1、圣杯布局

    <html>
    <head>
        <title>圣杯布局</title>
        <meta charset="utf-8">
        <style>
            header{
                 100%;
                height: 40px;
                background-color: darkseagreen;
            }
            #container{
                height:200px;
                padding: 0px 120px 0 140px;/*腾出宽度,即让main中的内容不会被左右的部分覆盖*/
                background:green;
            }
    
            #main{
                height:200px;
                 100%;
                position: relative;
                background:orange;
                float:left;
            }
            #left{
                height:200px;
                 140px;
                margin-left: -100%;/*将left层拉回main层所在高度区域*/
                left: -140px;/*调整位置*/
                position: relative;
                background:blue;
                float:left;
            }
            #right{
                height:200px;
                 120px;
                margin-left: -120px;/*将right层拉回main层所在高度区域*/
                right: -120px;/*调整位置*/
                position: relative;
                background:yellow;
                float:left;
            }
            footer{
                 100%; 
                height: 30px;
                background-color: darkslategray;
            }
        </style>
    </head>
    <body>
    <header>header</header>
    <div id="container">
        <div id="main">main</div>
        <div id="left">left</div>
        <div id="right">right</div>
    </div>
    <footer>footer</footer>
    </body>
    </html>
    

    3.2、双飞翼布局

    <html>
    <head>
        <title>三栏布局</title>
        <meta charset="utf-8">
        <style>
            header{
                 100%;
                height: 40px;
                background-color: darkseagreen;
            }
            #main{
                 100%;
                height:200px;
                position: relative;
                float:left;
            }
            #main-inner{
                margin:0 120px 0 140px;/*让main的内容不被左右的内容覆盖*/
                background:red;
                height:100%;
            }
            #left{
                 140px;
                height:200px;
                margin-left: -100%;/*将left层拉回main层所在高度区域*/
                background:blue;
                float:left;
            }
            #right{
                 120px;
                height:200px;
                margin-left: -120px;/*将right层拉回main层所在高度区域*/
                background:yellow;
                float:left;
            }
            footer{
                 100%; 
                height: 30px;
                background-color: darkslategray;
                clear:both;/*避免因前面的元素浮动而上浮*/
            }
        </style>
    </head>
    <body>
    <header>header</header>
    
    <div id="main">
        <div id="main-inner">min-inner</div>
    </div>
    <div id="left">left</div>
    <div id="right">right</div>
    
    <footer>footer</footer>
    </body>
    </html>
    

    参考网址

     http://ife.baidu.com/note/detail/id/1025

  • 相关阅读:
    laravel-admin 关闭debug模式导致异常信息到页面的排查
    laravel-sql
    laravel任务调度出现僵尸进程
    PHP获取首字母笔记
    IP库笔记
    深入理解 js 闭包
    用键盘实现上下选择
    密码保护
    评分效果
    数组去重
  • 原文地址:https://www.cnblogs.com/shcrk/p/9333361.html
Copyright © 2011-2022 走看看