CSS浮动

浮动的特性

1.浮动主要用于使得div脱离标准文档流,生成多列布局
2.浮动就是让元素可以向左或向右移动,直到它的外边距碰到其父级的内边距或者是上一个元素的外边距(这里指的上一个元素不管它有没有设置浮动,都会紧挨着上一个元素)
3.浮动元素支持所有的css样式 、内容撑开宽高 、多个元素设置浮动,宽度足够的话,会排在一行 、脱离文档流 、提升层级半级(也就是说:一个元素设置了浮动属性后,下一个元素就会无视这个元素的存在,但是下一个元素中的文本内容依然会为这个元素让出位置使自身的文本内容环绕在设置浮动元素的周围)。

注意:不管是行级还是块级元素,如果设置了浮动属性,该元素就变成了具有inline-block属性的元素。

float属性

属性说明
left元素向左浮动
right元素向右浮动
none默认值,元素不浮动

下面我们用三个div来设置不同情况的div浮动来通过例子来理解float以及overflow。

三个div都不浮动

样例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.class1 {
				width: 200px;
				height: 100px;
				background: palegreen;
			}


			.class2 {
				width: 250px;
				height: 130px;
				background: gold;
			}


			.class3 {
				width: 300px;
				height: 180px;
				background: red;
			}
		</style>
	</head>
	<body>



		<div class="class1">我是块级元素1,没有设置浮动</div>

		<div class="class2">我是块级元素2,没有设置浮动</div>

		<div class="class3">我是块级元素3,没有设置浮动</div>



	</body>
</html>

效果截图:
在这里插入图片描述

在不设置浮动的情况下,三个div块会竖着在一列显示

第一个div浮动

样例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.class1 {
				width: 200px;
				height: 100px;
				background: palegreen;
				float: left
			}


			.class2 {
				width: 250px;
				height: 130px;
				background: gold;
				
			}


			.class3 {
				width: 300px;
				height: 180px;
				background: red;
				
			}
		</style>
	</head>
	<body>



		<div class="class1">块级元素1,设置浮动</div>
		
		<div class="class2">块级元素2,没有设置浮动,块级元素2,没有设置浮动,块级元素2,没有设置浮动,块级元素2,没有设置浮动</div>

		<div class="class3">块级元素3,没有设置浮动</div>



	</body>
</html>


效果截图:
在这里插入图片描述

故意将第二个div块中的内容写得多点,我们可以得出下面的结论:
1.没有设置浮动的元素会填充浮动元素留下来的空间
2.浮动元素会和非浮动元素发生重叠,浮动元素会在图层的最上面
3.使用浮动时,该元素会脱离文档流,后面的元素会无视这个元素,但文本依然会为这个浮动元素让出位置,并且元素中的文字内容会环绕在其周围。

第二个div浮动

样例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.class1 {
				width: 200px;
				height: 100px;
				background: palegreen;
				
			}


			.class2 {
				width: 250px;
				height: 130px;
				background: gold;
				float: left
			}


			.class3 {
				width: 300px;
				height: 180px;
				background: red;
				
			}
		</style>
	</head>
	<body>



		<div class="class1">块级元素1,没有设置浮动</div>
		
		<div class="class2">块级元素2,设置浮动</div>

		<div class="class3">块级元素3,没有设置浮动</div>



	</body>
</html>

效果截图:
在这里插入图片描述

由此我们可以很明显的看出:
浮动元素不会超越其前面的元素

三个div都浮动

样例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style>
			.class1 {
				width: 200px;
				height: 100px;
				background: palegreen;
				float: left
			}


			.class2 {
				width: 250px;
				height: 130px;
				background: gold;
				float: left
			}


			.class3 {
				width: 300px;
				height: 180px;
				background: red;
				float: left
			}
		</style>
	</head>
	<body>



		<div class="class1">块级元素1,设置浮动</div>
		
		<div class="class2">块级元素2,设置浮动</div>

		<div class="class3">块级元素3,设置浮动</div>



	</body>
</html>

效果截图:
浏览器宽度足够时,三个div会并排排列 。
在这里插入图片描述
当我们发大页面时,浏览器宽度不足以容纳最后一个div时,最后一个div掉下来,并且顶部不会超过倒数第二个div的底部。
在这里插入图片描述

浮动的父子关系

样例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			#wrap2 {
				width: 55px;
				height: 90px;
				border: 3px solid red;
			}


			.class1 {
				width: 20px;
				height: 40px;
				background: blue;
				float: left;
			}


			.class2 {
				width: 20px;
				height: 30px;
				background: yellow;
				float: left;
			}


			.class3 {
				width: 20px;
				height: 30px;
				background: fuchsia;
				float: left;
			}


			.class4 {
				width: 20px;
				height: 20px;
				background: chartreuse;
				float: left;
			}
		</style>
		<title></title>
	</head>
	<body>
		<div id="wrap2">
			<div class="class1"></div>

			<div class="class2"></div>

			<div class="class3"></div>

			<div class="class4"></div>

		</div>
	</body>
</html>

效果截图:
在这里插入图片描述

