常用的页面布局(两栏布局、三栏(圣杯、双飞翼)布局)

article/2025/9/27 16:13:23

1. 两栏布局,左边定宽,右边自适应


//html
<div id="left">左边定宽</div>
<div id="right">右边自适应,前端前端前端前端前端前端前端前端前端前端</div>

1、左边左浮动,右边加oveflow:hidden;变成BFC清除左侧浮动元素的影响
在这里插入图片描述

 #left{float: left;width: 200px;background: green;
}
#right{overflow: hidden;background: red;
}

2. 三栏布局,圣杯布局、双飞翼布局


圣杯布局和双飞翼布局是前端工程师需要日常掌握的重要布局方式。两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局。(中间先加载渲染)

先预览最终布局效果:
圣杯布局与双飞翼布局

圣杯布局来源于文章In Search of the Holy Grail,而双飞翼布局来源于淘宝UED。虽然两者的实现方法略有差异,不过都遵循了以下要点:

  • 两侧宽度固定,中间宽度自适应
  • 中间部分在DOM结构上优先,以便先行渲染
  • 允许三列中的任意一列成为最高列
  • 只需要使用一个额外的<div >外层 标签

圣杯布局

1. DOM结构

<div id="header"></div>
<div id="container"><div id="center" class="column"></div><div id="left" class="column"></div><div id="right" class="column"></div>
</div>
<div id="footer"></div>

首先定义出整个布局的DOM结构,主体部分是由container包裹的center,left,right三列,其中center定义在最前面。

2. CSS代码
假设左侧的固定宽度为200px,右侧的固定宽度为150px,则首先在container上设置:

#container {padding-left: 200px; padding-right: 150px;
}

为左右两列预留出相应的空间,得到如下示意图:

创建布局框架
随后分别为三列设置宽度与浮动,同时对footer设置清除浮动:

#container .column {float: left;
}#center {width: 100%;
}#left {width: 200px; 
}#right {width: 150px; 
}#footer {clear: both;
}

得到如下效果:
设置宽度和清除浮动
根据浮动的特性,由于center的宽度为100%,即占据了第一行的所有空间,所以left和right被“挤”到了第二行。

接下来的工作是将left放置到之前预留出的位置上,这里使用负外边距:

#left {width: 200px; margin-left: -100%;
}

得到:
将left移动到预留位置-1

随后还需要使用定位(position)方法:

#left {width: 200px; margin-left: -100%;position: relative;right: 200px;
}

这里使用position: relativeright: 200px将left的位置在原有位置基础上左移200px,以完成left的放置:
将left移动到预留位置-2

接下来放置right,只需添加一条声明即可:

#right {width: 150px; margin-right: -150px; 
}

得到最终的效果图:
将right移动到预留位置
至此,布局效果完成。不过还需要考虑最后一步,那就是页面的最小宽度:要想保证该布局效果正常显示,由于两侧都具有固定的宽度,所以需要给定页面一个最小的宽度,但这并不只是简单的200+150=350px。回想之前left使用了position: relative,所以就意味着在center开始的区域,还存在着一个left的宽度。所以页面的最小宽度应该设置为200+150+200=550px:

body {min-width: 550px;
}

综上所述,圣杯布局的CSS代码为:

body {min-width: 550px;
}#container {padding-left: 200px; padding-right: 150px;
}#container .column {float: left;
}#center {width: 100%;
}#left {width: 200px; margin-left: -100%;position: relative;right: 200px;
}#right {width: 150px; margin-right: -150px; 
}#footer {clear: both;
}

关于圣杯布局的示例,可参考:圣杯布局

双飞翼布局

1. DOM结构

<body><div id="header"></div><div id="container" class="column"><div id="center"></div></div><div id="left" class="column"></div><div id="right" class="column"></div><div id="footer"></div>
<body>

双飞翼布局的DOM结构与圣杯布局的区别是用container仅包裹住center,另外将.column类从center移至container上。

2. CSS代码

按照与圣杯布局相同的思路,首先设置各列的宽度与浮动,并且为左右两列预留出空间,以及为footer设置浮动清除:

#container {width: 100%;
}.column {float: left;
}#center {margin-left: 200px;margin-right: 150px;
}#left {width: 200px; 
}#right {width: 150px; 
}#footer {clear: both;
}

得到如下效果示意图:
双飞翼布局初始设置

以上代码将container,left,right设置为float: left,而在container内部,center由于没有设置浮动,所以其宽度默认为container的100%宽度,通过对其设置margin-leftmargin-right为左右两列预留出了空间。

将left放置到预留位置:

#left {width: 200px; margin-left: -100%;
}

得到:
放置left到预留位置

将right放置到预留位置:

#right {width: 150px; margin-left: -150px;
}

得到最终效果:

