面试积累——BFC
来源:互联网 发布:淘宝产品参数怎么设置 编辑:程序博客网 时间:2024/06/08 07:19
什么是BFC
BFC就是“块级格式化上下文”的意思,创建了 BFC的元素就是一个独立的盒子,不过只有Block-level box可以参与创建BFC, 它规定了内部的Block-level Box如何布局,并且与这个独立盒子里的布局不受外部影响,当然它也不会影响到外面的元素。
BFC有一下特性:
- 内部的Box会在垂直方向,从顶部开始一个接一个地放置。
- Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生叠加
- 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
- BFC的区域不会与float box叠加。
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。
- 计算BFC的高度时,浮动元素也参与计算。
如何触发BFC
那么我们该怎么使用BFC呢,如何触发BFC呢?:
- float 除了none以外的值
- overflow 除了visible 以外的值(hidden,auto,scroll )
- display (table-cell,table-caption,inline-block, flex, inline-flex)
- position值为(absolute,fixed)
- fieldset元素
- 绝对定位元素(position:absolute 或fixed)
- 行内块inline-block(元素的display:inline-block)
- 表格单元格(元素的display:table-ceil,HTML表格默认属性)
- 弹性盒flex boxes(元素地display:flex或inline-flex)
在以上的情况里可以创建BFC。
哪些场景可以使用BFC
1.解决margin叠加问题
<head> <title></title> <style type="text/css"> p{ margin: 50px; } </style></head><body> <p>hello world</p> <p>hello world</p> <p>hello world</p></body>
三P每个p之间的距离为50px,发生了外边距叠加。 要解决这个叠加问题即让每个P之间是100px,我们可以新建一个BFC,怎么建呢?可以给p元素添加一个父元素,让它触发BFC。如下:
<style type="text/css"> p { margin: 50px; } .bfc{ /*position: absolute;*/ overflow: auto; } </style></head><body> <div class="bfc"> <p>hello world</p> </div> <p>hello world</p> <p>hello world</p></body>
第一个盒子就和第二个盒子的边距为100px
不过虽然变成bfc,但是不同的方式也有所不同
.bfc{ position: absolute;}
2.用于布局
<style type="text/css"> body{ width: 300px; position: relative; } .aside{ width: 100px; height: 150px; float:left; background: blue; } .main{ height: 200px; background: #f00; } </style></head><body><div class="aside"></div><div class="main"></div>
这里就会出现这种情况
从图中我们会发现上面BFC的第三个特性,就是元素的左外边距会触碰到包含块容器的做外边框,就算存在浮动也会如此。(这里不太理解)
看上面BFC第四个特性,就是BFC不会与浮动盒子叠加,那么我们是不是可以创建一个新的BFC来解决这个问题呢?来看看:
.main { height: 200px; background: #f00; overflow:hidden;}
就解决了上面的问题。发现我们用overflow:hidden触发main元素的BFC之后,效果立马出现了,
3.用于清除浮动,计算BFC高度.
因为上面第六个特性提到计算BFC高度时,浮动元素也会参与计算,我们先看一个例子:
<head> <title></title> <style type="text/css"> .bfc{ border: 5px solid #f00; width: 300px; } .box{ border: 5px solid blue; width: 100px; height: 100px; float: left; } </style></head><body><div class="bfc"> <div class="box"></div> <div class="box"></div> </div></body></html>
其实我一看这个代码,我就知道会出现bfc撑不起来的问题,因为box设置了float,其实就相当于脱离了流,如果理解正常情况下一个html其实就是一层平地,我们往这里面塞盒子。
先把float注释掉来看效果:
/*float: left;*/
bfc没有设置高度,它的高度是因装的东西而定的,如果就是浏览器默认的static,那么box和bfc在一个平面,就相当于我们往地上扔了一个纸箱子,这个箱子的高度是可以伸缩的。我们再往里面扔两个盒子,这个箱子就扩充起来了。
float: left;
一旦有了这句话就不一样了,这个时候两个盒子被放在了二楼,这个bfc箱子还在一楼,自然就是瘪的了
要如何将这个bfc也放到二楼呢?
那就需要将它变为bfc:就是上面提到的方式
overflow: hidden;float: left;position: absolute;display: flex;
都可以实现,因为这样它就变成了BFC和box并列了,都放到二楼去了。
- 面试积累——BFC
- CSS布局——BFC
- 面试积累
- 面试积累
- 面试积累
- 面试积累
- 面试积累
- 面试积累
- css复习——浮动与BFC
- 格式化上下文的介绍—BFC
- 浅谈BFC—CSS的低调大佬
- BFC
- BFC
- BFC
- BFC
- BFC
- BFC
- BFC
- mongodb基础操作(陆续更新)
- Android问题—Bitmap引起的OOM问题的解决办法
- Spring Boot系列之六 以注解方式整合MyBatis
- Linux学习之第十一章
- java去除字符串中的空格、回车、换行符、制表符
- 面试积累——BFC
- Httpclient通过代理访问网络
- 文本分析--Gensim概述
- iOS App 的版本更新检测的方法
- Intellij idea14.4 新建maven web项目并与tomcat服务集成
- PHP——函数
- Java集合笔记
- mysql定时执行存储过程demo
- java基础static,final的作用。