前端笔记----清除浮动

一.浮动的特点:

1.只有左浮动和有浮动,不存在中间浮动;
2.浮动碰到边界就停下来,无论是父元素的边界还是子元素的边界;
3.浮动默认按文档流的形式布局,一行位置不够就自动换行;
4.浮动会自动将行内元素或块元素转化为行内块元素,同时没有一般转化为行内块元素的间距问题;
5.浮动元素后面没有浮动的元素会占据浮动元素的位置,浮动元素不占位置,没有浮动的元素内的文字会避开浮动的元素,形成文字饶图的效果;
6.浮动元素之间没有垂直margin的合并;

二.CSS设置属性中经常要用到浮动,但是父元素如果没有设置尺寸(一般指的是高度不设置),当父元素内所有的子元素设置浮动,

浮动的元素无法撑开父元素,父元素需要清除浮动达到撑开的效果。

如下:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>清除浮动</title>
    <style>
        .box {
             500px;
            border: 1px solid red;
            margin: 10px;
            padding: 10px;
        }

        .box1 {
             200px;
            height: 20px;
            float: left;  # 设置浮动
            background-color: red;
        }
        
</head>

<body>
    <hr class="hrx">
    <div class="box clearfix">
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
    </div>
</body>

</html>

  效果:

可以看到,box并没有包裹住所有的子元素,因为浮动的元素不占盒子的位置。

解决办法一般有三种:

1.使用通用的清浮动样式类,一般命名clearfix,原理是利用伪类选择器after和before在元素的头和尾各增加一个空的块元素,一般用div或table(表格);然后

使用clear属性,设置both,即不允许左右浮动;记住:一定要设置在clearfix:after上。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>清除浮动</title>
    <style>
        .box {
             500px;
            border: 1px solid red;
            margin: 10px;
            padding: 10px;
        }

        .box1 {
             200px;
            height: 20px;
            float: left;
            background-color: red;
        }
        /* 清除浮动的样式类 */
        .clearfix:after,
        .clearfix:before {
            content: "";
            display: table;
        }
        .clearfix:after {
            clear: both;
        }
    </style>
</head>

<body>
    <hr class="hrx">
    <div class="box clearfix">
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
    </div>
</body>

</html>

 结果:

2.在父级标签上设置元素溢出,增加属性overflow:hidden;其必须知道外部父级的实际边界,但是这种方法有局限性,当浮动的元素超出盒子边界后会被剪裁掉。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>清除浮动</title>
    <style>
        .box {
             500px;
            border: 1px solid red;
            margin: 10px;
            padding: 10px;
            overflow: hidden;  # 添加元素溢出隐藏
        }

        .box1 {
             200px;
            height: 20px;
            float: left;
            background-color: red;
        }
       
    </style>
</head>

<body>
    <hr class="hrx">
    <div class="box clearfix">
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
    </div>
</body>

</html>

  3.在最后一个子元素的后面加一个空的div,给它样式属性 clear:both(不推荐),这样子元素就不再是整体浮动,而是有一个不浮动。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>清除浮动</title>
    <style>
        .box {
             500px;
            border: 1px solid red;
            margin: 10px;
            padding: 10px;
            
        }

        .box1 {
             200px;
            height: 20px;
            float: left;
            background-color: red;
        }
# 设置空的div不允许左右浮动
        .boxx{
            clear:both;
        }
       
    </style>
</head>

<body>
    <hr class="hrx">
    <div class="box clearfix">
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="box1"></div>
        <div class="boxx"></div>
    </div>
</body>

</html>

  

 

原文地址:https://www.cnblogs.com/cwp-bg/p/7589468.html