前沿
什么是浮动?标准的回答是“元素的浮动是指设置了浮动属性的元素会脱离标准普通流的控制,移动到其父元素中指定位置的过程”,但确切来说不是清除浮动本身,而是清除浮动所造成的影响.解决了父级元素因为子级元素浮动造成的内部高度为0的影响。那浮动是怎么产生的呢?又要这么清除浮动呢?
1.浮动的特点
1.文字环绕!
利用float属性设置元素浮动使文字环绕在元素周围,语法为“被环绕的元素{float:浮动样式;}”;
HTML代码基本代码
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
.pic{
width: 200px;
height: 200px;
float: left;
}
.pic img{
width: 100%;
}
</style>
<body>
<div class="pic">
<img src="https://img.ddtouxiang.com/upload/touxiang/20230324/0324195229471.jpeg" alt="">
</div>
<div class="text">
寂静的森林里,树木窃窃私语,萤火虫的光不再温暖。鹅卵石铺就的小路上布满了多少人的脚印?
我在这里轻轻吟颂着温暖的童话。 带着怀表的兔子发着光,领着美丽的爱丽丝,进入神秘的扑克牌仙境
,奇妙的经历只是一个梦而已,一切都会结束。
</div>
</body>
</html>
效果图
2.浮动可以让块级元素同行显示。
默认元素的布局是按照普通流(文档流/标准流),也就是所有标签按照规定好的方式排列:块级元素单独占一行,行内/行内块一行排列。
HTML代码基本代码
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
*{
margin: 0;
padding: 0;
}
div{
width: 100px;
height: 100px;
border: 1px solid black;
}
.item1{
background-color: lightblue;
float: left;
}
.item2{
background-color: lightgreen;
float: left;
}
.item3{
background-color: lightyellow;
float: left;
}
</style>
<body>
<div class="item1">111</div>
<div class="item2">222</div>
<div class="item3">333</div>
</body>
</html>
效果图
3.元素会脱离文档流!父容器高度塌陷!
当父元素未设置高度时,所有子元素浮动后,造成子元素脱离文档流进而无法把父元素撑开,父元素高度为0产生高度塌陷,称为高度塌陷问题。 父元素高度塌陷后,父元素以下的元素都会向上移动,导致布局混乱,
HTML代码基本代码(没有浮动前)
<div class="div1">div1</div>
<div class="div2">div2</div>
</div>
.div1{height: 100px; width: 100px; background: green;}
.div2{height: 100px; width: 100px; background: blue;}
当我们让div1和div浮动之后:
.div1{height: 100px; width: 100px; background: green; float: left;}
. div2{height: 100px; width: 100px; background: blue; float: right;}
我们可以发现,当子元素全都浮动后,父元素box的高度变为了0只剩下了边框,这就是box发生了高度塌陷。
4.让行内元素可以设置宽高。
行内元素设置成浮动之后变得更加像是inline-block(行内块级元素,设置成这个属性的元素会同时拥有行内和块级的特性,最明显的不同是它的默认宽度不是100%),这时候给行内元素设置padding-top和padding-bottom或者width、height都是有效果的
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div style="width:600px; height:600px; background-color: #d03642;margin:50px auto;text-align: center">
<!--左浮动-->
<span style="color:#fff;font-size: 30px; height:50px;padding:30px;width: 100px; background-color: lightseagreen;float: left">左浮动</span>
<!--未设置浮动(父级设置了text-align:center)-->
<span style="color:#fff;font-size: 30px; height:50px;padding:30px;width: 100px; background-color: lightseagreen">无浮动</span>
<!--右浮动-->
<span style="color:#fff;font-size: 30px; height:50px;padding:30px;width: 100px; background-color: lightseagreen;float: right;">右浮动</span>
</div>
</body>
</html>
效果图
5.浮动元素可以设置margin 但是不能设置 margin:0 auto;
argin:'0 auto'; 只对块元素起作用,还要设置width属性。
浮动元素是半脱离文档留,不同与定位是完全脱离文档流,脱离文档流后,性质几乎等同于display:inline-black,等同于行内块元素。
2.清楚浮动
1.直接设置父容器高度。(一般情况下是不用这个方法的)
- 优势:简单
- 弊端:必须要知道父元素高度是多少
- 宽度定的太死,导致不同尺寸的设备大小不一
2.给下面受影响的容器加clear:both;。(一般情况下是不用这个方法的)
给谁清除浮动就在它后面添加一个额外标签,尽管它通俗易懂,但是会多许多无意义的标签,使的父元素和子元素相关联,结构化也会变差,
background-color: gray;
border: solid 1px black;
}
.news img {
float: left;
}
.news p {
float: right;
}
.content{
clear:both;
}
<div class="news">
<img src="news-pic.jpg" />
<p>some text</p>
<div class="content"></div>
</div>
3.增加子容器,在子容器身上做清除浮动。(一般情况下是不用这个方法的)
优势:代码量少 容易掌握 简单易懂
弊端:会添加许多无意义的空标签
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<style>
*{
margin: 0;
padding: 0;
}
.box{
width: 100vw;
height: 200px;
background-color:orchid;
}
span{
width: 100px;
height: 100px;
background: lemonchiffon;
float: left;
}
</style>
<body>
<div class="box">
<span>1</span>
</div>
</body>
</html>
4.借助bfc容器的特点 抵消浮动的负面影响。(一般情况下是不用这个方法的)
.父元素overflow的属性值设置为hidden、scroll或者auto。
弊端:如果有内容要溢出显示,也会被一同隐藏。如果需要做一个二级菜单,那么子菜单就会被overflow:hidden 所隐藏
5.伪元素清除浮动(一般选择用这种方法)
after 选择器向选定的元素之后插入内容 content:""; 生成内容为空 display: block; 生成的元素以块级元素显示, clear:both; 清除前面元素浮动带来的影响 相对于空标签闭合浮动的方法,高度和宽度设置为零,目的是防止content里面含有内容,导致页面出现无关内容,而visibility:hidden是对content的内容进行隐藏。
优势:不破坏文档结构,没有副作用
弊端:代码量多
xx::after{
content: '';
clear: both;
display: block;
height:0;
width: 0;
visibility:hidden
}
总结
好啦,以上就是浮动的五种特点和五种清除浮动的方法,最容易混淆的就是浮动的第五种的特点,最常用清浮动也就第五种方法,这就是个人的一点总结和卓见,有何疑问可留言评论和探讨!!!