清除浮动

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

    最初,引入 float 属性是为了能让 web 开发人员实现简单的布局,包括在一列文本中浮动的图像,文字环绕在它的左边或右边。但 大家很快意识到,它可以浮动任何东西,而不仅仅是图像,所以浮动的使用范围扩大了。
    当我们在网页各处使用 float 的时候,也由此引发的一些副作用,如:父元素塌陷、元素重叠,清除浮动也就是清除这些副作用。


一、浮动的特性

一、盖不住

浮动元素会脱离正常的文档流,按照其外边距指定的位置相对于它的上一个块级元素(或父元素)显示。

<html>
<head>
<title>浮动元素的性质</title>
<style type="text/css">
         *{
             margin:0;
             padding:0;
         }
         .box{
             width: 300px;
             height: 200px;
             padding: 50px;
             margin: 50px;
             background: red;
         }
         .inner{
             width: 100px;
             height: 100px;
             background: green;
             float: right;
         }
     </style>
 </head>
 <body>
     <div class='box'>
         <div class='inner'>浮动元素</div>
     </div>
 </body>
 </html>

浮动特性

二、不会溢出

浮动元素后面的块级元素的内容会向此浮动元素的外边距靠齐,但是边框和背景却忽略浮动元素而向上一个(实例中为父元素)任意非浮动元素靠齐。

W3School TIY Editor
W3School 在线教程
改变方向
暗黑模式
运行代码
300
<html>
<head>
<title>浮动元素的性质</title>
<style type="text/css">
         *{
             margin:0;
             padding:0;
         }
         .box{
             width: 300px;
             height: 200px;
             padding: 50px;
             margin: 50px;
             background: red;
         }
         .inner{
             width: 100px;
             height: 100px;
             background: green;
             float: left;
         }
         .notfloat{
             width: 200px;
             height: 200px;
             background: pink;
         }
     </style>
 </head>
 <body>
     <div class='box'>
         <div class='inner'>浮动元素</div>
         <div class='notfloat'>浮动元素后面的块级元素的内容会向此浮动元素的外边距靠齐。边框和背景却忽略浮动元素而向上一个任意非浮动元素靠齐
       </div>
     </div>
 </body>
 </html>

不会溢出

三、浮动元素后面的内联元素会向此浮动元素的外边距靠齐。

<html>
<head>
<title>浮动元素的性质</title>
<style type="text/css">
         *{
             margin:0;
             padding:0;
         }
         .box{
             width: 300px;
             height: 200px;
             padding: 50px;
             margin: 50px;
             background: red;
         }
         .inner{
             width: 100px;
             height: 100px;
             margin: 10px;
             background: green;
             float: left;
         }
         .notfloat{
             background: pink;
         }
     </style>
 </head>
 <body>
     <div class='box'>
         <div class='inner'>浮动元素</div>
         <span class='notfloat'> 
             浮动元素后面的内联元素会向此浮动元素的外边距靠齐
         </span>
     </div>
 </body>
 </html>

对齐

四、浮动元素的上一个元素如果没有浮动,浮动只在当前行浮动;当浮动遇到浮动,它们将在一行排序,除非没有位置了

<html>
<head>
<title>浮动元素的性质</title>
<style>
        *{
            margin:0;
            padding:0;
        }
       div{
           width:100px;
           height:100px;
       }
        .item1{
            background-color: pink;
        }
        .item2{
            float:left;
            background-color: green;
        }
        .item3{
            float:left;
            background-color: Purple;
        }
</style>
<body>
<div class="item1">item1</div>
<div class="item2">item2</div>
<div class="item3">item3</div>
</body>
 </html>

浮动的特性


二、清除浮动的方法

一、利用 clear 属性

1. 为 float 元素后的元素添加 clear 属性(额外标签法)

