清除浮动的四种方式

简介: 清除浮动的四种方式
前言:如果这篇文章 对你有帮助,请不要吝啬你的赞。😃

浮动是什么

CSS 的 Float(浮动),会使元素向左或向右移动,直到外边缘碰到包含框或另一个浮动元素位置。


浮动元素的特征

  • 浮动的元素会脱离文档流
  • 浮动的元素会紧挨在一起
  • 浮动元素具有类似行内块元素的特性。所以行内元素有了浮动,不再需要转换为块级或行内块级元素元素
  • 收缩。浮动的元素,如果没有设置width,会自动收缩为内容的宽度。比如块级盒子,如果块级盒子没有设置宽度,默认宽度和父级一样宽,但是添加浮动后,会收缩成内容的宽度


<style>
  div[class^="box"] {
    width: 300px;
    height: 300px;
    background-color: pink;
    margin: 10px;
  }

  div[class^="box"]>div {
    height: 200px;
    background-color: purple;
  }

  div[class^="box"]>span {
    width: 200px;
    height: 200px;
    background-color: skyblue;
  }

  .box1>div {
    float: left;
  }

  .box1>span {
    float: left;
  }
</style>
<div class="box1">
  <div>浮动div</div>
  <span>浮动span</span>
</div>
<div class="box2">
  <div>不浮动div</div>
  <span>不浮动span</span>
</div>

image-20220324192531879


浮动导致的问题1

浮动的元素,高度会塌陷,而高度的塌陷使我们页面后面的布局不能正常显示。

html

<div class="container">
  <div class="box1 float">box1</div>
  <div class="box2 float">box2</div>
</div>
<div class="box3">box3</div>


css

[class^='box'] {
  width: 200px;
  height: 200px;
  color: #fff;
}

.box1 {
  background-color: rgb(160, 3, 3);
}

.box2 {
  background-color: rgb(11, 11, 133);
}

.box3 {
  height: 300px;
  background-color: rgb(85, 7, 85);
}

.float {
  float: left;
}

image-20220310151022141

实际上box3确实有300px,只是box1浮起来了,所以,box3有200px在box1下,设置box1的 opacity为0即可看出来。

image-20220310151222520


浮动导致的问题2

<style>
    li {
      float: left;
      width: 40px;
      height: 20px;
      background-color: pink;
      border-bottom: 2px solid purple;
      list-style: none;
    }
</style>

<div>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
  </ul>
</div>
<div>
  <ul>
    <li>7</li>
    <li>8</li>
    <li>9</li>
    <li>10</li>
    <li>11</li>
    <li>12</li>
  </ul>
</div>


想要的效果:

image-20220324195050428


实际效果:

image-20220324195120085

原因: div没有高度,不能给浮动的子元素一个容器,所以第二个 divli就紧贴到第一个 div中最后的一个 li去了

清除浮动

清除浮动是为了清除使用浮动产生的影响。

1. 浮动元素的祖先元素添加高度

很少用

.container {
  height: 200px;
}

image-20220310152509811


2. 额外标签法

在浮动元素后使用一个空元素,并携带 clear: both属性。(当然,也可以是 left right值),就是both,会把所有情况的浮动都清掉。

问题:

html

<!-- 初级版:外墙板。第一个div(container)的margin-bottom失效了 -->
<div class="container">
  <div class="box1 float">box1</div>
  <div class="box2 float">box2</div>
</div>
<div class="clear"></div>
<div class="box3">box3</div>

<!-- 升级版:内墙版 -->
 <div class="container">
  <div class="box1 float">box1</div>
  <div class="box2 float">box2</div>
  <div class="clear"></div>
</div>
<div class="box3">box3</div>


css

.clear {
  clear: both;
}

效果同上


3. overflow法

给浮动元素的元素添加 overflow: hidden overflow: auto清除浮动。

.container {
  overflow: hidden;
}

效果如上图所示。

4. after伪元素法

IE8以上和非IE浏览器才支持:after,zoom(IE专有属性)可解决ie6,ie7浮动问题(个人倒是感觉没啥意义,IE6版本也太老了吧,这都得兼容的话,更何况这年头,还真不知道谁还用IE)

给浮动元素的容器添加一个clearfix的class,然后给这个class添加一个:after伪元素清除浮动。

<div class="container clearfix">
  <div class="box1 float">box1</div>
  <div class="box2 float">box2</div>
</div>
<div class="box3">box3</div>
.clearfix {
  /* 兼容IE6、7,个人觉得大可不必(乱说的) */
  zoom: 1;
}

.clearfix::after {
  content: '';
  /*因为clear对块级元素有效,伪元素:before和:after添加的内容默认是inline元素*/
  display: block;
  /* 清除浮动 */
  clear: both;
  /*不显示该区域,content为空,实际可省略*/
  visibility: hidden;
}

效果如上图所示。

实际上,下面的代码就足够了

.clearfix:before {
  content: '';
  display: block;
  clear: both;
}


5. 双伪元素法

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

原理就和上面一样


参考链接:关于清除浮动塌陷的几种方法总结

目录
相关文章
|
前端开发
CSS布局:浮动 (结构伪类选择器、伪元素、标准流、浮动、清除浮动)
CSS布局:浮动 (结构伪类选择器、伪元素、标准流、浮动、清除浮动)
81 0
水平垂直居中的四种方式
水平垂直居中的四种方式
|
人工智能 前端开发 图形学
CSS基础浮动和清除浮动的分享
CSS的定位机制有3种: 标准文档流、浮动和定位。 标准文档流实际上就是一个网页内标签元素正常从上到下,从左到右排列顺序的意思,比如块级元素会独占一行,行内元素会按顺序依次前后排列。浮动(float) 浮动是个很有意思的事情:就是让任何盒子可以一行排列。
80 1
CSS基础浮动和清除浮动的分享
|
前端开发 容器
【清除浮动的 5 种方法】
【清除浮动的 5 种方法】
|
前端开发
CSS高度塌陷问题及清除浮动的三种方式
在父元素最后增加一个空的块级子元素,并且让它设置clear: both
155 0
|
前端开发
CSS的三种布局机制 浮动 清除浮动
CSS的三种布局机制 浮动 清除浮动
176 0
CSS的三种布局机制 浮动 清除浮动
如何清除浮动的四种方法
清除浮动的四种方法
101 0