目录
浮动" >浮动
1. 什么是浮动
2. 浮动的影响
3. 浮动的应用
清除浮动" >清除浮动
在子元素上清除
在父元素上清除,即BFC
首页 web前端 css教程 CSS浮动与浮动清除(BFC)简单教程

CSS浮动与浮动清除(BFC)简单教程

Apr 04, 2017 am 10:59 AM

浮动

1. 什么是浮动

当元素的 <a href="http://www.php.cn/wiki/919.html" target="_blank">float</a> 属性不为 none 时就产生了浮动。

&lt;p class=&quot;float&quot;&gt;float&lt;/p&gt;
登录后复制
.float {
  float: left;
  width: 100px;
  height: 100px;
  background-color: #ddd;
}
登录后复制

2. 浮动的影响

  1. 浮动会使元素脱离文档流,具体表现为:

  • 父元素高度塌陷,即不会包含浮动元素。
    比如上面的代码就会表现为

    CSS浮动与浮动清除(BFC)简单教程

    父元素高度塌陷

  • 文本环绕。

    CSS浮动与浮动清除(BFC)简单教程

    文本环绕效果


    可以注意到这里.normal元素的宽度覆盖了.float元素,但是.float元素下是没有文本的,也就是说文本被“挤”出来了,这是因为它虽然会脱离文档流,但是不会脱离文本流。这个效果也是float属性的本意。其代码如下:

    <body>
      &lt;p class=&quot;float&quot;&gt;float&lt;/p&gt;
      <p class="normal">正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素正常元素</p>
    </body>
    登录后复制
    body {
      background-color: #ccc;
    }
    .float {
      float: left;
      width: 100px;
      height: 100px;
      background-color: #ddd;
    }
    .normal {
      background-color: #fff;
    }
    登录后复制
  • 浮动元素的外边距不会合并。
    关于外边距合并的相关内容可以戳这里。

  • 元素一旦浮动便会变成行内块元素,即 <a href="http://www.php.cn/wiki/927.html" target="_blank">display</a>: inline-block

  • 3. 浮动的应用

    • 上面提到的文本环绕。

    • 写一个三列布局,左右固定宽度,中间自适应。

      &lt;body&gt;
        &lt;p class=&quot;left float&quot;&gt;left&lt;/p&gt;
        &lt;p class=&quot;right float&quot;&gt;right&lt;/p&gt;
        &lt;p class=&quot;mid&quot;&gt;自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素&lt;/p&gt;
      &lt;/body&gt;
      登录后复制
      body {
        background-color: #ccc;
      }
      .float {
        float: left;
        width: 100px;
        height: 100px;
        background-color: #ddd;
      }
      .left {
        float: left;
      }
      .right {
        float: right;
      }
      .mid {
        height: 100px;
        background-color: #fff;
        margin: 200px; /*故意加上了上下 margin 值*/
      }
      登录后复制

      这里我故意加上了上了 margin 值,可以看到效果:

      CSS浮动与浮动清除(BFC)简单教程

      三列布局

      body 也随 .midmargin 往下掉了,这点可以用前面介绍的外边距合并来解释。

      ps:我第一次自己写这个三列布局的时候,html 是这样写的

      &lt;body&gt;
        &lt;p class=&quot;left float&quot;&gt;left&lt;/p&gt;
        &lt;p class=&quot;mid&quot;&gt;自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素自适应宽度元素&lt;/p&gt;
        &lt;p class=&quot;right float&quot;&gt;right&lt;/p&gt;
      &lt;/body&gt;
      登录后复制

      如上把中间自适应的元素写在中间,其实这样比较符合逻辑,但是如果这样写是行不通的,右边的元素会掉下来,因为 .mid 元素是块级元素,会占满整行,.left 不会掉下来是因为它本来就是脱离文文档流的浮动元素。

    清除浮动

    在子元素上清除

    这里我只写不会产生无意义标签的方法。

    • 浮动元素后面若有兄弟元素,则可以在给它的兄弟元素加上<a href="http://www.php.cn/wiki/917.html" target="_blank">clear</a>属性。
      如文本环绕那一部分代码,给 .normal 加上 clear<a href="http://www.php.cn/wiki/974.html" target="_blank">:left</a> 或者 clear:bothclear 的具体用法这里不做过多赘述。

    • 给要清除浮动的元素加上伪类或者伪元素。

      .float::after {
        content: '';
        display: block;
        visiability: hidden;
        height: 0;
        clear: both;
      }
      登录后复制

      关于 ::after 的使用可以看 MDN 的文档。

    在父元素上清除,即BFC

    BFC(Block Formatting Context),即块级格式上下文,它的官方解释是:

    浮动、绝对定位元素(<a href="http://www.php.cn/wiki/902.html" target="_blank">position</a>absolutefixed)、行内块元素 display:inline-block表格单元格 display:table-cell、表格标题 display:table-caption 以及 <a href="http://www.php.cn/wiki/923.html" target="_blank">overflow</a> 属性值不为 visible 的元素(除了该值被传播到视点 <a href="http://www.php.cn/css/css-rwd-viewport.html" target="_blank">viewport</a> 的情况)将创建一个新的块级格式化上下文。

    总结来说它要满足下列条件之一:

    1. float 不为 none

    2. position 不为 <a href="http://www.php.cn/wiki/188.html" target="_blank">static</a>relative

    3. displaytable-celltable-captioninline-blockflexinline-flex

    4. overflow 不为 visible

    只要给父元素加上以上任意一个属性满足条件,也就是给父元素加上 BFC 就能清除子元素的浮动。

    以上是CSS浮动与浮动清除(BFC)简单教程的详细内容。更多信息请关注PHP中文网其他相关文章!

    本站声明
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    热门文章

    仓库:如何复兴队友
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    1 周前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒险:如何获得巨型种子
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热门文章

    仓库:如何复兴队友
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O.能量晶体解释及其做什么(黄色晶体)
    1 周前 By 尊渡假赌尊渡假赌尊渡假赌
    Hello Kitty Island冒险:如何获得巨型种子
    3 周前 By 尊渡假赌尊渡假赌尊渡假赌

    热门文章标签

    记事本++7.3.1

    记事本++7.3.1

    好用且免费的代码编辑器

    SublimeText3汉化版

    SublimeText3汉化版

    中文版,非常好用

    禅工作室 13.0.1

    禅工作室 13.0.1

    功能强大的PHP集成开发环境

    Dreamweaver CS6

    Dreamweaver CS6

    视觉化网页开发工具

    SublimeText3 Mac版

    SublimeText3 Mac版

    神级代码编辑软件(SublimeText3)

    vue中placeholder是什么意思 vue中placeholder是什么意思 May 07, 2024 am 09:57 AM

    vue中placeholder是什么意思

    vue中空格怎么写 vue中空格怎么写 Apr 30, 2024 am 05:42 AM

    vue中空格怎么写

    vue中怎么获取dom vue中怎么获取dom Apr 30, 2024 am 05:36 AM

    vue中怎么获取dom

    js中span是什么意思 js中span是什么意思 May 06, 2024 am 11:42 AM

    js中span是什么意思

    js中rem是什么意思 js中rem是什么意思 May 06, 2024 am 11:30 AM

    js中rem是什么意思

    vue中引入图片的方法 vue中引入图片的方法 May 02, 2024 pm 10:48 PM

    vue中引入图片的方法

    span标签的作用是什么 span标签的作用是什么 Apr 30, 2024 pm 01:54 PM

    span标签的作用是什么

    浏览器插件是什么语言写的 浏览器插件是什么语言写的 May 08, 2024 pm 09:36 PM

    浏览器插件是什么语言写的

    See all articles