浮动(Float) 在CSS中是一个重要的布局技术,它允许元素向左或向右移动,其周围的元素会重新排列。当一个元素被设置为浮动时,它会脱离正常的文档流,这意味着它不再占据原本在文档流中的空间,而会尽可能地向左或向右移动,直到遇到父级元素的边界或其他浮动元素。
用途: 文本环绕图片,控制元素的对齐,创造多列布局
举例:文本环绕图片
<div class="a"><div class="b">float</div>这是一段文字描述This is a text description这是一段文字描述
</div> -->
<style>.a{width: 200px;height: 130px;border: 1px solid orange; }.b{width: 80px;height: 70px;background-color: red;border: 10px solid yellow;float: left;}
</style>
未设置浮动时:
如图所示:
设置浮动后:
如图所示:
带来的问题
<div class="container"><div class="float-item">浮动元素</div><div class="float-item">浮动元素</div><!--<div style="clear:both;">额外标签法</div>--!><div class="non-float-item">非浮动元素</div>
</div>
<style>.container {width: 200px;border: 1px solid orange;/* display:flow-root *//* overflow: hidden; */}/* 添加伪元素清除浮动 *//* .container::after {content: "";display: table;clear: both;} */.float-item {float: left;width: 80px;height: 70px;background-color: red;border: 10px solid yellow;}.non-float-item {width: 80px;height: 70px;background-color: blue;}
</style>
问题1: 相邻元素重叠:因为它们不再占据文档流中的空间,所以相邻的非浮动元素会与之重叠
如图所示:
问题2: 父级元素高度塌陷(内部高度为0)
如图所示:
正常不设置浮动的样子:
解决方案:
1.使用空标签清除浮动: 在浮动元素后添加一个空标签(如“<div style="clear:both;"></div>
”),并设置clear:both;clear CSS 属性指定一个元素是否必须移动 (清除浮动后) 到在它之前的浮动元素下面(相应值有:none,left,right,both)。clear 属性适用于浮动和非浮动元素。
优点: 简单易懂,书写方便,不会破坏文档结构。
缺点:
- 需要添加额外的HTML元素,增加了DOM的复杂性。
- 需要在每个需要清除浮动的元素后面都添加这个额外的元素,增加了维护成本
2.使用伪元素清除浮动: 使用:after伪元素在浮动元素的父元素后添加一个内容为空、clear:both;的元素
优点: 不需要增加额外的DOM元素,减少了页面的复杂性。
缺点: 对于一些老旧的浏览器,可能需要额外的CSS hack来兼容
3. 父级触发BFC: 可以通过触发BFC的方式,实现清楚浮动效果。(使用overflow:hidden时,浏览器会自动检查浮动区域的高度)
优点: BFC能够解决除清除浮动外很多布局问题
缺点: 不适合所有场景,需要根据具体情况来判断是否使用BFC