对于浮动和BFC的理解

浮动

浮动属性产生之初是为了实现“文字环绕”的效果,让文字环绕图片在网页实现类似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

  1. float的值不是none。
  2. position的值不是static或者relative。
  3. display的值是inline-block、table-cell、flex、table-caption或者inline-flex
  4. overflow的值不是visible

BFC利用。

  • 避免margin重叠
  • 自适应布局
  • 清除浮动

总结

BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
因为BFC内部的元素和外部的元素绝对不会互相影响,因此, 当BFC外部存在浮动时
它不应该影响BFC内部Box的布局,BFC会通过变窄,而不与浮动有重叠。同样的,当BFC内部有浮动时,
为了不影响外部元素的布局,BFC计算高度时会包括浮动的高度。避免margin重叠也是这样的一个道理。

参考

上一篇:C#中Typeof 是什么?和GetType 有什么关系?


下一篇:C#反射机制 Type类型