CSS清除浮动的几种常见方法

news/2024/7/24 4:02:57 标签: css, html, css3

文章目录

  • 浮动
  • 优点
  • 缺点
  • 清除浮动
    • 一、额外标签法
      • 实例
    • 二、父级添加overflow属性
      • 实例
    • 三、使用:after
      • 实例
    • 四、使用双伪元素
      • 实例
    • 五、手动设置父级高度
      • 实例
  • 注意





浮动

当元素浮动以后可以向左或向右移动,直到它的外边缘碰到包含它的框或者另外一个浮动元素的边框为止。元素浮动以后会脱离正常的文档流,所以文档的普通流中的框就变得好像浮动元素不存在一样。

优点

  • 在图文混排的时候可以很好的使文字环绕在图片周围

  • 当元素浮动了起来之后,它有着块级元素的一些性质例如可以设置宽高等,但它与inline-block还是有一些区别的:第一个就是关于横向排序的时候,float可以设置方向而inline-block方向是固定的;还有一个就是inline-block在使用时有时会有空白间隙的问题

缺点

  • 浮动元素一旦脱离了文档流,就无法撑起父元素,会造成父级元素的高度塌陷

清除浮动





一、额外标签法

额外标签法(在最后一个浮动标签后,新加一个标签,给其设置clear:both;)(不推荐)

添加空标签,并设置样式。

  • clear:left 清除左浮动

  • clear:right 清除右浮动

  • clear:both 清除左右浮动

  • clear:none 左右浮动都不清除

实例

html"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>html" title=css>css">
        .wrapper{
            width: 600px;
            border: 2px solid black;
        }
        .box1, .box2, .box3 {
            width: 200px;
            height: 150px;
        }

        .box1 {
            background-color: #FF0000;
            float: left;
        }

        .box2 {
            background-color: blue;
            float: left;
        }
        .box3 {
            background-color: green;
        }
        .clear{
            clear: both;
        }
    </style>
</head>
<body>
<div class="wrapper">
    <div class="box1">box1</div>
    <div class="box2">box2</div>
    <div class="clear"></div>
    <div class="box3">box3</div>
</div>

</body>
</html>

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

img

二、父级添加overflow属性

在要清除浮动父级添加样式:overflow:hidden

当子元素的尺寸超过父元素的尺寸时,需要设置父元素显示溢出的子元素的方式,可在元素浮动的父级盒子添加样式overflow:hidden

html"><div class="parents"html" title=css>css"> style="overflow:hidden;"></div>

属性值:

visible:默认值。内容不会被修建,会呈现在元素框之外,不剪切页不添加滚动条。

auto:不显示超出内容,不剪切,会按照内容是否超出,自动添加,可用作清除浮动。

hidden:内容会被修建,且剩余内容不可见,此属性还有清除浮动、清除margin-top塌陷的功能。

scroll:内容会被修建,但是浏览器会显示滚动条以便查看剩余内容。

原理:触发BFC(块格式化上下文)。

当元素设置了overflow样式,且值不为visible时,该元素就建构了一个BFC(哪些情况下,元素可以建构出BFC,可以看查看CSS文档对BFC的定义)。在我们的例子中,父盒子因设置了值为hiddenoverflow样式,所以该元素建构出一个BFC,按照第三个特点,BFC的高度是要包括浮动元素的,所以父盒子的高度被撑起来,达到了清除浮动影响的目的。

实例

html"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>html" title=css>css">
        .wrapper {
            width: 600px;
            border: 2px solid black;
            margin: 50px auto;

            /*清除浮动*/
            overflow: hidden;
        }

        .box1, .box2, .box3 {
            width: 200px;
            height: 150px;
        }

        .box1 {
            background-color: #FF0000;
            float: left;
        }

        .box2 {
            background-color: blue;
            float: left;
        }

        .box3 {
            background-color: green;
        }
    </style>
</head>
<body>
<div class="wrapper">
    <div class="box1">box1</div>
    <div class="box2">box2</div>

</div>
<div class="box3">box3</div>

</body>
</html>

原理

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

优点

  • 代码简洁

缺点

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

推荐使用

img

三、使用:after

为了减少多余的空标签,可采用给父级的伪元素添加样式实现清除浮动。

html" title=css>css">.clear:after{
	display:block;
	content:'';
	clear:both
}

该样式在clear,即父级元素的最后,添加了一个:after伪元素,通过清除伪元素的浮动,达到撑起父元素高度的目的。注意到该伪元素的display值为block,即,它是一个不可见的块级元素(有的地方使用table,因为table也是一个块级元素)。你可能已经意识到,这也只不过是前一种清除浮动方法(添加空白div)的另一种变形,其底层逻辑也是完全一样的。

实例

