CSS系列,三栏布局的四种方法
三栏布局、两栏布局都是我们在平时项目里经常使用的,今天我们来玩一下三栏布局的四种写法,以及它的使用场景。
所谓三栏布局就是指页面分为左中右三部分然后对中间一部分做自适应的一种布局方式。
1.绝对定位法
<div class="left">Left</div>
<div class="main">Main</div>
<div class="right">Right</div>
/* 简单的进行CSS reset */
body,
html {
height: 100%;
padding: 0px;
margin: 0px;
} /* 左右绝对定位 */
.left,
.right {
position: absolute;
top: 0px;
background: beige;
height: 100%;
} .left {
left: 0;
width: 100px;
} .right {
right: 0px;
width: 200px;
} /* 中间使用margin空出左右元素所占据的空间 */
.main {
margin: 0px 200px 0px 100px;
height: 100%;
background: gray;
}
该方法有个明显的缺点,就是如果中间栏含有最小宽度限制,或是含有宽度的内部元素,当浏览器宽度小到一定程度,会发生层重叠的情况。
2. 圣杯布局
//注意元素次序
<div class="main">Main</div>
<div class="left">Left</div>
<div class="right">Right</div>
/* CSS reset */
body,html{
height:100%;
padding: 0;
margin: 0
}
/* 父元素body空出左右栏位 */
body {
padding-left: 100px;
padding-right: 200px;
}
/* 左边元素更改 */
.left {
background: beige;
width: 100px;
float: left;
margin-left: -100%;
position: relative;
left: -100px;
height: 100%;
}
/* 中间部分 */
.main {
background: gray;
width: 100%;
height: 100%;
float: left;
}
/* 右边元素定义 */
.right {
background: beige;
width: 200px;
height: 100%;
float: left;
margin-left: -200px;
position: relative;
right: -200px;
}
相关解释如下:
- (1)中间部分需要根据浏览器宽度的变化而变化,所以要用100%,这里设左中右向左浮动,因为中间100%,左层和右层根本没有位置上去
- (2)把左层margin负100后,发现left上去了,因为负到出窗口没位置了,只能往上挪
- (3)按第二步这个方法,可以得出它只要挪动窗口宽度那么宽就能到最左边了,利用负边距,把左右栏定位
- (4)但由于左右栏遮挡住了中间部分,于是采用相对定位方法,各自相对于自己把自己挪出去,得到最终结果
3. 双飞翼布局
<div class="main">
<div class="inner">
Main
</div>
</div>
<div class="left">Left</div>
<div class="right">Right</div>
/* CSS reset */
body,html {
height:100%;
padding: 0;
margin: 0
}
body {
/*padding-left:100px;*/
/*padding-right:200px;*/
}
.left {
background: beige;
width: 100px;
float: left;
margin-left: -100%;
height: 100%;
/*position: relative;*/
/*left:-100px;*/
}
.main {
background: gray;
width: 100%;
float: left;
height: 100%;
}
.right {
background: beige;
width: 200px;
float: left;
margin-left: -200px;
height: 100%;
/*position:relative;*/
/*right:-200px;*/
}
/* 新增inner元素 */
.inner {
margin-left: 100px;
margin-right: 200px;
}
圣杯布局看起来是复杂的,后期维护性也不是很高,在淘宝UED的探讨下,出来了一种新的布局方式就是双飞翼布局。
代码如上。增加多一个div就可以不用相对布局了,只用到了浮动和负边距。和圣杯布局差异的地方已经被注释。
4. 浮动
<div class="left">Left</div>
<div class="right">Right</div>
<div class="main">Main</div>
/* CSS reset */
body,html {
height:100%;
padding: 0;
margin: 0
}
/* 左栏左浮动 */
.left {
background: beige;
width: 100px;
float: left;
height: 100%;
}
/* 中间自适应 */
.main {
background: gray;
height: 100%;
margin:0px 200px 0px 100px;
}
/* 右栏右浮动 */
.right {
background: beige;
width: 200px;
float: right;
height: 100%;
}
这种方式代码足够简洁与高效,也容易理解
提点
四种方法其实只有圣杯布局和双飞翼布局较难理解,但实际上理解了圣杯布局,双飞翼布局自然就理解了。
CSS系列,三栏布局的四种方法的更多相关文章
- CSS三栏布局的四种方法
总括: 不管是三栏布局还是两栏布局都是我们在平时项目里经常使用的,也许你不知道什么事三栏布局什么是两栏布局但实际已经在用,或许你知道三栏布局的一种或两种方法,但实际操作中也只会依赖那某一种方法,本文具 ...
- css 实现三栏布局的四种方式
三栏布局就是左中右,左右两边固定,中间自适应. 1. 绝对定位 <div class="left">左边</div> <div class=" ...
- Layout 实现三栏布局的几种方法
https://github.com/ljianshu/Blog/issues/14 布局参考 https://github.com/ljianshu/Blog/issues/38 响应式那点 ...
- CSS实现三栏布局(5种)
常见的布局方式: float布局.Position定位.table布局.弹性(flex)布局.网格(grid)布局 那么我们就是用以上5种方式完成三栏布局,不过前提是左右宽度(假如左右宽度为300px ...
- 前端经典面试题之CSS实现三栏布局,左右宽度固定,中间宽度自适应
前端常问的面试题,题目:假设高度一定,请写出三栏布局,左右宽度300px,中间自适应. 看到这里我希望你能停下来思考几分钟, 1分钟~2分钟~3分钟~4分钟~5分钟! 好了,那么你想出了几种答案呢? ...
- css+div制作圆角矩形的四种方法
圆角矩形一向是设计师最倾心的一种设计,因为他们可以让整个网页生动起来,不那么死板,所以,作为一个优秀的网页设计师,学会一种或多种编辑圆角矩形的方法是必不可少的,而且圆角矩形应用范围极广,一个网页内的所 ...
- 【CSS】三栏布局的经典实现
要求:自适应宽度,左右两栏固定宽度,中间栏优先加载: <!DOCTYPE html> <html> <head> <title>layout</t ...
- css实现三栏布局,两边定宽,中间自适应
1.利用定位实现 css代码如下: .box{overflow: hidden;height: 100px;margin: 10px 0;} .box>div{height: 100%;} #b ...
- Spring Ioc源码分析系列--容器实例化Bean的四种方法
Spring Ioc源码分析系列--实例化Bean的几种方法 前言 前面的文章Spring Ioc源码分析系列--Bean实例化过程(二)在讲解到bean真正通过那些方式实例化出来的时候,并没有继续分 ...
随机推荐
- Luogu P4390 [BOI2007]Mokia 摩基亚 | CDQ分治
题目链接 $CDQ$分治. 考虑此时在区间$[l,r]$中,要计算$[l,mid]$中的操作对$[mid+1,r]$中的询问的影响. 计算时,排序加上树状数组即可. 然后再递归处理$[l,mid]$和 ...
- POJ 2536 Gopher II(二分图最大匹配)
题意: N只地鼠M个洞,每只地鼠.每个洞都有一个坐标. 每只地鼠速度一样,对于每只地鼠而言,如果它跑到某一个洞的所花的时间小于等于S,它才不会被老鹰吃掉. 规定每个洞最多只能藏一只地鼠. 问最少有多少 ...
- Django 前端BootCSS 实现分页
通过使用bootstrap框架,并配合Django自带的Paginator分页组件即可实现简单的分页效果. 1.创建MyWeb项目 python manage.py startapp MyWeb 2. ...
- MySQL报错汇总[10/29更新]
- DeWeb第1个通用化模块:登录模块,仅需要修改一个配置文件即可实现登录功能
演示: https://delphibbs.com/login.dw 开发环境和源代码 https://gitee.com/xamh/dewebsdk 效果图: 配置方法: 在Runtime目录中放一 ...
- Redis网络库源码分析(2)之启动服务器
一.从main开始 main函数定义在server.c中,它的内容如下: //server.c int main() { signal(SIGPIPE, SIG_IGN); //忽略SIGPIPE信号 ...
- idea连接数据库时区错误
错误界面 IDEA连接mysql,地址,用户名,密码,数据库名,全都配置好了,点测试连接,咔!不成功! 界面是这样的, 翻译过来就是:服务器返回无效时区.进入"高级"选项卡,手动设 ...
- 【大爽python算法】递归算法进化之回溯算法(backtracking)
作者自我介绍:大爽歌, b站小UP主 , python1对1辅导老师, 时常直播编程,直播时免费回答简单问题. 前置知识: 递归算法(recursion algorithm). 我的递归教程: [教程 ...
- [cf1479D]Odd Mineral Resource
先考虑判定是否有解,注意到无解即每一个数都出现偶数次,根据异或的性质,只需要随机$V_{i}$,假设$u$到$v$路径上所有节点构成集合$S$,若$\bigoplus_{x\in S,l\le a_{ ...
- App 端自动化的最佳方案,完全解放双手!
1. 前言 大家好,我是安果! 之前写过一篇文章,文中提出了一种方案,可以实现每天自动给微信群群发新闻早报 如何利用 Python 爬虫实现给微信群发新闻早报?(详细) 但是对于很多人来说,首先编写一 ...