给谁清除浮动,就在其后额外添加一个空白标签 。

  • 优点:通俗易懂,书写方便。(不推荐使用
  • 缺点:添加许多无意义的标签,结构化比较差。
插入前

代码如下(示例):

<html>
<head>
<title>float 元素后的元素添加 clear 属性</title>
</head>
<style>
    .a,.b{
        width: 100px;
        height: 100px;
        border: 1px solid red;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
    .c{
        height: 50px;
        border: 3px solid green;
    }
</style>
<body>
        <div class="a">a</div>
        <div class="b">b</div>
        <div class="c">c</div>
</body>
</html>

插入前

插入后

代码如下(示例):

<html>
<head>
<title>float 元素后的元素添加 clear 属性</title>
</head>
<style>
    .a,.b{
        width: 100px;
        height: 100px;
        border: 1px solid red;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
    .c{
        height: 50px;
        border: 3px solid green;
    }
    /* 清除浮动代码 */
    .c{clear:both}
</style>
<body>
        <div class="a">a</div>
        <div class="b">b</div>
        <div class="c">c</div>
</body>
</html>

插入后

2. 使用after伪元素清除浮动

after方式为空元素的升级版,好处是不用单独加标签了。(较常用)

  • 优点:符合闭合浮动思想,结构语义化正确
  • 缺点:由于IE6-7不支持:after,使用zoom:1,触发hasLayout。
使用前

代码如下(示例):

<html>
<head>
<title>使用after伪元素清除浮动</title>
</head>
<style>
    .parent{
        border: 3px solid red;
    }
    .a,.b{
        height: 100px;
        width: 100px;
        border: 1px solid green;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
    
</style>
<body>
    <div class="parent clearfix">
        <div class="a">a</div>
        <div class="b">b</div>
    </div>
</body>
</html>

清除浮动前

使用后

代码如下(示例):

<html>
<head>
<title>使用after伪元素清除浮动</title>
</head>
<style>
    .parent{
        border: 3px solid red;
    }
    .a,.b{
        height: 100px;
        width: 100px;
        border: 1px solid green;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
    /* 清除浮动代码 */
    .clearfix::after{
        content: "";
        display: block;
        clear: both;
    }
</style>
<body>
    <div class="parent clearfix">
        <div class="a">a</div>
        <div class="b">b</div>
    </div>
</body>
</html>

使用后

二、父级添加overflow方法

  • 优点:代码简洁(慎重使用,若该父盒子里还有position定位会引起麻烦)
  • 缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素。

hidden 内容会被修剪,并且其余内容是不可见的。hidden
auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。auto

使用前

代码如下(示例):

<html>
<head>
<title>父级添加overflow属性</title>
</head>
<style>
    .parent{
        border: 3px solid red;
    }
    .a,.b{
        height: 100px;
        width: 100px;
        border: 1px solid green;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
</style>
<body>
    <div class="parent fahter">
        <div class="a">a</div>
        <div class="b">b</div>
    </div>
</body>
</html>

插入前

使用后

代码如下(示例):

<html>
<head>
<title>父级添加overflow属性</title>
</head>
<style>
    .parent{
        border: 3px solid red;
    }
    .a,.b{
        height: 100px;
        width: 100px;
        border: 1px solid green;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
    /* 清除浮动代码 */
    .fahter{
        overflow: auto;
    }
</style>
<body>
    <div class="parent fahter">
        <div class="a">a</div>
        <div class="b">b</div>
    </div>
</body>
</html>

使用后

三、父级div也一起浮动

所有代码一起浮动,就变成了一个整体

  • 优点:没有优点
  • 缺点:会产生新的浮动问题。
使用前

代码如下(示例):

<html>
<head>
<title>父级div也一起浮动</title>
</head>
<style>
    .parent{
        border: 3px solid red;
    }
    .a,.b{
        height: 100px;
        width: 100px;
        border: 1px solid green;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
</style>
<body>
    <div class="parent fahter">
        <div class="a">a</div>
        <div class="b">b</div>
    </div>
</body>
</html>

使用前

使用后

代码如下(示例):

<html>
<head>
<title>父级div也一起浮动</title>
</head>
<style>
    .parent{
        border: 3px solid red;
    }
    .a,.b{
        height: 100px;
        width: 100px;
        border: 1px solid green;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
    /* 清除浮动代码 */
    .fahter{
        float: left;
    }
</style>
<body>
    <div class="parent fahter">
        <div class="a">a</div>
        <div class="b">b</div>
    </div>
</body>
</html>

使用后

四、父级div定义height

父级div手动定义height,就解决了父级div无法自动获取到高度的问题

  • 优点:简单,代码少,容易掌握
  • 缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题
使用前

代码如下(示例):

<html>
<head>
<title>父级div定义height</title>
</head>
<style>
    .parent{
        border: 3px solid red;
    }
    .a,.b{
        height: 100px;
        width: 100px;
        border: 1px solid green;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
</style>
<body>
    <div class="parent fahter">
        <div class="a">a</div>
        <div class="b">b</div>
    </div>
</body>
</html>

定义前

使用后

代码如下(示例):

<html>
<head>
<title>父级div定义height</title>
</head>
<style>
    .parent{
        border: 3px solid red;
    }
    .a,.b{
        height: 100px;
        width: 100px;
        border: 1px solid green;
    }
    .a{
        float: left;
    }
    .b{
        float: right;
    }
    /* 清除浮动代码 */
    .fahter{
        height: 200px;
    }
</style>
<body>
    <div class="parent fahter">
        <div class="a">a</div>
        <div class="b">b</div>
    </div>
</body>
</html>

定义后

总结

熟系并掌握浮动和清除浮动的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值