html"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>html" title=css>css">
        .wrapper {
            width: 600px;
            border: 2px solid black;
            margin: 50px auto;
        }

        .wrapper:after {
            /*    清除浮动*/
            content: "";
            display: block;
            clear: both;
        }

        .box1, .box2, .box3 {
            width: 200px;
            height: 150px;
        }

        .box1 {
            background-color: #FF0000;
            float: left;
        }

        .box2 {
            background-color: blue;
            float: left;
        }

        .box3 {
            background-color: green;
        }
    </style>
</head>
<body>
<div class="wrapper">
    <div class="box1">box1</div>
    <div class="box2">box2</div>
</div>
<div class="box3">box3</div>

</body>
</html>

img

四、使用双伪元素

同时使用:befor:after

原理和前者大差不差。

实例

html"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>html" title=css>css">
        .wrapper {
            width: 600px;
            border: 2px solid black;
            margin: 50px auto;
        }
        /* 清除浮动 */
        .wrapper:after,.wrapper:before{
            content: "";
            display: table;
        }
        .wrapper:after{
            clear: both;
        }

        .box1, .box2, .box3 {
            width: 200px;
            height: 150px;
        }

        .box1 {
            background-color: #FF0000;
            float: left;
        }

        .box2 {
            background-color: blue;
            float: left;
        }

        .box3 {
            background-color: green;
        }
    </style>
</head>
<body>
<div class="wrapper">
    <div class="box1">box1</div>
    <div class="box2">box2</div>
</div>
<div class="box3">box3</div>

</body>
</html>

img

五、手动设置父级高度

因为父盒子没有设定高度,所以才会塌陷,这种时候可以手动给父盒子设置高度,不让它塌陷。

但是,不推荐使用!面试时候可以提一嘴。

实例

html"><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>html" title=css>css">
        .wrapper {
            width: 600px;
            border: 2px solid black;
            margin: 50px auto;
        /*    手动指定高度*/
            height: 300px;
        }


        .box1, .box2, .box3 {
            width: 200px;
            height: 150px;
        }

        .box1 {
            background-color: #FF0000;
            float: left;
        }

        .box2 {
            background-color: blue;
            float: left;
        }

        .box3 {
            background-color: green;
        }
    </style>
</head>
<body>
<div class="wrapper">
    <div class="box1">box1</div>
    <div class="box2">box2</div>
</div>
<div class="box3">box3</div>

</body>
</html>

img

注意

在实际项目开发中,一般首选第二种方法。


http://www.niftyadmin.cn/n/555221.html

相关文章

Hive入门介绍

hive转载于:https://www.cnblogs.com/duanxz/p/9010625.html

函数的方法Date

在JS中所有时间相关的内容都是使用Date对象来表示。如果我们之间创建一个新的Date对象&#xff0c;则该对象中会封装当前的时间。可以在构造函数中能够传递一个日期的字符串&#xff0c;来创建一个指定日期的Date对象。格式&#xff1a;月/日/年 时:分:秒 1.时间相关方法 get…

[leetcode]678. 有效的括号字符串(双栈写法)

文章目录双向遍历双栈题目传输&#xff1a;678. 有效的括号字符串 双向遍历 极端假设替换为全左或全右&#xff0c;双向遍历验证 假设所有 ’ 都为 ‘(’ 因左括号必须在配对的左边&#xff0c;故从左向右遍历&#xff0c;看是否足够覆盖所有 ‘)’假设所有 ‘*’ 都为 ‘)’…

用 Jenkins + .netcore 2.0 构建

上一篇是关于 .net framework 框架的, 今天是关于 .netcore 2.0 的 这里为大家分享 配置中踩到的坑 cd %WORKSPACE%\"需要还原的项目目录"dotnet restore --configfile NuGet.Config 这句是关键, vs2017 会默认读取该文件,,但是 命令必须指定!!!dotnet build --fr…

自定义导入弹框

导入文件或者批量导入文件时&#xff0c;可以自定义导入弹框&#xff0c;里面包含下载导入模板、选择文件等功能。 1.导入弹框结构 <el-dialog title"导入" :visible.sync"importFormVisible" width"600px" center :before-close"clos…

Array.prototype.slice()

文章目录语法注意示例语法 slice(start,end) 方法可从已有数组中返回选定的元素&#xff0c;返回一个新数组&#xff0c;包含从start到end&#xff08;不包含该元素&#xff09;的数组元素。 start参数&#xff1a;必须&#xff0c;规定从何处开始选取&#xff0c;如果为负数…

面向对象设计中private,public,protected的访问控制原则及静态代码块的初始化顺序...

第一&#xff1a;private, public, protected访问标号的访问范围。private&#xff1a;只能由1.该类中的函数2.其友元函数访问不能被任何其他访问&#xff0c;该类的对象也不能访问。protected&#xff1a;可以被1.该类中的函数2.子类的函数3.其友元函数访问但不能被该类的对象…

vue使用canvas渲染pdf

1.原生方法 <div><div class"bottom" style"position: fixed;right: 0"><input class"pdf-zoom" type"submit" value"" click"zoomPdf(1)"/></br><input class"pdf-zoom" …