【清除浮动的 5 种方法】

简介: 【清除浮动的 5 种方法】

什么是浮动?它是怎样产生的?

会使元素向左或向右移动,其周围的元素也会重新排列。

Float(浮动),往往是用于图像,但它在布局时一样非常有用。

产生的原因:

在非IE浏览器下,当容器的高度为auto,且容器的内容中有浮动的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响甚至破坏布局的现象,这个现象叫浮动溢出。

为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动。

清除浮动主要是为了解决父元素因为子级元素浮动引起的内部高度塌陷的问题。

浮动特性

  1. 浮动元素会脱离标准流(脱标)
  2. 浮动的元素会一行内显示并且元素顶部对齐
  3. 浮动的元素会具有行内块元素的特性

为什么使用浮动?

可以让多个块级元素一行内排列显示。

最开始出现浮动只是为了解决文字环绕图片问题,但最后是为了解决几个块级元素并排显示问题,虽然可以使用定义块级元素的display为inline-block(这种方式也不会出现父级元素坍塌问题)

但是这种方式不能控制元素的位置而是默认从左到右,所以要实现元素是居左还是居右使用浮动更方便。

但是使用了float之后不清除浮动就会出现父级高度塌陷问题。

清除浮动的方法:

方法1:【额外标签的添加】

想要给谁清除浮动,就在其后额外添加一个空白标签 ,给其设置clear:both。

优点:通俗易懂,书写方便。

缺点:添加许多无意义的标签,结构化比较差。

clear:both:本质就是闭合浮动, 就是让父盒子闭合出口和入口,不让子盒子出来 。

代码展示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>额外标签的添加</title>
    <style>
        #parent{
            border: 1px solid black;
        }
        #child{
            width: 100px;
            height: 100px;
            background: red;
            float: left;
        }
        #clear{
            clear: both;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="child"></div>
        <!-- 方法一  额外标签的添加 -->
        <div id="clear"></div>
    </div>   
</body>
</html>

方法2:【给父元素添加overflow:hidden】

通过触发BFC方式,实现清除浮动

优点:代码简洁

缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素

代码展示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>给父元素添加overflow:hidden属性</title>
    <style>
        #parent{
            border: 1px solid black;
            overflow: hidden;
        }
        #child{
            width: 100px;
            height: 100px;
            background: red;
            float: left;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="child"></div>
    </div>   
</body>
</html>

方法3:【使用after伪元素清除浮动】

优点:符合闭合浮动思想,结构语义化正确。

缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>伪元素清除浮动</title>
    <style>
        #parent{
            border: 1px solid black;
            overflow: hidden;
        }
        #child{
            width: 100px;
            height: 100px;
            background: red;
            float: left;
        }
        #parent:after{
            content: "";
            display: block;
            height: 0;
            clear:both;
            visibility: hidden;
        }
        #parent{
            /* 触发 hasLayout */ 
            *zoom: 1; /*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="child"></div>
    </div>   
</body>
</html>

方法4:【使用before和after双伪元素清除浮动】

优点:代码更简洁

缺点:用zoom:1触发hasLayout.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用before和after双伪元素清除浮动</title>
    <style>
        #parent{
            border: 1px solid black;
            overflow: hidden;
        }
        #child{
            width: 100px;
            height: 100px;
            background: red;
            float: left;
        }
        #parent:after,#parent:before{
            content: "";
            display: table;
        }
        #parent:after{
            clear: both;
        }
        #parent{
            *zoom: 1;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="child"></div>
    </div>   
</body>
</html>

方法5:【为父元素设置高度】

缺点: 手动添加高度,若后面的高度发生变化,还要再次修改高度,不便于后期维护

优点: 简单粗暴直接有效,清除了浮动带来的影响

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用before和after双伪元素清除浮动</title>
    <style>
        #parent{
            border: 1px solid black;
            width: 100%;
            height: 100px;
        }
        #child{
            width: 100px;
            height: 100px;
            background: red;
            float: left;
        }
    </style>
</head>
<body>
    <div id="parent">
        <div id="child"></div>
    </div>   
</body>
</html>
相关文章
|
存储 分布式计算 Java
软件体系结构 - 架构风格(1)批处理架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(1)批处理架构风格
628 0
|
关系型数据库 MySQL 大数据
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
266 1
|
算法 NoSQL 关系型数据库
九种分布式ID解决方案
在复杂的分布式系统中,往往需要对大量的数据进行唯一标识,比如在对一个订单表进行了分库分表操作,这时候数据库的自增ID显然不能作为某个订单的唯一标识。除此之外还有其他分布式场景对分布式ID的一些要求:
1243 0
|
存储 Java 项目管理
Maven-高频面试题
Maven-高频面试题
111 0
|
算法 调度
深入理解操作系统之进程调度策略
【5月更文挑战第12天】 在多任务操作系统中,进程调度是核心功能之一,它决定了处理器资源的分配。本文将深入探讨三种主要的进程调度策略——先来先服务(FCFS)、短作业优先(SJF)和轮转(Round Robin)调度,并分析各自的性能指标、优势与局限性。通过比较它们的平均等待时间、平均周转时间和CPU利用率,我们旨在为系统设计者提供选择最合适调度策略的参考依据。
|
存储 数据挖掘 数据库
服务器RAID0:提高数据传输速度 (服务器raid0作用)与RAID1的区别
服务器RAID0:提高数据传输速度 (服务器raid0作用)与RAID1的区别
|
算法 编译器 程序员
嵌入式C语言代码优化方案(深度好文,建议花时间研读并收藏)
嵌入式C语言代码优化方案(深度好文,建议花时间研读并收藏)
309 0
|
存储 IDE 安全
各种电脑bios图解中文教程(超级详细的BIOS设置大全图解)
各种电脑bios图解中文教程(超级详细的BIOS设置大全图解)
28948 0
|
移动开发 小程序 JavaScript
微信小程序学习实录8:H5网页跳转小程序(微信开放标签、wx-open-launch-weapp按钮不显示、noPermissionJsApi)
微信小程序学习实录8:H5网页跳转小程序(微信开放标签、wx-open-launch-weapp按钮不显示、noPermissionJsApi)
1493 0
|
负载均衡 应用服务中间件 Apache
Mac Nginx 安装(最新系统版本安装,包含M1)
Mac Nginx 安装(最新系统版本安装,包含M1)
1449 0

热门文章

最新文章