【css】浮动与clearfix(清除浮动)
创始人
2025-05-31 06:18:36

一.认识浮动

任何元素都可以使用浮动,无论是块级元素(类似div,ul)还是行内元素都可以浮动,任河北省名float的元素都会自动按被设置成块级元素,拥有了块级元素的特点,比如可以设置宽高,还可以设置内边距。

当元素对象设置了float以后,它将不再独自占据一行。浮动块可以向左或向右移动,直到它的外边缘碰到包含它的框或另一个浮动块的边框为止。

但是还有一点比较重要,float浮动用于布局,可以很轻松达到靠左或者靠右的效果,但是当用完float浮动以后,一定要清除浮动,不然很有可能造成浮动塌陷。

二.那么什么是浮动塌陷呢?

我们首先要知道,在浮动布局中父元素的高度默认是被子元素撑开的。当子元素浮动后,其会完全脱离文档流,子元素从文档流中脱离,将会无法撑开父元素的高度,导致父元素的高度丢失,高度丢失以后,其下的元素会自动上移,导致页面混乱。

举个问题示例

假如一个父元素包含了几个子元素,此时给这几个子元素都设置了浮动(float:left)那么父元素的高度就会为0。

像下面图片这样:

【没有浮动】

【浮动后】

像上面图片那样,因为加入了浮动,使得图片脱离文档流,div包不住img,同时img加入了浮动,使得div无法被img支撑,导致div高度塌陷,这样就是浮动塌陷。

浮动塌陷的解决办法

清除浮动,下面是清除浮动的4种方式:

  1. 在使用float元素父元素之后添加一个高度为0,宽度为0,并且有clear:both样式的div。

  1. 给在使用float元素的父元素添加隐藏。

不建议用,添加以后超出文字或者图片会被隐藏起来。

style="overflow: hidden;"
  1. 给在使用float元素的父元素设置高度。

不建议用,因为比较固定如果后面需要添加元素的话比较受限。

style="height: 320px;"
  1. 使用after伪对象清除浮动。

推荐首选,比较方便同时解决了上述问题。

.父级名称或标签::after{/* after默认是行内元素,需要修改为块元素 */content: ' ';  //在clear类后面添加内容为空display: block;  //把添加的内容转化为块元素clear: both;  //清除这个元素两边的浮动
}

代码示例:


1
2
/* CSS部分 */
.clearfix:after {content: " ";display: block;clear: both;
}

此外还会遇到外边距重叠的问题

三. 那么什么是外边距重叠呢?

问题示例:

container 之中包含一个 item 子元素,代码如下

item

此时,我给 item 加了 margin-top: 30px ,本来这时候我期待的结果是,item 块本身应该距离 container 青色区域的上边界 30px 。同时一个副作用是青色区域应该拉高 30px 。但是实际上得到的却是下面的效果:

造成这个的原因是,父子元素的 margin-top 是会重叠的,即使是像上面的情况中,父元素 container 自身 margin-top 为 0 的情况下也一样。这样造成的一个现象就是父元素“包不住”子元素的 margin-top ,溢出了。类似的问题也会发生在 margin-bottom 身上。

外边距重叠解决办法

要给 container 添加 clearfix。

item
/* CSS部分 */.clearfix::before,  //意为在类名为clearfix的最后面和前面添加下面的内容.clearfix::after{content: '';display: table; //注意,display: table 换成 dispaly: block 是不行的。clear: both;}

相关内容

热门资讯

云南江川星云湖开渔 邀游客感受... 中新网玉溪12月25日电 (黄兴鸿)25日,云南·江川第十八届开渔系列活动暨高原湖泊水产品交易会启幕...
2℃天安门实录:游客全副武装,... 2025年12月25日的北京,被一股新冷空气牢牢笼罩。清晨六点半,天刚泛起鱼肚白,天安门广场的华灯尚...
贵阳十大著名网红景点有哪些 贵阳,这座充满魅力的城市,凭借着独特的自然风光和丰富的人文景观,成为了众多游客心中的打卡胜地。而其中...
河北首条!石家庄机场即将开通直... 12月27日,石家庄正定国际机场(简称“石家庄机场”)将正式开通直飞老挝首都万象的国际航线。 作为河...
万众再造西北顶奢地标!国内第二... 作为成功打造国内最大W酒店等多个奢华酒店标杆作品的陕西万众控股集团,即将为中国高端度假市场再献重磅力...