JavaScript圣杯布局与双飞翼布局实现案例详解


Posted in Javascript onAugust 05, 2022

一、圣杯布局和双飞翼布局的功能介绍

  • 圣杯布局和双飞翼布局是三栏布局中的两种布局方式,他们实现的效果是相同的,区别就是实现方法。
  • header和footer各自占领屏幕所有宽度,高度固定;
  • 中间的outer是一个三栏布局;
  • 三栏布局中left和right不变,center填充其他地方;
  • 中间部分的高度是三栏中最高的区域的高度。

JavaScript圣杯布局与双飞翼布局实现案例详解

二、圣杯布局

高度如何自适应屏幕高度

  • 其实这个并不是圣杯布局中的要求,圣杯布局是可以指定高度的,但是可以作为一个思考;
  • 方法就是使用flex布局,将主轴设置为纵轴,再将outer的flex设为1,意思就是填充多余空白,即可达到自适应屏幕高度的效果。
body{
    display: flex;
    width: 100%;
    height: 100%;
    flex-direction: column;
}
.header{
    background-color:grey;
    height: 50px;
}
.footer{
    background-color:grey;
    height: 50px;
}
.outer{
    flex:1;
}

圣杯布局思路

  • 将center盒子写在最前面,保证center盒子最先渲染;
  • 给outer盒子指定padding-left 和 padding-right值,留出left和right的位置;
  • 三个盒子都设置float:left,这时left和right就会被挤到下一行;
  • left设置margin-left:-100%;相对定位+left:-left的宽度;right设置margin-left=-right的宽度;相对定位+right:-right的宽度即可将两个盒子归位。

圣杯布局代码

<style>
  * {
      padding: 0;
      margin: 0;
      text-align: center;
  }
  html{
      height: 100%;
  }
  body{
      display: flex;
      flex-direction: column;
      height: 100%;;
  }
  .header{
      width: 100%;
      height: 50px;
      background-color:dimgray;
  }
  .footer{
      width: 100%;
      height: 50px;
      background-color:dimgray;
  }
  .outer{
      flex:1;
      padding-left: 100px;
      padding-right: 200px;
  }
  .center{
      float: left;
      background-color: darkslateblue;
      height: 100%;
      width: 100%;
  }
  .left{
      float: left;
      width: 100px;
      margin-left: -100%;
      background-color: burlywood;
      height: 100%;
      position: relative;
      left: -100px;
  }
  .right{
      float: left;
      width: 200px;
      margin-left: -200px;
      height: 100%;
      position: relative;
      right: -200px;
      background-color: cyan;
  }
</style>
<body>
    <div class="header">header</div>
    <div class="outer">
        <div class="center">center</div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
    <div class="footer">footer</div>
</body>

三、双飞翼布局

双飞翼布局的思路

  • 给三个盒子都设置为左浮动;
  • center的宽度设为100%;
  • left设置margin-left:-100%;right设置margin-left=-right的宽度即可将两个盒子归位,但是将center的两端挡住了;
  • 在center盒子中再写一个content盒子,设置margin-left和margin-right为两侧的宽度,content盒子作为内容。

双飞翼布局的代码

<style>
    *{
        padding: 0;
        margin: 0;
    }
    html{
        width: 100%;
        height: 100%;
        text-align: center;
    }
    body{
        display: flex;
        width: 100%;
        height: 100%;
        flex-direction: column;
    }
    .header{
        background-color:grey;
        height: 50px;
    }
    .footer{
        background-color:grey;
        height: 50px;
    }
    .outer{
        flex:1;
    }
    .center{
        float: left;
        width: 100%;
        background-color: darkslateblue;
        height: 100%;
    }
    .left{
        float: left;
        margin-left: -100%;
        width: 100px;
        background-color: burlywood;
        height: 100%;
    }
    .right{
        float: left;
        width: 200px;
        background-color: cyan;
        margin-left: -200px;
        height: 100%;
    }
    .content{
        margin-left: 100px;
        margin-right: 200px;
        height: 100%;
    }
