什么是圣杯布局

三栏的布局结构,左栏和右栏的宽度固定不变,中间栏的宽度自动填充,会跟着父级元素的宽度变化而变化。

如图所示

header和footer的宽度填充满整个屏幕

缩小或者拉大屏幕,左栏和右栏的宽度保持不变,中间的宽度随着变小或变大

下面,让我们来实现这个效果

Dom结构

header

center
left
right

footer

解析:

使用了header和footer这两个HTML5语义化标签,语义化标签有利于seo

center块放在left块前面是为了让center块更快加载出来(DOM加载是按顺序加载的)

center、left和right使用了相同的class名,是因为它们有一些公共的css样式

CSS样式

第一步

设置好header和footer的宽度是100%,左栏宽度200px,右栏宽度300px,中间栏宽度100%(因为要跟着浏览器的宽度变化)

body {

width: 100%;

margin: 0; //去掉浏览器默认的margin宽度

}

#header,

#footer {

width: 100%;

background-color: #ccc;

}

#container {

width: 100%;

background-color: yellow;

}

#container .column {

height: 200px;

}

#left {

width: 200px;

background-color: green;

}

#center {

width: 100%;

background-color: blue;

}

#right {

width: 300px;

background-color: red;

}

实现如下图

第二步

现在要让left块、right块和center块水平排列,处于统一水平线,因此要让它们浮动起来。加上css样式

#container .column { float: left; }

因为center块的宽度是100%,占据了全部的位置,left块和right块只能下移,但是可以看到footer的居然上移了,这是因为container块的三个子元素都浮动(浮动会脱离文档流)了,即使我们给了三个子元素的height为200px,container的height为0,footer就会上移。

这里清除浮动的办法有三,

1、设置contaniner的高度;

2、footer的样式加上clear:both,可以清除其他元素浮动对它的影响;

3、利用伪元素清除浮动

#container:after {

display: block;

content: '';

width: 100%;

height:0;

clear: both;

}

实现如图

第三步

设置container的padding-left等于left块的宽度,padding-right为right块的宽度

加上样式

#container {

padding-left: 200px;

padding-right: 300px;

box-sizing: border-box;

}

解析:

盒子模型有两种,w3c标准的盒子模式和IE怪异盒子,区别在于padding(内边距)和border(边框)是否算在盒子的width和height里。浏览器默认的盒子模型是content-box,即padding和border不算在width里,因为我们的container的width是100%,如果是content-box,则container表现出来的width要大于整个浏览器的宽度,会看到浏览器下方有滚动条,因此我们设置box-sizing: border-box,让padding算在width里。

实现如图

第四步

要让left块挪到center块的左边,right块挪到center块的右边

原本center块、left块和right块应该是同一水平线排列,因为container的宽度不够(center块的宽度等于container的宽度)在水平线容纳三块,才把left块和right块挤下来

因此我们加上left块的样式margin-left: -100%;

盒子的margin的距离是以盒子对应的方向来计算,负值表示按反方向移动。比如marin-left以盒子的左边来算,margin-right以盒子的右边来算

margin的值如果是按百分比计算,那计算的基础是上一层父级的宽度,在这里即是container的width,又因为center块的width和container块一样,这时候left块和center块重叠了,而且left块在center块上面(如果没有设置层级z-index,当然z-index还要配合position使用,统一层级的元素,当有重叠时,后面的元素会盖住前面的元素)

这时候left块还要再向左移动它自身宽度的位置,也就是200px;

#left {

position: relative;

right: 200px;

}

解析:

relative对象遵循正常文档流,可以根据top,right,bottom,left等属性在正常文档流中偏移位置。right的距离是根据left块的左边位置来计算。

接下来给right块加上样式#right { margin-right: -300px;}

表示right块往左移动300px(刚好覆盖在container的padding-right位置)

整个css代码如下:

body {

width: 100%;

margin: 0;

}

#header,

#footer {

width: 100%;

background-color: #ccc;

}

#container {

width: 100%;

padding-left: 200px;

padding-right: 300px;

box-sizing: border-box;

background-color: yellow;

}

#container:after {

display: block;

content: '';

width: 100%;

height:0;

clear: both;

}

#container .column {

height: 200px;

float: left;

}

#left {

width: 200px;

background-color: green;

margin-left: -100%;

position: relative;

right: 200px;

}

#center {

width: 100%;

background-color: blue;

}

#right {

width: 300px;

background-color: red;

margin-right: -300px;

}

注意:如果你将浏览器的宽度缩小到一定程度,会发现页面的布局出现错乱,这是因为左栏和右栏的宽度和margin值、container的padding值都是写死的,当浏览器的宽度不足以容纳它们时,就会出现错乱。因为我们在写页面的时候应该响应式布局,即不管浏览器的宽度如何变化,我们展示出来的页面依然是完美的(哈哈有点夸张),当然,这肯定会有一个最小宽度要求(pc端看具体需求,移动端一般是按iphone5的宽度320px)

ps:这是我一次写文档,如有错误的地方麻烦各位大佬指正,感谢!!!

