CSS浮动的超详细介绍
为什么需要浮动
问题一:如何让三个div盒子放在同一行显示?
虽然转换为行内块元素可以实现在一行显示,但是他们之间会有大的空白缝隙。不知道缝隙大小,影响布局,这个问题又该如何拒绝。
问题二:如何让两个盒子实现一个左对齐,一个右对齐
总结: 有很多的布局效果标准流没有办法完成,此时就需要利用浮动
完成布局。因为浮动可以改变元素标签默认的排列方式
.
浮动最典型的应用: 可以让多个块级元素一行内排列显示。
如何添加浮动
float
属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
语法:选择器{ float : 属性值; }
属性值 | 描述 |
---|---|
none | 元素不浮动(默认值) |
left | 元素向左浮动 |
right | 元素向右浮动 |
案例:
<style>
.first {
float: left;
width: 100px;
height: 100px;
background-color: pink;
}
.second {
float: right;
width: 100px;
height: 100px;
background-color: blue;
}
</style>
<body>
<div class="first"></div>
<div class="second"></div>
</body>
-
如果两个盒子都是添加左浮动
float: left;
,则两个盒子会一起移到左边,第二个盒子紧贴着第一个盒子 -
如果第一个盒子左浮动
float: left;
,第二个盒子右浮动float: left;
。则会各自贴着浮动框的左边缘和右边缘
浮动有什么特性
1. 浮动元素会脱离标准流
- 脱离标准普通流的控制(浮)移动到指定位置,
(俗称脱标)
- 浮动的盒子不再保留原先的位置
即如果A盒子添加浮动效果,B盒子没有添加浮动。则A浮动起来不占用原来位置,B盒子就会跑到A盒子的位置上去,如图示:
2. 浮动的元素会一行内显示并且元素顶部对齐
- 如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列。
注意: 浮动的元素是互相贴靠在一起的(不会有缝隙) , 如果父级宽度装不下这些浮动的盒子,多出的盒子会另起一行对齐
3. 浮动的元素会具有行内块元素的特性.
- 如果行内元素有了浮动,则不需要转换块级或行内块元素就可以直接给高度和宽度
span{
float: left;/*span 添加浮动之后可以设置宽和高*/
width: 50px;
height: 50px;
}
- 如果块级盒子没有设置宽度 ,默认宽度和父级一样宽,但是添加浮动后,它的大小根据内容来决定
浮动布局注意点
-
浮动和标准流的父盒子搭配。
先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置。 -
一个元素浮动了,理论上其余的兄弟元素也要浮动
一个盒子里面有多个子盒子,如果其中一个盒子浮动了, 那么其他兄弟元素也应该浮动,以防引起脱标问题。
注意: 浮动的盒子只会影响浮动盒子后面的标准流不会影响前面的标准流
为什么要清除浮动
前面讲的浮动元素有一个标准流的父元素,都是有高度的。但是,所有的父盒子都必须有高度吗?
- 由于很多情况下父级盒子不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为0时,就会影响下面的标准流盒子。
- 所以理想中的状态应该是,让子盒子撑开,父盒子有多少子盒子,我父盒子就有多高。
清除浮动本质
- 清除浮动的本质是清除浮动元素造成的影响
- 如果父盒子本身有高度 ,则不需要清除浮动
- 清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了
如何清除浮动
语法:选择器{ clear: 属性值; }
属性值 | 描述 |
---|---|
left | 清除左侧浮动的影响 |
right | 清除右侧浮动的影响 |
both | 同时清除左右两侧浮动的影响 |
清除浮动的策略是: 闭合浮动
清除浮动有哪些方法
-
额外标签法也称为隔墙法,是W3C推荐的做法。
额外标签法会在浮动元素末尾添加一个空的标签
。
例如<div style=" clear.both" > </div>
,或者其他标签(如<br/>等)
注意: 要求这个新的空标签必须是块级元素 -
父级添加
overflow
属性
可以给父级添加overflow
属性,将其属性值设置为hidden、auto
或scroll
。注意是给父元素添加代码! -
父级添加
after伪元素
. clearfix:after {
content : "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
. clearfix { /* IE6、7专有*/
*zoom: 1;
}
after伪元素是在我们父盒子后面添加了一个新盒子,这个新盒子可以清除我们的浮动。在实际使用时,可以直接把以代码复制过去,然后哪个父盒子需要清除浮动,就给那个父盒子添加个类名clearfix,如<div class="clearfix"></div>
。
- 父级添加
双伪元素
.clearfix:before,.clearfix:after {
content:"";
display: table;
}
.clearfix:after {
clear:both;
}
. clearfix {
*zoom:1;
.clearfix:before, .clearfix:after
是给父盒子前后各添加一个新盒子来清除浮动。实际使用时,可以直接把以代码复制过去,然后哪个父盒子需要清除浮动,就给那个父盒子添加个类名clearfix。
本文地址:https://blog.csdn.net/wutong_jun/article/details/107130115