《图解CSS》浮动与清除

简介: css中的块级元素在页面中是独占一行的,自上而下排列,也就是我们所说的流,通常我们称之为文档流或标准流。

![浮动与清除概要](https://upload-images.jianshu.io/upload_images/2789632-0e3470674bda8a09.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### 文档流

css中的块级元素在页面中是独占一行的,自上而下排列,也就是我们所说的流,通常我们称之为文档流或标准流。

示例:

```html

<!DOCTYPE html>

<html lang="en">

<head>

   <meta charset="UTF-8">

   <meta name="viewport" content="width=device-width, initial-scale=1.0">

   <title>Document</title>

</head>

<body>

<html>

<head>

    <style>

        div {width:100px;height:100px;}

    </style>

</head>

<body style="background-color: eee">

    <div style="background-color:red">div1</div>

    <div style="background-color:green">div2</div>

    <div style="background-color:blue">div3</div>

</body>

</html>

</body>

</html>

```

![](https://upload-images.jianshu.io/upload_images/2789632-08d92390c0bb68ef.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### 清除(clear)

###### 语法

```css

  clear : none | left | right | both

  取值

  none  :  默认值。允许两边都可以有浮动对象

  left   :  不允许左边有浮动对象

  right  :  不允许右边有浮动对象

  both  :  不允许有浮动对象

```

###### 定义

clear 属性规定元素的哪一侧不允许其他浮动元素。

#### 浮动(float)

###### 语法:

```css

float: left; // 元素向左浮动。

float: right; // 元素向右浮动。

float: none; // 默认值。元素不浮动,并会显示在其在文本中出现的位置。

float: inherit; // 规定应该从父元素继承 float 属性的值。

```

###### 定义:

**浮动元素脱离文档流,按照指定的方向(左或右发生移动),直到它的外边缘碰到父元素或者另一个浮动元素为止。**

###### 历史:

起初,W3C规定出来的浮动(float)属性的主要目的,是为了实现文本绕排图片的效果,如下示例:

```html

<!DOCTYPE html>

<html lang="en">

<head>

   <meta charset="UTF-8">

   <meta name="viewport" content="width=device-width, initial-scale=1.0">

   <title>Document</title>

   <style>

       img {

           width: 200px;

           height: 200px;

           display: inline;

           float: left;

       }

       p {

           color: red;

       }

   </style>

</head>

<body>

   <img src="../img/示例图片.jpg" alt="">

   <p>文字文字文字文字文字文字文字文

       文字文字文字字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字

       文字文字文字文字文字文字文字文字</p>

</body>

</html>

```

不添加图片浮动的效果:

![](https://upload-images.jianshu.io/upload_images/2789632-6230bb6beb5e5707.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

添加浮动的效果:

![](https://upload-images.jianshu.io/upload_images/2789632-2002f5d339783d87.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###### 发展:

后来有人用它来做布局,发现不错,这个属性也成了创建多栏布局最简单的方式。

示例:

```html

<!DOCTYPE html>

<html lang="en">

<head>

   <meta charset="UTF-8">

   <meta name="viewport" content="width=device-width, initial-scale=1.0">

   <title>Document</title>

</head>

<body>

<html>

<head>

    <style>

        div {width:100px;height:100px;}

    </style>

</head>

<body style="background-color: eee">

    <div style="background-color:red; float:left;">div1</div>

    <div style="background-color:green; float:left;">div2</div>

    <div style="background-color:blue;float:right;">div3</div>

</body>

</html>

</body>

</html>

```

![](https://upload-images.jianshu.io/upload_images/2789632-dc6040fa2c8d8379.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###### 浮动元素脱离了常规的文档流之后,原来紧跟其后的元素就会在空间允许的情况下,向上提升到与浮动元素平齐平坐。

**问题一:遮盖问题**:向上提升的元素会被浮动的元素盖住,因为浮动的元素已经脱离了标准流,浮动的元素已经和标准流不在同一层次上了。如下实例:

```html

<!DOCTYPE html>

<html lang="en">

<head>

   <meta charset="UTF-8">

   <meta name="viewport" content="width=device-width, initial-scale=1.0">

   <title>Document</title>

</head>

<body>

<html>

<head>

    <style>

        div {width:100px;height:100px;}

    </style>

</head>

<body style="background-color: eee">

    <div style="background-color:red; float:left;">div1</div>

    <div style="background-color:green;">div2</div>

    <div style="background-color:blue;">div3</div>

</body>

</html>

</body>

</html>

```

![](https://upload-images.jianshu.io/upload_images/2789632-4df87c5d8e2f9073.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

由上图我们可以看出,第二个div会被第一个div给盖住,但是里面文字会被挤到下一行,而且**好像**是第二个div隐形存在于下一行。

**解决办法**

利用clear属性,清除浮动造成的影响,注意,clear使用在非浮动元素上,而非浮动元素上面。

**clear属性不允许被清除浮动的元素的左边/右边挨着浮动元素,底层原理是在被清除浮动的元素上边或者下边添加足够的清除空间。**

实例:

![](https://upload-images.jianshu.io/upload_images/2789632-6d96bc337175ce78.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**问题二:父元素高度塌陷问题**:由于浮动元素脱离的文档流,其父元素感知不到子元素的存在,高度便会消失。如下实例:

![](https://upload-images.jianshu.io/upload_images/2789632-4b76dfe438a6bc08.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**解决办法一:BFC清除浮动**

在父元素添加overflow:auto或overflow:hidden

父元素的这个属性设置为auto或者是hidden,父元素就会扩展包含浮动,这个方法有着比较好的语义性,因为它不需要额外的元素,但是,要记住一点,overflow属性不是为了清除浮动而定义的,要小心不要覆盖住内容或者触发了不需要的滚动条。

![](https://upload-images.jianshu.io/upload_images/2789632-bb8a589fc67923ae.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

**解决办法二:clearfix**

clearfix的方式清除浮动

![](https://upload-images.jianshu.io/upload_images/2789632-d251476d8b680a71.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

通用方案:

```css

// 现代浏览器clearfix方案,不支持IE6/7

.clearfix:after {

   display: table;

   content: " ";

   clear: both;

}

// 全浏览器通用的clearfix方案

// 引入了zoom以支持IE6/7

.clearfix:after {

   display: table;

   content: " ";

   clear: both;

}

.clearfix{

   *zoom: 1;

}

// 全浏览器通用的clearfix方案【推荐】

// 引入了zoom以支持IE6/7

// 同时加入:before以解决现代浏览器上边距折叠的问题

.clearfix:before,

.clearfix:after {

   display: table;

   content: " ";

}

.clearfix:after {

   clear: both;

}

.clearfix{

   *zoom: 1;

}

```

#### 浮动使用场景

###### 1. 文本绕排图片

![](https://upload-images.jianshu.io/upload_images/2789632-9983bdc5dfe9c132.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###### 2.页面布局

![](https://upload-images.jianshu.io/upload_images/2789632-92c730bd8f367f0a.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

###### 3.多元素内联排列(推荐inline-block)

![](https://upload-images.jianshu.io/upload_images/2789632-bd7e5f8eef59d25d.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

参考地址:

https://www.cnblogs.com/guanghe/p/10070574.html

https://www.jianshu.com/p/09bd5873bed4

https://blog.csdn.net/qq_39406353/article/details/104455345

http://www.imooc.com/learn/121

https://www.w3school.com.cn/cssref/pr_class_float.asp

https://zhuanlan.zhihu.com/p/81091987

https://www.imooc.com/article/283829

https://blog.csdn.net/chenxi_li/article/details/95192904

目录
相关文章
|
4月前
|
前端开发
5.CSS学习(浮动)
【7月更文挑战第29天】
38 4
|
5月前
|
前端开发 容器
CSS基础-浮动:float与清除浮动
【6月更文挑战第9天】本文介绍了CSS中的`float`属性,用于创建多列布局和图文混排,但会导致浮动塌陷和元素重叠问题。为解决这些问题,文章探讨了`clear`属性的四种清除浮动方法,包括`clear`属性、空元素、伪元素和`overflow`方法。随着Flexbox和Grid布局的兴起,它们在某些场景下替代了浮动,但理解浮动原理仍是布局基础。掌握浮动和清除浮动技巧对构建稳定布局至关重要。
72 5
|
2月前
|
前端开发
【前端web入门第六天】01 CSS浮动
这是关于CSS布局第六天学习目标的介绍,主要解决多个`&lt;div&gt;`标签在同一行显示的问题,即一个在左边,另一个在右边。文中介绍了标准流、浮动及flex布局的概念,重点推荐使用flex布局。文章详细讲解了浮动的基本使用、布局技巧及清除浮动的方法,包括额外标签法、单伪元素法、双伪元素法和`overflow`隐藏法,并提供了示例代码帮助理解。
|
3月前
|
前端开发 容器
前端面试热门问题--浮动和清除浮动(CSS)
前端面试热门问题--浮动和清除浮动(CSS)
|
5月前
|
前端开发 UED 容器
纯CSS画浮动卡通蓝天白云草坪动画效果
【6月更文挑战第1天】网页设计中,通过创新技巧,可以使用HTML和CSS模拟云朵漂浮和草地动画效果,提升用户体验。背景实现采用线性渐变动画,使背景颜色从浅青至白平滑过渡并循环移动。云朵效果通过多个不同大小和位置的`<div>`元素,结合CSS的`position: absolute;`和`@keyframes`动画实现浮动。草的动画则是通过三角形形状及`::before`和`::after`伪元素创造,配合不同动画速度和角度模拟自然摆动。完整代码可在提供的链接中下载。
97 1
纯CSS画浮动卡通蓝天白云草坪动画效果
|
4月前
|
前端开发
CSS:浮动
CSS:浮动
|
5月前
|
前端开发 容器
CSS浮动(如果想知道CSS有关浮动的知识点,那么只看这一篇就足够了!)
CSS浮动(如果想知道CSS有关浮动的知识点,那么只看这一篇就足够了!)
|
5月前
|
前端开发
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影二
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影二
49 0
|
5月前
|
前端开发 容器
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影(一)
Web网页制作-知识点(4)——CSS盒子模型、弹性盒模型(flex box)、文档流、浮动、清除浮动、定位、圆角、阴影一
76 0
尚硅谷html5+css3(4)浮动
尚硅谷html5+css3(4)浮动