</style>
<body>
    <div class="header">header</div>
    <div class="outer">
        <div class="center">
            <div class="content">content</div>
        </div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
    <div class="footer">footer</div>
</body>

圣杯布局和双飞翼布局的区别

  • 圣杯布局是利用padding将中间部分留出,再利用定位、margin的方式将左右盒子归位,因此不需要外层div;
  • 双飞翼布局是先设置中间盒子的宽度为100%,再用margin移动左右盒子覆盖了中间盒子的两侧,再将outer中间加入一个盒子,留出两侧的margin值,达到三栏布局的效果。

四、圣杯布局和双飞翼布局面试问题

回答:圣杯布局和双飞翼布局都可以实现三栏布局,即两侧宽度固定,中间自适应的效果。圣杯布局是先用padding将中间内容留出,再定位左右盒子到相应位置;而双飞翼布局首先将中间盒子的宽度设为了100%,在定位左右盒子的时候会覆盖中间盒子的两端,这样就需要在中间盒子中在定义一个盒子,并留出margin的两侧值。两种布局都需要把center盒子写在left和right前面,为了最先渲染。

到此这篇关于JavaScript圣杯布局与双飞翼布局实现案例详解的文章就介绍到这了,更多相关JS圣杯布局与双飞翼布局内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
js onpropertychange输入框 事件获取属性
Mar 26 Javascript
JavaScript 学习点滴记录
Apr 24 Javascript
JavaScript 动态创建VML的方法
Oct 14 Javascript
JavaScript编写简单的计算器
Nov 25 Javascript
Angular2表单自定义验证器的实现
Oct 19 Javascript
AngularJS中使用three.js的实例详解
Jul 21 Javascript
React Router v4 入坑指南(小结)
Apr 08 Javascript
Vue.js中关于侦听器(watch)的高级用法示例
May 02 Javascript
vue同步父子组件和异步父子组件的生命周期顺序问题
Oct 07 Javascript
jquery-ui 进度条功能示例【测试可用】
Jul 25 jQuery
Vue实现剪贴板复制功能
Dec 31 Javascript
vue组件中实现嵌套子组件案例
Aug 31 Javascript
react中useState使用:如何实现在当前表格直接更改数据
Aug 05 #Javascript
pnpm对npm及yarn降维打击详解
Aug 05 #Javascript
JS前端可视化canvas动画原理及其推导实现
Aug 05 #Javascript
JS前端使用canvas实现扩展物体类和事件派发
Aug 05 #Javascript
JS前端canvas交互实现拖拽旋转及缩放示例
Aug 05 #Javascript
canvas 中如何实现物体的框选
Aug 05 #Javascript
JS前端使用canvas实现物体的点选示例
Aug 05 #Javascript
You might like
MVC模式的PHP实现
2006/10/09 PHP
php判断是否为json格式的方法
2014/03/04 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
激活 ActiveX 控件
2006/10/09 Javascript
一些技巧性实用js代码小结
2009/10/14 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
js兼容的placeholder属性详解
2013/08/18 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
javascript简易画板开发
2020/04/12 Javascript
基于bootstrap实现收缩导航条
2017/03/17 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
微信小程序获取手机网络状态的方法【附源码下载】
2017/12/08 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
JavaScript中展开运算符及应用的实例代码
2021/01/14 Javascript
Python迭代用法实例教程
2014/09/08 Python
pandas获取groupby分组里最大值所在的行方法
2018/04/20 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
一行python实现树形结构的方法
2019/08/09 Python
python openvc 裁剪、剪切图片 提取图片的行和列
2019/09/19 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
Python3中FuzzyWuzzy库实例用法
2020/11/18 Python
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
澳大利亚足球鞋和服装购物网站:Ultra Football
2018/10/11 全球购物
财政局长自荐信范文
2013/12/22 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
应急处置方案
2014/06/16 职场文书
小学校园广播稿集锦
2014/10/04 职场文书
调研报告的主要写法
2019/04/18 职场文书
漫改真人电影「萌系男友是燃燃的橘色」公开先导视觉图
2022/03/21 日漫
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers