float是CSS样式中的定位属性,用于设置标签对象(如<div>、<span>、<a>、<em>等HTML标签)的浮动布局。浮动也就是我们常说的标签对象浮动居左靠左(float:left)和浮动居右靠右(float:right)
浮动的应用场景
- 文字环绕
- 横向排列
盒子位置
- 左浮动的盒子向上向左排列
- 右浮动的盒子向上向右排列
- 浮动盒子的顶边不得高于上一个盒子的顶边
- 若剩余空间无法放下浮动的盒子,则该盒子向下移动,直到具备足够的空间能容纳盒子,然后再向左或向右移动
浮动的基本特点
修改float属性值为:
- left:左浮动,元素靠上靠左
- right:右浮动,元素靠上靠右
默认值为none
- 当一个元素浮动后,元素必定为块盒(更改display属性为block)
- 浮动元素的包含块,和常规流一样,为父元素的内容盒
盒子尺寸
- 宽度为auto时,适应内容宽度
- 高度为auto时,与常规流一致,适应内容的高度
- margin为auto,为0
- 边框、内边距、百分比设置与常规流一样
盒子排列
- 左浮动的盒子靠上靠左排列;右浮动的盒子靠上靠右排列
- 浮动盒子在包含块中排列时,会避开常规流块盒
- 常规流块盒在排列时,无视浮动盒子
- 行盒在排列时,会避开浮动盒子
- 外边距合并不会发生
如果文字没有在行盒中,浏览器会自动生成一个行盒包裹文字,该行盒叫做匿名行盒。
高度坍塌
高度坍塌的根源:常规流盒子的自动高度在计算时,不会考虑浮动盒子
清除浮动,涉及css属性:clear
- 默认值:none
- left:清除左浮动,该元素必须出现在前面所有左浮动盒子的下方
- right:清除右浮动,该元素必须出现在前面所有右浮动盒子的下方
- both:清除左右浮动,该元素必须出现在前面所有浮动盒子的下方
解决方法一:增加子元素,设置其clear属性
使用clear属性: 在浮动元素的下方插入一个空元素,并为其应用clear: both;
样式。这将阻止浮动的影响影响到后续的元素。
解决方法二:使用伪元素选择器
类似于第一种方法,但是使用伪元素而不是实际在HTML中插入空元素。
::after用来创建一个伪元素,作为已选中元素的最后一个子元素。通常会配合content属性来为该元素添加装饰内容。这个虚拟元素默认是行内元素。
方法二中,display:table;
也可以
解决方法三:使用overflow属性
将浮动元素的父元素设置为overflow: auto;
或overflow: hidden;
。这会触发BFC(块级格式化上下文),使得父元素能够正确地包含浮动元素。
display:table;的作用
display: table;
是CSS中的一个属性值,用于设置元素的显示类型为表格。这属性值通常用于创建类似表格的布局,但不会生成实际的表格元素(<table>、<tr>、<td>等)。相反,它改变元素的显示行为,使其表现得像表格一样。
用法说明:
属性 | 说明 |
---|---|
table | (类似<table>)此元素会作为块级表格来显示,表格前后带有换行符。 |
inline-table | (类似<table>)此元素会作为内联表格来显示,表格前后没有换行符。 |
table-row-group | (类似<tbody>)此元素作为一个或多个行的分组来显示。 |
table-header-group | (类似<thead>)此元素作为一个或多个行的分组来显示。 |
table-footer-group | (类似<tfoot>)此元素作为一个或多个行的分组来显示。 |
table-row | (类似<tr>)此元素会作为一个表格行来显示。 |
table-column-group | (类似<colgroup>)此元素会作为一个或多个列分组来显示。 |
table-column | (类似<col>)此元素作为一个表格单元格列来显示。 |
table-cell | (类似<td>或<th>)此元素作为一个表格单元格来显示。 |
table-caption | (类似<caption>)此元素会作为一个表格标题来显示。 |
主要用途:
- 创建类似表格的布局:
当你希望使用表格布局的特性,但又不想使用实际的表格标签时,可以使用display: table;
。这在一些特定的布局需求中很有用,例如,你可以使用display: table;
创建一个具有表格结构的布局,但使用div元素而不是实际的表格标签。
- 解决浮动元素引起的高度塌陷问题:
在前面的回答中,我提到了在清除浮动时可以使用display: table;
,将其应用于伪元素::after。这种方法利用了表格布局的特性,使得伪元素表现得像一个具有清除浮动效果的块元素。