浮动与清除浮动(已完结)

浮动与清除浮动

浮动
  • float属性的取值

float : left | right | none | inherit

默认值 : none

适用于所有元素,没有继承性

  • 浮动框的范围

浮动元素的外边距边界定义了浮动框的大小

  • 浮动元素的包含块是其最近的块级祖先元素,且包含块的大小为该块级祖先元素的内容区

  • 浮动元素的特点

1.浮动元素会脱离标准文档流(这就是为什么浮动元素不能撑开父元素的高,以及浮动元素会覆盖非浮动元素的原因)

2.浮动元素会生成一个块级框,而无论这个元素本身是什么(比如行内元素。因此行内元素一旦浮动,便能够为其设置宽高)

  • 浮动元素的一些行为及规则(仅列出一些常用的)

1.浮动元素不能超出包含块的边界(不包括底边),这就是为什么多个浮动元素出现在同一水平行时,一旦一行容不下后续的浮动元素,后续的浮动元素会换行的原因

但是,如果浮动元素本身的宽就大于包含块的宽,则允许超出

另外,为浮动元素设置负margin,使其超出包含块也是允许的

2.行内框与一个浮动元素重叠时,其边框、背景、内容都在该浮动元素外显示。块框与一个浮动元素重叠时,其边框、背景在该浮动元素之下显示,而内容在浮动元素之外显示

例如

    <style type="text/css">
        *{
            margin: 0px;
            padding: 0px;
        }
        .div1{
            width: 100px;
            height: 100px;
            float: left;
            background-color: red;
        }
        span{
            background-color: blue;
        }
    </style>
    <body>
        <div class='div1'></div>
        <span>qwert</span>
    </body>

这里写图片描述

清除浮动
  • 取值

clear : left | right | both | none | inherit

默认值 : none

适用于块级元素(一定注意),无继承性

  • 清除浮动的原理

如果元素设置了clear(非none与inherit值),则用户代理会在元素上外边距的基础上再增加额外的间隔(这个间隔的术语叫‘清除区域’),以将元素移到浮动框下边界的下面(刚好移到下边界即可)

这就是浮动元素不会覆盖清除浮动元素的原因

怎么使浮动元素也能撑开包含块的高
  • 使包含块也浮动

原理是:浮动元素会延伸,从而包含其所有后代浮动元素

  • 清除浮动
    <style type="text/css">
        *{
            margin: 0px;
            padding: 0px;
        }
        .wrapper{
            width: 100px;
            background-color: red;
        }
        .inner{
            width: 50px;
            height: 50px;
            background-color: orange;
            float: left;
        }
        .flag-clear{
            clear: both;
        }
    </style>
    <body>
        <div class='wrapper'>
            <div class="inner"></div>
            <div class="flag-clear"></div>
        </div>
    </body>

这里写图片描述

只要flag-clear在清除浮动后,逻辑上在inner后面即可,并不用给flag-clear设置大小。撑开的原理就是前面说的——flag-clear的上外边距会增加

  • 伪元素与clear相结合(常用)
    <style type="text/css">
        *{
            margin: 0px;
            padding: 0px;
        }
        .wrapper{
            width: 100px;
            background-color: red;
        }
        .inner{
            width: 50px;
            height: 50px;
            background-color: orange;
            float: left;
        }
        .wrapper::after{
            content: '';
            display: block;
            clear: both;
        }
    </style>
    <body>
        <div class='wrapper'>
            <div class="inner"></div>
        </div>
    </body>

ps:本文案参考了以下书籍
《CSS权威指南》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值