清除浮动方法

清除浮动方法
1.产生浮动原因
今天遇到一个css布局问题,父元素div里的子div元素居然跑到父元素外面,不再撑开父元素,查原因是产生了浮动,看现象如下:

这里写图片描述

图里,两个子div(蓝色)元素应该都包含在父div(绿色)里才对,居然跑到父容器外了,看起来就是父元素没有被撑开。

看代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .fdiv{
            width: 400px;
            border: 1px solid #27AE60;
        }
        .left,.right{
            width: 160px;
            height: 100px;
            border: 1px solid #178fe5;
        }
        .left{
             float: left;
        }
        .right{
            float: right;
        }
    </style>
</head>
<body>
    <div class="fdiv">
        <div class="left"></div>
        <div class="right"></div>
    </div>

</body>
</html>

看代码说话,按理,父元素的高度是由其所包含的子元素高度决定的,在没有设置父元素高度请款下,高度应该是子元素高度100px,但这里父元素高度并没有呀!为什么?
我查了原因才知道这是由于子元素设置了float属性,所以产生了这种现象。为什么会这样?我再查了原因:
浮动定位是脱离正常文档流布局定位的,子元素设置了float属性,脱离正常文档流布局,父元素没有高度属性,自然不会把子元素包含进去。
那么知道怎么回事,接下来就找了几种清楚浮动的方法啦:)

2.解决方法总结
第一种:为父元素设置适合高度。我比较懒,想到的第一个方法自然是给父元素div找个适合的高度哈哈哈哈:

<style>
    .fdiv{
        width: 400px;
        height: 100px;
        border: 1px solid #27AE60;
    }
    .left,.right{
        width: 160px;
        height: 100px;

        border: 1px solid #178fe5;
    }
    .left{
         float: left;
    }
    .right{
        float: right;
    }
</style>

简单粗暴有木有!?
不想那么low,也可以这样解决:

第二种:添加伪类清除浮动,在子元素后再加个兄弟div元素,设置样式clear清除浮动,直接加一个div冗余标签有违语义化规则,所以这里我想到用伪类来给父元素加特殊样式,在W3C标准有这样定义:::before和::after这两个主要用来给元素的前面或后面插入内容,这两个常用”content”配合使用

备注:
原文: https://www.w3cplus.com/css3/pseudo-class-selector © w3cplus.com

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .fdiv{
            width: 400px;
            border: 1px solid #27AE60;
        }
        .common{
            width: 160px;
            height: 100px;
            border: 1px solid #178fe5;
        }
        .left{
             float: left;
        }
        .right{
            float: right;
        }
        .fdiv:after{
            content: "";
            clear: both;
            display: block;
        }
    </style>
</head>
<body>
    <div class="fdiv">
        <div class="common left"></div>
        <div id="next" class="common right"></div>
    </div>
</body>
</html>

看图效果如下:

这里写图片描述

未完待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值