清淨
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • Java

    • Java 基础
  • 框架

    • Flyway
    • MapStruct
    • Spring Cloud
  • 中间件

    • Elasticsearch
    • Redis
    • RabbitMQ
    • Kafka
  • 三剑客

    • HTML
    • CSS
    • JavaScript
  • 进阶

    • jQuery
    • ECMAScript6
    • TypeScript
  • Vue

    • Vue2
    • Vue3
    • VuePress
  • Linux
  • Jenkins
  • Maven
  • MySQL
  • 插件工具
  • 代码集成
  • 其它

    • 数据结构与算法
    • 计算机网络
    • 操作系统
    • 设计模式
迁移日志
订阅号
微信订阅号
微信订阅号
GitHub
  • CSS

    • 常用
    • 选择器
    • 字体
    • 浮动
    • 定位
    • 背景
    • 渐变
    • 表格
    • Hack
    • 居中
    • 过渡(transition)
    • 动画(animation)
    • 变形(transform)
    • 弹性布局(flex)
    • Less
    • 媒体查询

浮动

  • 被浮动的元素直到遇到父元素的边框、其它浮动的元素、另一个块元素时,才会停止。
  • 当一行容不下时,浮动的元素会换行。
  • 浮动的元素不会超过它上边的兄弟元素。
  • 浮动的元素不会遮住文字, 文字会在其四周环绕(可设置文字环绕图片)。

所有元素经过浮动之后都会变为行内块元素。

高度塌陷问题

使用浮动后可能造成高度塌陷的问题,如下:

<div class="d1">
  <div class="d2">d2</div>
</div>
.d1 {
  border: 2px solid #f1393a;
}

上面的代码中,父元素的高度会由子元素撑开。但是,我们为子元素设置浮动后,其父元素的高度就没有了,那么其父元素的兄弟元素会往上移动,这就是高度塌陷的第一种情况。解决办法如下:

  • 给父元素设置高度

    但是,如果其子元素的高度太大时会溢出,然后其父元素不能适应其子元素,因此不推荐直接给父元素设置高度。

  • 开启 BFC

    BFC 全称是 Block Formatting Context,即块格式化上下,是 W3C 标准中规定的。BFC 默认是关闭的,开启方式有很多,如下:

    • 根元素或其它包含它的元素
    • 浮动(元素的 float 不为 none)
    • 绝对定位元素(元素的 position 为 absolute 或 fixed)
    • 行内块 inline-blocks(元素的 display: inline-block`)
    • 表格单元格(元素的 display: table-cell, HTML 表格单元格默认属性)
    • overflow 的值不为 visible 的元素
    • 弹性盒 flex boxes(元素的 display: flex 或 inline-flex)

    这里推荐使用 overflow,其它的方式会有副作用。

    给父元素设置 overflow 属性:

    .d1 {
      border: 2px solid #f1393a;
      overflow: auto;
      /* 或者 */
      /* overflow: hidden; */
      /* 兼容 IE6 */
      /* zoom:1 */
    }
    
  • 清理浮动

    给 .d2 清除浮动(注意, 使用的是父元素的伪元素),推荐使用此方式。

    .d1::after {
      content: "";
      display: table;
      clear: left;
    }
    

清理浮动

清除浮动到底是什么意思呢?清除浮动后,可以使布局看起来像没有使用过浮动一样。简单来讲,清除浮动后就相当于元素之间没有浮动,元素的位置还是使用浮动之前的位置。注意!只能通过兄弟节点来清除浮动,且只能使用块元素或行级块元素来清理浮动。

想要编辑此页?
上次更新: 2025/6/3 23:09
贡献者: Junfeng Dai
←字体定位→
[ 纸上得来终觉浅绝知此事要躬行 ]
Copyright © 2021-present Junfeng Dai
蜀ICP备2021009537号