浮动
浮动属性产生之初是为了实现“文字环绕”的效果,让文字环绕图片在网页实现类似word中“图文混排”。
如果给元素设置float: left | right 会导致该元素脱离文档流。像设置的方向靠近。
危害
如何父元素没有设置高度,而所有的子元素都设置了浮动,会导致父元素的高度塌陷为0
如何解决
- 给父元素定义高度
- 给父元素加上overflow:hidden
- 给父元素加上overflow:auto
- 给父元素加上display: table
- 父元素定义伪类:after 伪类中添加clear: both
BFC
以前对BFC一直很模糊的概览。BFC(Block Formatting Context)是块级格式上下文的简写相对的还有个IFC(Inline Formatting Context)行级格式上下文
BFC的布局规则
- 内部的Box会在垂直方向,一个接一个地放置
- Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠。
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
- BFC的区域不会与float box重叠
- 计算BFC的高度时,浮动元素也参与计算。
其实第4,5条是因为第3条导致的。
如何创建BFC
- float的值不是none。
- position的值不是static或者relative。
- display的值是inline-block、table-cell、flex、table-caption或者inline-flex
- overflow的值不是visible
BFC利用。
- 避免margin重叠
- 自适应布局
- 清除浮动
总结
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
因为BFC内部的元素和外部的元素绝对不会互相影响,因此, 当BFC外部存在浮动时
它不应该影响BFC内部Box的布局,BFC会通过变窄,而不与浮动有重叠。同样的,当BFC内部有浮动时,
为了不影响外部元素的布局,BFC计算高度时会包括浮动的高度。避免margin重叠也是这样的一个道理。