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

    在很久以前,有了解过双飞翼布局,但那是仅仅只是了解,当时知道怎么样去布局,但是在后来的实际项目中没有用到,就往了怎么回事了;

    前不久去面试,有被问到了这个问题,当时只记得听过,但是具体怎么实现的就全然不知了,所以特地了解了下,并理解了实现原理。

    其实最重要的就是利用 float 属性,使盒子脱离文档流;一下记录一下实现方法;

    第一步:实现基本布局

    <div class="main">
         <div class="center"></div>
         <div class="left"></div>
         <div class="right"></div>
    </div>
    main{
        width: 100%;
        height: 100px;
        overflow: hidden;
        div{
            height: 100px;
            float: left;
            word-break: break-all;
    
        }
        .center{
            background: yellow;
            width: 100%;
        }
        .left{
            width: 100px;
            background: deepskyblue;
        }
        .right{
            width: 100px;
            background: red;
        }
    }

    看起来是这样的;只需要做一些调整就ok了,利用margin-left 到达左右布局;left盒子  margin-left :-100%;right 盒子 margin-left :-100px;这样布局基本完成;效果是这样的

    那么问题来了,中间的盒子就被两边盒子遮挡住了一部分;接下来就是双飞翼布局和圣杯布局的差异了,实现的目的是相同的,只不过是思想不同;

    圣杯布局注意利用父级的内边距,也就是padding,然后左右两个盒子的相对定位;让左边盒子向左移,右边盒子向右移动就搞定;

    一下是完整的css 代码;

    .main{
        width: 100%;
        height: 100px;
        overflow: hidden;
        padding: 0 100px;
        div{
            height: 100px;
            float: left;
            word-break: break-all;
        }
        .center{
            background: yellow;
            width: 100%;
        }
        .left{
            position: relative;
            width: 100px;
            background: deepskyblue;
            margin-left: -100%;
            left: -100px;
        }
        .right{
            position: relative;
            width: 100px;
            background: red;
            margin-left: -100px;
            right: -100px;
        }
    }

    其实我还有一种方法也能实现,也是通过padding ;设置center  中间盒子 padding : 0 100px; 同样可以达到效果。个人觉得没有什么问题;但还是需要实践。也不用给左右两边盒子设置 相对定位了,这样代码量还会少一点;但是这样的话要是给中间盒子设置一个图片背景就话就会麻烦一点,所以还是用经典的圣杯布局和双飞翼吧。经典是有原因的,是经过时间和实践的考考验的。

  • 相关阅读:
    Chrome浏览器网页截全屏算法以及实现
    去除scons构建动态库的前缀lib
    Javascript的继承
    win7 VS2008 ffmpeg release 版本崩溃 0x00905a4d 处未处理的异常
    shell脚本获取随机数random
    iOS navigationbar添加实现
    TableView中改变Button按钮状态
    将TableView的中的Label和Cell行数绑定
    build diff: /../Podfile.lock: No such file or directory
    initramfs-tools ... update-initramfs: Generating /boot/initrd.img-3.14-kali1-amd64 mktemp: failed to create directory via template `/var/tmp/mki
  • 原文地址:https://www.cnblogs.com/DivHao/p/7822796.html
Copyright © 2011-2022 走看看