带你了解CSS浮动的魅力

本文介绍了CSS浮动的概念,浮动如何影响布局,并详细探讨了浮动带来的问题,包括后续标准流被覆盖、父级盒子高度塌陷及垂直外边距重合。通过提供具体的解决方案,如清除浮动和使用clearfix类,帮助读者理解和解决浮动布局中常见的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        

目录

            

一、什么是浮动?

二、浮动产生的影响(问题)

  三、清除浮动--解决浮动带来的问题

1、后续标准流被覆盖

​解决方案:给box2 添加如下代码:

2、父级盒子高度塌陷问题

解决方法

 3、垂直外边距重合

     解决方法如下:

总结


   

今天给大家分享浮动会带来的一些都会遇到的问题。

一、什么是浮动?

1、含义:浮动属性是float用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。

2、作用:浮动可以改变元素标签默认的排列方式,可以让多个块级标签一行内排列显示。可以利用浮动完成标准流没办法完成的布局效果。

3、浮动的特点

1.元素一旦浮动,脱离文档流(不占页面空间,后面未浮动元素会上前补位)

2.浮动元素会在当前行,停靠在父元素的左/右边,或者停靠在其他已浮动元素的边缘

3.当父元素横向显示不下所有浮动元素时,最后显示不下的,会自动换行

4.浮动用于解决,多个块级元素在同一行显示的问题

二、浮动产生的影响(问题)

(1)由于浮动元素脱离了文档流,所以父元素的高度无法被撑开,影响了与父元素同级的元素;若没有给父元素设置高度,那么父元素就不会在显示屏上显示。

(2)与浮动元素同级的非浮动元素会跟随其后,因为浮动元素脱离文档流不占据原来的位置

(3)如果该浮动元素不是第一个浮动元素,则该元素之前的元素也需要浮动,否则容易影响页面的结构显示

  三、清除浮动--解决浮动带来的问题

1、后续标准流被覆盖

     由于元素浮动之后,会脱离文档流,不占位置,会让后续不浮动的元素上前补位.浮动的元素就会遮盖住后续标准流。

如果后续元素不想上前补位,需要对此元素设置清除浮动 clear:

取值:1.left  清除左浮动对我的影响

      2.right 清除右浮动对我的影响

      3.both 清除左右浮动对我的影响

      4.none 不清除影响

给box1添加浮动后,box1脱离文档流,box2会向上移动到box1的位置,导致布局紊乱,代码如下:

<style type="text/css">
		.box1{
			width:200px;
			height:200px;
			float:left;
			background:pink;
		}
		.box2{
			width:500px;
			height:500px;
			background:plum;
		}
	</style>
 
<body>
	<div class="box1">box1</div>
	<div class="box2">box2</div>
</body>


解决方案:给box2 添加如下代码:

clear:both;

2、父级盒子高度塌陷问题

   父元素不写高,靠子元素撑起高度,.所有子元素都浮动,那么所有子元素都脱离文档流,父元素认为自己内部没有元素了,所以父元素就没有高度了。父级盒子里可以装很多浮动盒子,若指定父盒子高度,则溢出的盒子会另起一行。

正常情况下,当父元素不设置宽高时,父元素的高度由子元素撑开,代码如下:

<body>
	<div class="box1">
		<div class="box2"></div>
	</div>
</body>
.box1{
	border:10px solid pink;
}
.box2{
	width:200px;
	height:200px;
	background:plum;
}

但是,当给子元素设置浮动后,就造成了父元素高度塌陷,代码如下:

<style type="text/css">
			.box1{
				border:10px solid pink;
			}
			.box2{
				width:200px;
				height:200px;
				background:plum;
				float:left;
			}
		</style>
 

解决方法

1、额外标签法:给box1增加一个子元素(必须加在最后),并给这个子元素设置 clear: both

<body>
	<div class="box1">
		<div class="box2"></div>
		<div class="box3"></div>
	</div>	
</body>
.box3{
	clear:both;
	}

2、给父元素box1加 overflow:hidden
3、给父元素加 float
4、最好的解决方案是:给父元素添加如下自定义类 .clearfix

.clearfix:after{
  content:"";
  display:table; 
  }

.clearfix:before,
.clearfix:after{
  content:"";
  display:block;
  clear:both;
  }

 3、垂直外边距重合

  第一种情况:
垂直排列的两个元素,上面元素的下外边距与下面元素的上外边距同时设置时, 会取联两者较大的值而不是取两者之和。
    第二种情况:
父子元素垂直外边距相邻时,给子元素设置外边距,会同时导致父元素也同样拥有外边距的值,即

父元素与子元素同时移动。

     解决方法如下:

1、给子元素设置 border-top (此方法会导致元素多设置border ) ;
2、给父元素设置 padding-top (此方法需要重新计算父元素的高度 );
3、给父元素设置 overflow:hidden(此方法在需要实现溢出功能时,将不能使用)
4、最好的解决方案是:给父元素添加如下自定义类 .clearfix

.clearfix:before,
 .clearfix:after {
     content: "";
     display: table;
 }
 .clearfix:after {
     clear: both;

 }
 .clearfix {
     *zoom: 1;
 }

总结

以上就是今天要讲的内容,这些CSS的浮动内容就是我想为大家讲解了我认为比较重要的点。希望大家也能学到有用的内容。谢谢!

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值