由此我们可以得到下面的结论:
1.浮动元素不会在其浮动方向上溢出父级的包含块 也就是说元素左浮动,其左外边距不会超过父级的左内边距,元素右浮动,其右外边距不会超过父级的右内边距 。
2.浮动元素的位置受到同级同向浮动元素的影响 也就是说同一父级中有多个浮动元素,后一个元素的位置会受到前一个浮动元素位置的影响,他们不会相互遮挡,后一个浮动元素会紧挨着前一个浮动元素的左外边距进行定位,如果当前空间不足,则会换行,否则会放置在前一个浮动元素的下面。

浮动影响父层盒子高度

样例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			#wrap2 {
				width: 55px;
				border: 3px solid red;
			}


			.class1 {
				width: 20px;
				height: 40px;
				background: blue;
				float: left;
			}


			.class2 {
				width: 20px;
				height: 30px;
				background: yellow;
				float: left;
			}


			.class3 {
				width: 20px;
				height: 30px;
				background: fuchsia;
				float: left;
			}


			.class4 {
				width: 20px;
				height: 20px;
				background: chartreuse;
				float: left;
			}
		</style>
		<title></title>
	</head>
	<body>
		<div id="wrap2">
			<div class="class1"></div>

			<div class="class2"></div>

			<div class="class3"></div>

			<div class="class4"></div>

		</div>
	</body>
</html>

效果截图:
在这里插入图片描述

由此我们可以得到下面的结论:
父元素的高度靠子元素撑开,子元素全部浮动后,均脱离文档流,父元素高度塌陷。

overflow属性

overflow属性说明
visible默认值。内容不会被修剪,会呈现在盒子之外
hidden内容会被修剪,并且其余内容是不可见的
scroll内容会被修剪,但是浏览器会显示滚动条以便查看其余内容
auto如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容

overflow属性的妙用:
配合着浮动父容器,解决父容器高度他塌陷的问题。
使用overflow扩展盒子高度,overflow属性会触发浏览器重新计算父元素盒子高度。

样例代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			#wrap2 {
				width: 55px;
				border: 3px solid red;
				overflow: hidden;
			}


			.class1 {
				width: 20px;
				height: 40px;
				background: blue;
				float: left;
			}


			.class2 {
				width: 20px;
				height: 30px;
				background: yellow;
				float: left;
			}


			.class3 {
				width: 20px;
				height: 30px;
				background: fuchsia;
				float: left;
			}


			.class4 {
				width: 20px;
				height: 20px;
				background: chartreuse;
				float: left;
			}
		</style>
		<title></title>
	</head>
	<body>
		<div id="wrap2">
			<div class="class1"></div>

			<div class="class2"></div>

			<div class="class3"></div>

			<div class="class4"></div>

		</div>
	</body>
</html>

效果截图:
在这里插入图片描述

溢出处理

样例代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            #d1{
                /* 容器 */
                border: solid 1px red;
                height: 200px;
                width: 150px;
                /* overflow: visible; */
                /* overflow: hidden; */
                /* overflow : scroll; */
                /* overflow: auto; */
                overflow-x: scroll;
            }

            #d2{
                /* 出现移除的内容*/ 
                width: 180px;
                border: solid 2px green;
            }

        </style>
    </head>
    <body>

        <div id="d1">
            <div id="d2">222222</div>

        </div>
    </body>
</html>

效果截图:
在这里插入图片描述

当d2的宽度超过了父级d1的宽度时,我们可以通过设置不同的overflow属性值来实现不同的解决办法,我所演示的是浏览器会显示滚动条以便查看其余内容。

清除浮动

clear属性说明
left在左侧不允许浮动元素
right在右侧不允许浮动元素
both在左、右两侧不允许浮动元素
none默认值,允许浮动元素出现在两侧

样例代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style>
            .container{
                border: solid 1px blue;
                
            }
            .class1 {
                width: 200px;
                height: 100px;
                background: palegreen;
                float: left;
            }    

            .class2 {
                width: 250px;
                height: 130px;
                background: gold;

                float: left;
            }

            .class3 {
                width: 300px;
                height: 180px;
                background: red;
                float: left;

            }
            /* .clear{
                clear: both;
            } */
        </style>
    </head>
    <body>
        <div class="container">
            <div class="class1">我是块级元素1</div>
            <div class="class2">我是块级元素2</div>
            <div class="class3">我是块级元素3</div>
            <div class="clear">牛哄哄的柯南牛哄哄的柯南牛哄哄的柯南牛哄哄的柯南牛哄哄的柯南</div>
        </div>

    </body>
</html>

没有清除两侧浮动效果截图:
在这里插入图片描述
把代码中的这段代码的注释去掉,来清除两侧浮动

/* .clear{
    clear: both;
} */

清除两侧浮动效果截图:
在这里插入图片描述

可以很明显的看出:
清除两侧浮动后,有扩展父级盒子高度的作用

写作不易,读完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看见右下角的“一键三连”了吗,没错点它[哈哈]

在这里插入图片描述

加油!

共同努力!

Keafmd

  • 20
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛哄哄的柯南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值