css-前端实现左中右三栏布局的常用方法:绝对定位,圣杯,双飞翼,flex,table-cell,网格布局等
1.前言
作为一个前端开发人员,工作学习中经常会遇到快速构建网页布局的情况,这篇我整理了一下我知道的一些方法。我也是第一次总结,包括圣杯布局,双飞翼布局,table-cell布局都是第一次听说,可能会有需要修改的地方请谅解。三栏布局顾名思义,就是左右两侧宽高固定,中间一列居中切随着浏览器页面变化。下面来看下具体的实现方法:
2.具体实现方法
实现效果如下:

(1)绝对定位方法
<div class="box">
<div class="left">left</div>
<div class="main">main</div>
<div class="right">right</div>
</div>
.box {
border: 1px solid red;
height: 200px;
position: relative;
overflow: hidden;
}
.main {
background-color: springgreen;
position: absolute;
left: 150px;
right: 150px;
top: 0px;
bottom: 0px;
}
.left {
background-color: tomato;
float: left;
width: 100px;
height: 200px;
}
.right {
background-color: pink;
float: right;
width: 100px;
height: 200px;
}
总结:绝对定位方法其实就是首先给父盒子设置position:relative和overflow:hidden,然后分别左右两个盒子向两边设置浮动,中间的盒子使用绝对定位并设置其相对父元素左右的间隔使得把中间盒子两边撑开,最后设置中间盒子的top和bottom值把其高度撑开。
(2)圣杯布局
说圣杯布局之前先来了解下什么是圣杯布局,首先看见这个名字,圣杯,其实就是我们饮酒的那个杯子,最主要的特点,分为上中下三个部分,这就不难想到我们平常遇到的网页也是属于这个结构的,顶部一般的导航栏,搜索框了,中间一般分两三个部分了,占中间位置的主题内容,两边的小标题区域了,排行榜区域了,等等,这里我们所说的圣杯布局主要针对中间三部分来使用一下。这种方式使得中间盒子最先渲染出来。
<div class="box">
<div class="main">main</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
<style>
.box {
border: 1px solid red;
overflow: hidden;
padding: 0 200px;
}
.main {
width: 100%;
height: 200px;
position: relative;
float: left;
background-color: springgreen;
}
.left {
background-color: tomato;
position: relative;
float: left;
margin-left: -100%;
left: -200px;
width: 200px;
height: 200px;
}
.right {
background-color: pink;
position: relative;
float: left;
margin-left: -200px;
right: -200px;
width: 200px;
height: 200px;
}
</style>
总结:圣杯布局就是首先把中间盒子放在最前面,然后三栏都设置为浮动并且相对定位,给左右两个盒子设置固定宽度,中间盒子设置100%宽度,此时父盒子宽度被中间盒子占满,左右两个盒子被挤在下面,由于浮动,给左盒子margin-left:-100%使得左侧盒子挤到中间盒子左侧,给右边盒子设置margin-left:-200px;使得右侧盒子在中间盒子右侧,这样就实现了左中右排列,但是此时中间盒子被两侧盒子覆盖,因此需要设置父盒子padding:0 200px;并且给左右两个盒子分别设置left:-200px;right:-200px;(即左右两个盒子分别偏移自身的宽度去覆盖掉中间盒子被挤的那一部分就好了),这样圣杯布局就完成了。但是由于设置了父盒子的padding,当浏览器窗口太小会出现混乱。
(3)双飞翼布局
由于圣杯布局对浏览器最小宽度有限制,经常出现问题,于是双飞翼布局就出现了,专门解决这种bug,下面看下具体实现:
<div class="box">
<div class="wrap">
<div class="main">main</div>
</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
<style>
.box {
border: 1px solid red;
overflow: hidden;
}
.wrap {
width: 100%;
position: relative;
float: left;
background-color: black;
}
.main{
background-color: springgreen;
margin: 0 200px;
overflow: hidden;
height: 200px;
}
.left {
background-color: tomato;
position: relative;
float: left;
margin-left: -100%;
width: 200px;
height: 200px;
}
.right {
background-color: pink;
position: relative;
float: left;
margin-left: -200px;
width: 200px;
height: 200px;
}
</style>
总结:圣杯布局由于宽度小时出现混乱,双飞翼其实就是给中间的盒子包裹一层,里面的一层通过margin来实现了圣杯布局的padding,具体实现过程前两步相同,首先中间盒子在最前面,并设置了宽度100%,导致中间的盒子占用一整行,然后通过浮动,设置左右两边的盒子覆盖在中间盒子上面,从而达到了左中右三个盒子的效果,由于左右两个盒子覆盖在中间盒子上面,需要把真正想要的中间盒子嵌套进去一层,最终得到了双飞翼的效果,浏览器无论怎么变化没再也不用担心混乱问题了。这种方式也使得中间盒子最先渲染出来。
(4)flex布局
flex布局工作中经常用到,对我来说这个时用的最6的一种方式了,毕竟当前使用最多的布局了吧,尤其做移动端开发的,更别说WEEX页面默认flex布局了,你不知道flex布局真的需要去学习了。
<div class="box">
<div class="left">left</div>
<div class="main">main</div>
<div class="right">right</div>
</div>
<style>
.box {
border: 1px solid red;
overflow: hidden;
display: flex;
justify-content: center;
}
.main {
height: 200px;
flex: 4;
background-color: springgreen;
}
.left {
background-color: tomato;
height: 200px;
flex: 1;
}
.right {
background-color: pink;
height: 200px;
flex: 1;
}
</style>
总结:flex布局是一种弹性布局,用来为盒装模型提供最大的灵活性。具体使用请全面学习。
(5)table-cell布局
<div class="box">
<div class="left">left</div>
<div class="main">main</div>
<div class="right">right</div>
</div>
总结:给三栏都设置表格单元display:table-cell,然后分别设置左中右三个盒子宽度,左右盒子:width:200px;中间盒子:width:100%;这时会出现左右两侧盒子被挤到两边,因此分别设置min-width:200px;就解决了这个问题,古纳于这个布局我接触的比较少,今日这么一使用果然方便,日后遇到我得试试。这种布局方式能使得三栏的高度是统一的,但不能使center放在最前面得到最先渲染。
(6)网格布局
<div class="box">
<div class="left">left</div>
<div class="main">main</div>
<div class="right">right</div>
</div>
<style>
.box {
border: 1px solid red;
display: grid;
width: 100%;
grid-template-rows: 100px;
grid-template-columns: 200px auto 200px;
}
.main {
background-color: springgreen;
}
.left {
background-color: tomato;
}
.right {
background-color: pink;
}
</style>
总结:我惊呆了啊,这网格布局如此强大吗?具体实现:设置网格布局,设置三栏高度,设置三栏宽度,中间自适应没两边固定,短短几行代码实现了圣杯双飞翼那么多代码的效果,网格布局如此强大,打开官网才发现,目前还有很多兼容性问题,好吧,只能先练练手了。
3.结束:常见需要手写的布局就这些了,当然你也可以使用第三方的ui库提供的需要布局,但是作为一个前端开发,更注重的还是要会学习一些具体的实现逻辑,而不是只会搬用一下API,模板之类的,希望对看到的人有些许帮助,有错误还请指正,谢谢啦!!如果觉得还不错,请点下关注一起成长啦!