双飞翼布局最终效果

最后计算最小页面宽度:由于双飞翼布局没有用到position:relative进行定位,所以最小页面宽度应该为200+150=350px。但是当页面宽度缩小到350px附近时,会挤占中间栏的宽度,使得其内容被右侧栏覆盖,如下所示:

中间栏内容被覆盖

因此在设置最小页面宽度时,应该适当增加一些宽度以供中间栏使用(假设为150px),则有:

body {min-width: 500px;
}

至此双飞翼布局大功告成!其布局整体代码为:

body {min-width: 500px;
}#container {width: 100%;
}.column {float: left;
}#center {margin-left: 200px;margin-right: 150px;
}#left {width: 200px; margin-left: -100%;
}#right {width: 150px; margin-left: -150px;
}#footer {clear: both;
}

关于双飞翼布局的示例,可参考:双飞翼布局

总结与思考

通过对圣杯布局和双飞翼布局的介绍可以看出,圣杯布局在DOM结构上显得更加直观和自然,且在日常开发过程中,更容易形成这样的DOM结构(通常<aside><article>/<section>一起被嵌套在<main>中);而双飞翼布局在实现上由于不需要使用定位,所以更加简洁,且允许的页面最小宽度通常比圣杯布局更小。

使用flex

这里使用flex还是需要与圣杯布局相同的DOM结构,不过在实现上将更加简单:

<!-- DOM结构 -->
<div id="container"><div id="center"></div><div id="left"></div><div id="right"></div>
</div>

CSS代码如下:


#container {display: flex;
}#center {flex: 1;
}#left {flex: 0 0 200px;order: -1;
}#right {flex: 0 0 150px;
}