html 圣杯布局 高度,圣杯布局——针对前端小白篇相关推荐

  1. 圣杯布局——针对前端小白篇

    什么是圣杯布局 三栏的布局结构,左栏和右栏的宽度固定不变,中间栏的宽度自动填充,会跟着父级元素的宽度变化而变化. 如图所示 header和footer的宽度填充满整个屏幕 缩小或者拉大屏幕,左栏和右栏 ...

  2. 前端必经之路:CSS页面布局(深入理解浮动布局、定位布局、圣杯布局和双飞翼布局等重要布局方案)

    建筑师在对一栋建筑物进行施工之前,首先会根据建筑图纸上的平面图.立体图.剖面图和构造详图等对建筑物进行整体布局后再从局部施工(当然不排除有先装修完厕所再砌卧室围墙的奇葩).在一个网页页面的搭建过程中, ...

  3. 双飞翼布局内容不换行_web前端入门到实战:圣杯布局和双飞翼布局

    稍微了解前端的人都知道,圣杯布局和双飞翼布局是前端面试时必问的问题,因为它既能体现你懂HTML结构又能体现出你对DIV+CSS布局的掌握,毕竟我们学习CSS主要就是为了更好地布局带来最好的用户体验嘛~ ...

  4. 前端布局写法原理理解与总结+记忆(两栏布局、圣杯布局、双飞翼布局)

    实现两栏布局 (左边固定,右边自适应,文档结构是一个父div包裹两个左右div,子元素height设置百分百自动撑满父元素) <div class="outer">&l ...

  5. 【百度前端学院学习笔记】Day9 圣杯布局和双飞翼布局

    [百度前端学院学习笔记]Day9 圣杯布局和双飞翼布局 圣杯布局(古老而费解的方法) 双飞翼布局(圣杯的改进) 参考资料: In search of the Holy Grail - A list a ...

  6. 前端布局:圣杯布局/双飞翼布局(两者小小的区别)

    今天逛知乎日常搜索了几个关于前端面试的问题,本以为学了react之类的框架就可以放弃css,现在想想自己真是太天真了.老前辈们说过:"Css你可以不把每一个属性全都记住,但是你一定要在你需要 ...

  7. 前端经典圣杯布局和双飞翼布局

    介绍 圣杯布局和双飞翼布局解决的问题是一样的 就是两边顶宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染. 圣杯布局和双飞翼布局解决问题的方案在前一半是相同的,也就是三栏全部float浮动 ...

  8. 双飞翼HTML圣杯布局,Web前端:CSS中的圣杯布局与双飞翼布局

    层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态 ...

  9. 八十九、常见的圣杯布局和双飞翼布局

    @Author:Runsen 圣杯布局和双飞翼布局是前端工程师需要日常掌握的重要布局方式. 圣杯布局 圣杯布局是经典的css布局,左右两栏的宽度固定不变,中间那一栏是自适应. 使用弹性盒子布局实现圣杯 ...

  10. Bootstrap4+MySQL前后端综合实训-Day01-AM【实训安排、HBuilder下载及使用、双飞翼布局(圣杯布局)案例、CSS在线手册、flex布局中的对齐方式】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 实训安排 日常要求.项目要求 项目开发流程 HTML+CSS+JavaScript 基 ...

最新文章

  1. 马斯克如何颠覆航天? 1/5385成本,c++和python编程!
  2. 斯坦福新书《决策算法》,694页PDF免费下载
  3. python可以处理任何字符编码文本_python数据类型、字符编码、文件处理
  4. 分隔符怎么打出来_男孩地铁上打奶奶,踹爷爷:熊孩子都是怎么培养出来的?...
  5. Struts2 中#、@、%和$符号的用途
  6. 从一个servlet转发到另一个servlet_javaweb02-创建第一个Servlet
  7. linux如何右键新建文件夹,在Ubuntu 18.04右键菜单中增加新文档(New Document)及其他类型选项...
  8. 学习几个“××在内存中占几份”的若干问题
  9. 程序最小化后释放了很多的内存的原因
  10. MacOS 常用命令汇总
  11. Android音频开发(五)如何存储和解析最简单的音频wav文件
  12. mysql全局读写怎么锁_MySQL全局锁和表锁
  13. 将你的blog变成英文版
  14. python生成图文并茂的pdf--财务报表(三)--页面布局和排版
  15. 【计算机视觉】 opencv双目视觉 立体视觉 三维重建 之理论篇
  16. matlab语言与测绘,MATLAB语言及测绘数据处理应用
  17. ISE WARNING:ProjectMgmt - File /*filePath*/ is missing.解决方法
  18. python 流水作业调度_动态规划——流水作业调度问题
  19. zabbix_agentd.exe [13816]: ERROR: cannot connect to Service Manager: [0x00000005]
  20. ubuntu不能访问windows中的文件

热门文章

  1. 两张图搞懂:共模干扰和差模干扰
  2. 北京大学数学科学学院2006\9\20声明:坚持真理、追求卓越zz
  3. 农林牧渔行业S2B2C系统网站提升品牌知名度,提升盈利水平
  4. Fomo玩法加持的PixelMaster为什么火了?
  5. 亚楠魔域单机V6一键端分享
  6. 经济基础知识(中级)【6】
  7. xp系统打印机服务器报错,XP系统打印机显示Spoolsv.exe应用程序错误如何办?
  8. 用友u8服务器修改ipv4,用友U8-OA11.1 用友U8加密狗更换服务器了-用友U8
  9. influxdb的retention policy
  10. stm8s定时器输出比较模式