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下用层来实现select的title提示属性
Feb 23 Javascript
初试jQuery EasyUI 使用介绍
Apr 01 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
Jun 20 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(四)用地图块拼成大地图
Jan 23 Javascript
js获取IFRAME当前的URL的方法
Nov 13 Javascript
JS中数组Array的用法示例介绍
Feb 20 Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 Javascript
jQuery表单事件实例代码分享
Aug 18 Javascript
javascript闭包功能与用法实例分析
Apr 06 Javascript
JS document对象简单用法完整示例
Jan 14 Javascript
JS函数基本定义与用法示例
Jan 15 Javascript
JS错误处理与调试操作实例分析
Apr 13 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
php导出CSV抽象类实例
2014/09/24 PHP
php实现算术验证码功能
2018/12/05 PHP
推荐40个非常优秀的jQuery插件和教程【系列三】
2011/11/09 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
JQuery设置时间段下拉选择实例
2014/12/30 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
Python实现过滤单个Android程序日志脚本分享
2015/01/16 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
Python3 pandas 操作列表实例详解
2019/09/23 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
会计应聘求职信范文
2013/12/17 职场文书
小学作文评语大全
2014/04/21 职场文书
爱牙日活动总结
2014/08/29 职场文书
2014最新离职证明范本
2014/09/12 职场文书
省委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
师范生见习报告范文
2014/11/03 职场文书
质量保证书怎么写
2015/02/27 职场文书
2016年学校招生广告语
2016/01/28 职场文书
导游词之藏龙百瀑景区
2019/12/30 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
Python中的min及返回最小值索引的操作
2021/05/10 Python