css-前端实现左中右三栏布局的常用方法:绝对定位,圣杯,双飞翼,flex,table-cell,网格布局等的更多相关文章
- [FlyCapture2] Bumblebee XB3 Save Images to Three AVI Files (Left, Center and Right) 大黄蜂立体相机保存捕获的视频到左中右三个不同的文件
PointGreyResearch是世界领先的致力于开发高级数字相机产品的公司.PointGrey产品涉及IEEE-1394相机.立体视觉相机和360度全景数字视频相机.其中二代和三代的大黄蜂立体相机 ...
- css Position 上下左中右布局
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- c# winForm 将窗体状态栏StatusStrip 分成左中右三部分 右边显示当前时间
实现效果:通过StatusStrip显示窗体状态栏同时将状态栏分成三部分居左边显示相关文字信息中间空白显示居右边显示时间信息 1.创建窗体及添加StatusStrip 默认StatusStrip名称 ...
- Css的向左浮动、先右浮动、绝对定位、相对定位的简单使用
1.div层的浮动 1)div向左浮动.向右浮动 <!doctype html> <html> <head> <meta charset="utf- ...
- 前端一面/面试常考题1-页面布局:假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应。
题目:假设高度已知,请写出三栏布局,其中左栏.右栏宽度各为300px,中间自适应. [题外话:日常宣读我的目标===想要成为一名优雅的程序媛] 一.分析 1. 题目真的像我们想得这么简单吗? 其实不然 ...
- 记一道css面试题 : 三栏布局两边宽度固定,中间宽度自适应,并且布局随屏幕大小改变。
前几天面试时有道css题没做出来,回来好好学习一番后把其记录下来. 题目是这样的:左中右三栏布局,左右两栏宽度固定,左右两栏的宽度为200像素,中间栏宽度自适应.当屏幕小于600px时,3栏会分别占用 ...
- css实现三栏自适应布局(两边固定,中间自适应)以及优缺点
方法一:绝对定位(absolute + margin) 原理:给左右两边的元素设置absolute,这样左右两边的元素脱离标准文档流的控制,中间的元素自然会上来,然后给中间的元素设置margin留出左 ...
- 三栏布局只知道圣杯、双飞翼,最终评级是……F
三栏布局,面试与工作中的常见布局.分左中右三部分,其中左右宽度已知,中间宽度自适应.根据不同的DOM顺序与CSS处理,这里写下了五类布局方式. 一.浮动布局 1 圣杯布局 L:"我问你,你就 ...
- CSS Grid网格布局全攻略
CSS Grid网格布局全攻略 所有奇技淫巧都只在方寸之间. 几乎从我们踏入前端开发这个领域开始,就不停地接触不同的布局技术.从常见的浮动到表格布局,再到如今大行其道的flex布局,css布局技术一直 ...
随机推荐
- Python高级语法-import导入-sys.path(4.4.1)
@ 目录 1.说明 2.代码 关于作者 1.说明 在开发程序的过程中,往往使用sys.path去验证下导入的目录,返回的是列表 先后顺序,就是扫描的先后顺序 ,也可以加入搜索路径 import有个特点 ...
- Python批量创建word文档(2)- 加图片和表格
Python创建word文档,任务要求:小杨在一家公司上班,每天都需要给不同的客户发送word文档,以告知客户每日黄金价格.要求在文档开始处给出banner条,价格日期等用表格表示.最后贴上自己的联系 ...
- C# 队列Queue,ConcurrentQueue,BlockingCollection 并发控制lock,Monitor,信号量Semaphore
什么是队列? 队列Queues,是一种遵循先进先出的原则的集合,在.netCore中微软给我们提供了很多个类,就目前本人所知的有三种,分别是标题提到的:Queue.ConcurrentQueue.Bl ...
- Filezilla账号设置多个文件夹
问题描述 一个账号,使用多个文件目录.虽然可以这样设置,但是实际上客户端使用时只能使用一个目录(主目录). 所以想找一种方式,访问一个主目录时,也可以访问到其他的目录. 官网示例 https://wi ...
- ubuntu20部署php-swoole开发环境
第1步:安装依赖 add-apt-repository ppa:ondrej/php apt install php-dev 第2步:编译安卓swoole wget https://codeload. ...
- Excel 冻结窗口
1.冻结前五行 鼠标选中第六行,点击视图----> 冻结窗口 ----> 冻结拆分窗口 2.冻结第一列窗口 鼠标选中第1列,点击视图----> 冻结窗口 ----> 冻结首列窗 ...
- php + redis 实现关注功能
产品价值 1: 关注功能 2: 功能分析之"关注"功能 3: 平平无奇的「关注」功能,背后有4点重大价值 应用场景 在做PC或者APP端时,掺杂点社交概念就有关注和粉丝功能; 数据 ...
- CODING 静态网站服务升级,快速、稳定、高拓展!
CODING 静态网站拥有强大的页面托管服务,目前已有数万开发者.设计师.产品经理.团队与企业使用 CODING 静态网站托管了他(她)们的个人网站.博客.企业与产品官网.在线文档等.CODING 静 ...
- 入门oj 6451: The XOR Largest Pair之二
Description 今天小W用了1s不到的时候完成了这样一个题:在给定的N个整数 A_1,A_2,-,A_N中选出两个进行异或运算,得到的结果最大是多少?正当他志得意满时,L老师亮出了另一个题:给 ...
- Android多线程消息处理机制
(1)主线程和ANR 主线程:UI线程,界面的修改只能在主线程中,其它线程对界面进行修改会造成异常.这样就解决了多线程竞争UI资源的问题. 一旦主线程的代码阻塞,界面将无法响应,这种行为就是Appli ...