CSS的自适应两栏/三栏布局
来源:互联网 发布:电子教室软件免费版 编辑:程序博客网 时间:2024/06/03 03:26
写本文主要是为了解决利用CSS的流体特性实现自适应的两栏/三栏布局
#先来了解一下什么是BFC
1.BFC的定义
全称Block Formatting Context,中文直译为块级格式上下文。BFC就是一种布局方式,在这种布局方式下,盒子们自所在的containing block顶部一个接一个垂直排列,水平方向上撑满整个宽度(除非内部盒子自己建立了新的BFC)。两个相邻的BFC之间的距离由margin决定。在同一个BFC内部,两个垂直方向相邻的块级元素的margin会发生“塌陷”。
由上可知,垂直相邻盒子margin合并的解决办法:就是给这两个盒子也创建BFC。通俗一点,可以把BFC理解为一个封闭的大箱子,箱子内部的元素无论如何翻江倒海,都不会影响到外部
2.如何创建BFC
float属性不为none
浮动元素本身BFC化,然而浮动元素有破坏性和包裹性,失去了元素本身的流体自适应性,因此,无法用来实现自动填满容器的自适应布局。不过,其因兼容性还算良好,与堆积木这种现实认知匹配,上手简单,因此在旧时代被大肆使用,也就是常说的“浮动布局”,也算阴差阳错开创了自己的一套布局。
overflow不为visible(可以是hidden、scroll、auto)
不像浮动和绝对定位,也就是溢出剪裁,本身还是个很普通的元素。因此,块状元素的流体特性保存相当完好
position为absolute或fixed
脱离文档流了
display为inline-block、table-cell、table-caption
没有过多接触,如果有用到再过来补充
3.BFC的作用
1) 清除内部浮动
我们在布局时经常会遇到这个问题:对子元素设置浮动后,父元素会发生高度塌陷,也就是父元素的高度变为0。解决这个问题,只需要把把父元素变成一个BFC就行了。常用的办法是给父元素设置overflow:hidden。
2) 垂直margin合并
在CSS当中,相邻的两个盒子的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠,并且因而所结合成的外边距称为折叠外边距。我在另外一篇博文里面有提到折叠外边距的计算规则
3) 创建自适应两栏布局
下面就是 具体介绍自适应的两栏布局及扩展的三栏布局
4.BFC自适应布局优势
- 摘自张鑫旭网站
自适应内容由于封闭,更健壮,容错性强。比方说,内部clear:both不会与兄弟float产生矛盾。而纯流体布局,
clear:both
会让后面内容无法和float元素在一个水平上,产生布局问题自适应内容自动填满浮动以为区域,无需关心浮动元素宽度,可以整站大规模应用。而纯流体布局,需要大小不确定的
margin/padding
等值撑开合适间距,无法CSS组件化。
#两栏自适应布局
//第一种方式
1. 给父级设置样式 overflow:auto;
形成BFC,形成独立区域
2. 给 写文字的div设置样式 margin-left: 230px;
<head> <style type="text/css"> body{ background-color: #b2b0b0; } .flow-box { width: 500px; background-color: #eee; overflow:auto; resize:horizontal; } .flow-content { margin-left: 230px; } </style></head>
<body><div class="flow-box"> <img src="img/blogs.jpg" width="220" height="241" style="float: left;"> <div class="flow-content"> 塞了个借口胜利而公开很高可能是佛写得,首付款你的说法是客服会送到附近 是会计当官会见到访有天赋的是单镜反光设计开发的啊我发深刻搭街坊代码发布爵士鼓速度发货考试的价格是大家看过阿哥 塞了个借口胜利而公开很高可能是佛写得,首付款你的说法是客服会送到附近 塞了个借口胜利而公开很高可能是佛写得,首付款你的说法是客服会送到附近 塞了个借口胜利而公开很高可能是佛写得,首付款你的说法是客服会送到附近 塞了个借口胜利而公开很高可能是佛写得,首付款你的说法是客服会送到附近 是会计当官会见到访有天赋的是单镜反光设计开发的啊我发深刻搭街坊代码发布爵士鼓速度发货考试的价格是大家看过阿哥 </div></div></body>
//第二种方式
1. 给父级设置样式 overflow:hidden;
形成BFC,形成独立区域
2. 给 写文字的div设置样式文字溢出隐藏样式
3. 给图片设置float: left; margin-right: 20px;
样式
<style type="text/css"> body{ background-color: #b2b0b0; } .flow-box { background-color: #eee; overflow:hidden; resize:horizontal; height:300px; } .flow-content { background-color: #beceeb; overflow: hidden; } img { float: left; margin-right: 20px; } </style>
两种布局均显示结果如下两图所示:
可以看到,整个大的块右下角有一个三角形样子的东西,可以拖动它水平拉伸,可以看到,不管什么时候左边图都是不动的,而且文字会根据块的大小铺满整个右边部分,而不会显示在图片底下,这就是自适应两栏布局
#三栏自适应布局
<style type="text/css"> .left{ width:200px; background-color: #beceeb; height:300px; float: left; margin-left: -100%; } .main{ width:100%; height:300px; float: left; } .content{ height:300px; background-color: #E77F24; margin: 0 200px; } .right{ width:200px; height:300px; background-color: #b2b0b0; float: left; margin-left: -200px; } </style>
<body><div class="box"> <div class="main"> <div class="content"></div> </div> <div class="left"></div> <div class="right"></div></div></body>
布局显示结果如下两图所示:
可以拖动右边检查区的边水平拉伸整个可视区,可以看到,不管什么时候左边和右边元素都是不动的,而且中间块会适应整个可视区,这就是自适应三栏布局
阅读全文
0 0
- CSS的自适应两栏/三栏布局
- css实现等高布局 两栏自适应布局 三栏自适应布局
- 浅谈CSS两栏、三栏自适应布局
- CSS三栏自适应布局
- html+css:一个自适应的两栏布局的实现
- css实现两栏自适应布局
- css三栏布局,中间自适应
- 使用css实现三栏自适应布局
- CSS:两栏布局,三栏布局
- css布局之浮动模型&&左右两栏自适应布局
- 两栏自适应布局
- 两栏自适应布局
- css布局:table布局、两栏布局、三栏布局
- 中间固定,两边自适应的三列布局、两边固定,中间自适应的三列布局、左侧栏固定,右侧自适应的两列布局
- CSS布局:中栏固定宽度,左右两栏宽度自适应
- css实现两栏(一边固宽,一边自适应)布局
- 从三栏自适应宽度布局到css布局的讨论
- 三栏布局----自适应
- LeetCode算法题——Total Hamming Distance
- GitHub--重装系统后关联以前的GitHub
- CentOS安装Gitblit
- 项目修改为UTF-8字符编码
- 国庆节是星期几
- CSS的自适应两栏/三栏布局
- windows下的基于eclispe调试STM32F405故障
- Octotree Chrome安装与使用方法
- 背包思想衍生算法
- golang学习之Interface类型断言
- react-native node解决tar ENOENT: no such file or directory, open '/node_modules/.staging/react-native-
- 移除VMWARE VIEW中孤立主机与桌面池的方法(转)
- matplotlib命令与格式:删除,移动,修改axes脊柱(边框)
- 每天一个linux命令(58):telnet命令