解释下浮动和它的工作原理?清除浮动的方法
特性:
1–浮动的元素不会占据标准流的空间,但是会影响标准流中的文本的排版。浮动只有左右浮动。
2–浮动元素A的位置与上一个元素有关系。如果上一个元素有浮动,则A的顶部与上一个元素顶部对齐,如果没有浮动,则与其底部对齐。
3–一个父盒子中的子盒子,如果其中一个子级有浮动,则其他子级都需要浮动,才能一行显示。
4–元素浮动之后,如果没有设置宽高,元素会根据内容的多少来设置内容的大小将会有行内块元素的属性。
5–元素浮动之后,如果父元素没有设置高度。会造成父元素高度塌陷。
解决这个问题?
-----在父元素中加入属性:overflow:hidden;超出的部分进行隐藏
overflow属性:
当盒子内的元素超出盒子自身的大小时,内容的显示方式
visible:内容不会被修剪,会呈现在元素框之外(默认)
hidden:会被修剪隐藏,可以使用这个属性来清除浮动
auto:自适应显示滚动条
scroll:内容会被修剪,会显示滚动条
bfc:
overflow可以触发元素的bfc,可以让元素具有排版的空间和权限,在bfc内部所有的元素都依据父元素进行排版和布局,所有父元素具有了包裹性,这就是解决高度塌陷问题的原理。
浮动、定位、overflow、dispaly、table、table-cell都可以触发bfc。
清除浮动:
–就是让当前元素左右两边都不存在浮动元素的时候,才把元素放在标准流中显示。
–清除浮动的四种方式:
1.使用空标记清除浮动,隔墙放。增加标签。
在浮动标签的后边加一个
2.使用overflow属性清除浮动。会误伤。
overflow:hidden;
3.使用after伪对象清除浮动
4.使用before after伪对象清除浮动
clearfix(2,3,4中方式的结合,常用)。
.clearfix
父盒子要把子盒子包裹住,触发bfc同时清除前后浮动。
.clearfix{
display:table;<!-- 触发dfc -->
}
.clearfix:before,.clearfix:after{
content:"";
display:block;
clear:both;
height:0;
}
在ie6中display:table;不能触发dfc,所以用以下方式进行触发
.clearfix{
_zoom:1;
}
<div class="top">top</div>
<div class="clearfix">
<div class="left">left</div>
<div class="right">right</div>
</div>
<div class="bottom">bottom</div>
.clearfix{
display: table;/* 触发nfc */
}
.clearfix:before,.clearfix:after{
/* 前后加一个空的标签清除浮动 */
content: "";
display: block;
height: 0;
clear: both;
}
.clearfix{
_zoom:1;/* 为了兼容ie6 */
}
1.使用空标签清除浮动。
这种方法是在所有浮动标签后面添加一个空标签 定义css clear:both. 弊端就是增加了无意义标签。
<div style="clear:both"></div>
2.使用after伪对象清除浮动
该方法只适用于非IE浏览器。具体写法可参照以下示例。使用中需注意以下几点。一、该方法中必须为需要清除浮动元素的伪对象中设置 height:0,否则该元素会比实际高出若干像素;
#parent:after{
content:".";
height:0;
visibility:hidden;
display:block;
clear:both;
}
3.给浮动的元素添加overflow:auto/hidden
当给浮动的元素添加overflow:auto/hidden时,浮动的元素又会回到文档流,将容器撑起来。
4.让父元素也浮动
如果说父元素也需要清楚浮动,那就要让父元素的父元素也要浮动……那整个页面都建立在浮动的基础上。