本文引用了[https://www.jianshu.com/p/81ef7e7094e8]内容,感谢原作者付出。


http://chatgpt.dhexx.cn/article/hESXa7OL.shtml

相关文章

flex布局、圣杯布局以及双飞翼布局

Flex布局 &#xff08;弹性盒布局&#xff09; 1、flex弹性盒布局 一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间 2、弹性盒子内…

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

今天逛知乎日常搜索了几个关于前端面试的问题&#xff0c;本以为学了react之类的框架就可以放弃css&#xff0c;现在想想自己真是太天真了。老前辈们说过&#xff1a;“Css你可以不把每一个属性全都记住&#xff0c;但是你一定要在你需要的时候知道去哪里找。”不过这句话有迷惑…

前端基础(十五)_多栏布局(两列自适应布局、圣杯布局---三列布局、双飞翼布局--三列布局、等高布局)

什么是自适应&#xff1f; 自适应&#xff1a;让同一个页面自动适应不同大小的设备&#xff0c;从而解决为不同设备提供不同版本页面的问题。 自适应布局&#xff1a;解决在不同大小的设备上呈现相同网页的问题 两列自适应布局 1、Html结构中–左右两个盒子&#xff1b; 2、…

实现双飞翼布局的三种方式

实现双飞翼布局的三种方式 使用定位来实现 实现流程&#xff1a; 1.父盒子相对定位&#xff0c;左右 padding 为子盒子宽度&#xff0c;左右子盒子绝对定位&#xff0c;宽度写死&#xff1b; 2.左边子盒子 left top 给 0&#xff0c;右边子盒子 right top 给 0&#xff1b;…

2. 双飞翼布局

前端面试总结 本笔记由作者在复习前端CSS部分的相关的一些总结, 如果有什么错误的地方或者有什么相关的建议欢迎联系我 这份笔记借鉴了很多网上的文章, 如果有雷同或者相似的地方, 不用怀疑, 那就是搬得, 如果你是当中一些文章得作者, 如果觉得这种行为不恰当, 请与我联系, 收到…

双飞翼布局

双飞翼布局 一、什么是双飞翼布局 双飞翼布局则是源于淘宝的UED&#xff0c;可以说是灵感来自于页面渲染。一起来看看淘宝的头部实现&#xff1a;就是两边定宽&#xff0c;中间自适应的三栏布局&#xff0c;中间栏要放在文档流前面以优先渲染。 二、HTML布局 首先设置一个co…

圣杯布局和双飞翼布局

双飞翼布局与圣杯布局 圣杯布局和双飞翼布局是前端工程师需要日常掌握的重要布局方式。两者的功能相同&#xff0c;都是为了实现一个两侧宽度固定&#xff0c;中间宽度自适应的三栏布局。 特点&#xff1a; 两侧宽度固定&#xff0c;中间宽度自适应&#xff08;三栏布局&…

圣杯布局和双飞翼布局详解

圣杯布局 刚学圣杯双飞翼布局&#xff0c;有点蒙&#xff0c;特写下来加深印象 首先要明确 圣杯布局和双飞翼布局 要解决的问题是什么&#xff1f; 要解决的就是让浏览器先加载最总要的那部分给客户看&#xff0c;我们做前端开发的时候要切合实际场景开发&#xff0c;合理布局…

实现双飞翼布局

说到圣杯布局和双飞翼布局&#xff0c;始终都是面试的高频考点&#xff0c;问题方式也大同小异&#xff0c;比如&#xff0c;实现一个左右固定&#xff0c;中间自适应的布局&#xff1b;实现一个中间部分优先加载的布局…… 现如今&#xff0c;很多web端的应用&#xff0c;他们…

CSS经典布局--圣杯布局和双飞翼布局

圣杯布局与双飞翼布局&#xff0c;都是属于三列布局的经典布局。 双飞翼布局是圣杯布局的优化版&#xff0c;由淘宝UED提出&#xff1b; 它们的效果图类似&#xff0c;但是实现方法不同。 文章目录 一、圣杯布局和双飞翼布局的常规方法1.圣杯 position 解决&#xff08;不推荐&…

前端页面布局之双飞翼布局

1.双飞翼布局说明 双飞翼布局分为 左&#xff0c;中&#xff0c;右三个部分。 左右宽度固定&#xff0c;中间部分自适应 2.双飞翼布局实例 2.1 双飞翼布局float实现 三个部分通过按顺序向左浮动实现。 <!DOCTYPE html> <html lang"en"><head>…

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

圣杯布局和双飞翼布局的共同点&#xff1a; 三列布局&#xff0c;两边定宽&#xff0c;中间自适应布局&#xff0c;要注意的是中间栏(重要的东西)要在放在文档流前面以优先渲染。 1、圣杯式布局定义&#xff1a; 圣杯布局是两边固定宽度&#xff0c;中间自适应的三栏布局&…

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

相同点和不同点 两者的功能相同&#xff0c;都是为了实现一个两侧宽度固定&#xff0c;中间宽度自适应的三栏布局&#xff0c;并且中间部分在HTML代码中要写在前边&#xff0c;这样它就会被优先加载渲染。 主要的不同之处就是在解决中间部分被挡住的问题时&#xff0c;采取的…

双飞翼布局与圣杯布局完全解读

一、两种布局的目的 使得左右两边的宽度不随着浏览器窗口的变化而变化&#xff0c;是固定的&#xff0c;只有中间的部分才可以随着窗口变化而变化。 二、两种布局的要点 经典圣杯布局通过父亲padding给左右俩腾位置从而不会遮住middle内容&#xff0c;而双飞翼是通过设置margin…

双飞翼布局和圣杯布局

双飞翼布局和圣杯布局是前端工程师需要日常掌握的重要布局方式。两者的功能相同&#xff0c;都是为了实现一个两侧宽度固定&#xff0c;中间宽度自适应的三栏布局。&#xff08;中间先加载渲染&#xff09; 双飞翼的布局与实现原理&#xff08;推荐使用双飞翼布局&#xff09;…

圣杯布局与双飞翼布局

圣杯布局 圣杯布局是三列布局&#xff0c;中间宽度自适应&#xff0c;两边定宽&#xff0c;这样做的优势是重要的东西放在文档流前面可以优先渲染。也就是在html文档中&#xff0c;中间的部分要写在左右布局之前。 当然&#xff0c;这种布局是面向PC端的&#xff0c;移动端由于…

双飞翼布局(css)

1. DOM结构 <div class"head"></div><div class"container column"><div class"center"></div></div><div class"left column"></div><div class"right column"><…

经典布局-双飞翼

文章目录 一、双飞翼布局1. 具体实现 一、双飞翼布局 产生的背景&#xff1a; 针对圣杯布局的缺点&#xff0c;淘宝的工程署们提出了双飞翼布局&#xff0c;原理&#xff1a;在中间区域加一层dom节点&#xff0c;然后添加左右margin&#xff0c;实现三栏布局。 1. 具体实现 代…

双飞翼布局详解

作用&#xff1a; 圣杯布局和双飞翼布局解决的问题是相同的&#xff0c;就是两边顶宽&#xff0c;中间自适应的三栏布局&#xff0c;中间栏要在放在文档流前面以优先渲染。 原理&#xff1a; 双飞翼布局为了让中间div内容不被遮挡&#xff0c;直接在中间div内部创建子div用于…

圣杯布局、双飞翼布局具体实现原理和实现方法

为啥写这篇文章 网上关于这两种布局的文章大多数都只是给了代码实现&#xff0c;而没有说出其中关键性代码的作用和原理。 布局实现的目的 1.三列布局&#xff0c;两端固定宽度(其实可以不用固定宽度&#xff09;&#xff0c;中间栏自适应。 2.中间栏优先渲染。 3.任意栏高度…