在 copy 别人官网时遇到新闻按照分类进行浮动布局的情况。各个子元素按照 float:left 向左浮动,从左到右排版。但是父元素显示的背景高度塌陷,没有将子元素包含在内。

具体说明和分析参考:CSS中浮动塌陷的解决办法及分析

文中提到三个方法:

  • 设置父元素高度
  • 设置父元素也浮动
  • 父元素内最后一个元素之后增加空元素,清除浮动

第一和第三都比较适合解决问题。了解第三解决方法原理,找到原代码,果然设置了空元素,所以采用第三解决方法:

<style>
.row::before, .row::after {
  content: ' ';
  display: table;
  -webkit-flex-basis: 0;
  -ms-flex-preferred-size: 0;
  flex-basis: 0;
  -webkit-order: 1;
  -ms-flex-order: 1;
  order: 1;
}

.news::after {
  clear: both;
}
</style>

.row 为行组件,默认设置前后伪元素,.news 为需要清除浮动的父元素,与 .row 同级。