x-note
  • Introduction
  • JavaScript
    • JavaScript 作用域链
    • JavaScript 数据结构与类型
    • JavaScript 原型
    • JavaScript this 关键字
    • JavaScript 函数
    • JavaScript delete 运算符
    • JavaScript 内存管理与垃圾回收
    • JavaScript 严格模式与混乱模式
    • JavaScript 数字精度丢失
    • JavaScript 并发模型
    • 利用原型链实现继承
  • ECMAScript
    • ECMAScript 6 变量及常量的声明
    • ECMAScript 6 变量的解构赋值
    • ECMAScript 6 Promise 对象
    • ECMAScript 6 Symbol
    • ECMAScript 6 Proxy
    • ECMAScript 6 Reflect
    • ECMAScript 6 new.target
    • ECMAScript 6 Set 和 WeakSet
    • ECMAScript 6 Map 和 WeakMap
    • ECMAScript 6 Iterator
    • ECMAScript 6 Generator
    • ECMAScript 6 class
    • ECMAScript 7
    • ECMAScript 8 async 函数
    • ECMAScript 8 内存共享与原子性
    • ECMAScript 8 Others
    • ECMAScript 2018
    • ECMAScript 2019
  • CSS
    • CSS 块格式化上下文(BFC)
    • CSS 盒模型
    • CSS 外边距合并
    • CSS Float
    • CSS Position
    • CSS Border-Image
    • CSS BEM
    • CSS 表布局详解
    • 页面布局之单列布局
    • 页面布局之多列布局
  • React
    • React 组件的生命周期
    • React 虚拟 DOM
    • React Reconciliation
    • React Diff 算法核心
    • React Fiber
    • React Scheduling
    • React Context API
    • React Refs
    • React HMR
    • React Hook
  • VUE
    • VUE 响应式系统
    • VUE 渲染机制
    • 关于 Vue 的思考
  • Webpack
    • Webpack 基本概念
    • Webpack HMR
  • Babel
    • @babel/preset-env
  • WEB
    • WEB 基础知识及概念
      • 屏幕测量单位
      • 重绘与重排
      • 前端模块化系统
      • WEB 客户端存储
      • 浏览器的渲染过程
    • WEB 性能优化
      • WEB 性能指标
      • WEB 图片优化
      • 懒加载资源
    • WEB 安全
      • XSS
      • XSRF
      • 点击劫持
      • 同源策略(Same Origin Policy,SOP)
    • WEB 解决方案
      • webp 兼容方案
      • WEB 拖拽实现方案
    • WEB SEO
  • Git
    • Git 工作流
    • Git 内部原理
  • 传输协议
    • UDP
      • UDP 基本概念
    • TCP
      • TCP 基本概念
    • HTTP
      • HTTP 基础
      • HTTP 缓存
      • HTTP-2
      • HTTP-3
      • HTTPS
      • 自定义 HTTPS 证书
  • Protocol Buffers
    • Protocol Buffers 基础
  • gRPC
    • gRPC 简介
    • gRPC 基础概念
    • GRPC with GraphQL and TypeScript
  • 正则表达式
    • 正则表达式基础
    • 正则表达式的悲观回溯
  • 基础算法
    • 冒泡排序
    • 插入排序
    • 选择排序
    • 快速排序
    • 归并排序
    • 希尔排序
    • 堆排序
    • 桶排序
    • 计数排序
    • 基数排序
    • 二叉树的遍历
    • 动态规划
    • 回溯
  • 压缩算法
    • HPACK
    • QPACK
  • 设计模式
    • DDD
      • 模型元素的模式
    • 常见设计模式
      • 工厂方法
      • 抽象工厂
      • 构造器
      • 原型
      • 单例模式
      • 适配器模式
      • 桥接模式
      • 组合模式
      • 外观模式
      • 享元模式
      • 代理模式
      • 责任链模式
      • 命令模式
      • 迭代器模式
      • 中介者模式
      • 备忘录模式
      • 观察者模式
      • 状态模式
      • 策略模式
      • 模版方法模式
      • 访问者模式
      • 依赖注入
    • MVC
    • MVP
    • MVVM
  • 颜色空间
    • LCH
由 GitBook 提供支持
在本页
  • 浮动元素
  • 环绕浮动元素
  • 浮动元素的包含块
  • 浮动元素的规则
  • 浮动元素与正常流重叠
  • 清除浮动
在GitHub上编辑
  1. CSS

CSS Float

CSS float 属性使得元素浮动。

值

left、right、none、inherit

初始值

none

应用于

所有元素

继承性

无

计算值

根据指定确定

.ad {
  float: right;
}
<img src="xxx.png" class="ad" />

如果对非替换元素浮动,必须为其声明 width。

div.ad,
span.ad {
  width: 5em;
}
<div class="ad">float</div>
<span class="ad">float</span>

浮动元素

当给任意元素增加 float 属性后,会使其成为浮动元素。 浮动元素会以某种方式从正常的文档流中移除。

环绕浮动元素

一个元素浮动时,其它的内容会“环绕”该元素。

p.aside {
  float: right;
  margin: 10em;
}
<p class="aside">
  float float float float float float float float float float float float float
  float float float float float float float float float float float
</p>
<p>
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
</p>

此外,浮动元素周围的外边距不会合并。

可以对之前的 Demo 的 CSS 调整进行验证。

p {
  margin: 5em;
}
p.aside {
  float: right;
  margin: 10em;
}

浮动元素的包含块

浮动元素会生成一个块级框,无论该元素本身是什么。 也就是说,对浮动元素声明 display: block; 是无意义的.

浮动元素的 包含块(containning block) 是其最近的块级祖先元素。

<div class="ancestor-0">
  <div class="ancestor-1">
    <span class="ancestor-2">
      <img style="float: left;" />
    </span>
  </div>
</div>

对于这个例子,浮动元素 <img /> 的包含块是 class="ancestor-1" 的 div。

浮动元素的规则

  1. 浮动元素的左外边界不能超出其包含块的左內边界,右外边界不能超出其包含块的右內边界。

  2. 浮动元素的左外边界必须是包含块中之前出现的左浮动元素的右外边界,右外边界必须是包含块中之前出现的右浮动元素的左外边界。除非,后出现的浮动元素在先出现的浮动元素的底端。

  3. 左浮动元素的右外边界不会在其右边浮动的左外边界的右边。一个右浮动元素左外边界不会在其左边任何左浮动元素的右外边界的左边。

  4. 浮动元素的顶端不能比其父元素的内顶端更高。

  5. 浮动元素的顶端不能比之前所有浮动元素或块级元素的顶端更高。

  6. 如果源文档中一个浮动元素之前出现另一个元素,浮动元素的顶端不能比包含该元素所生成框的仍和行框的顶端要高。

  7. 左浮动元素的左边有另一个浮动元素,前者的右边界不能在其包含块的右边界的右边。右浮动元素的右边有另一个浮动元素,前者的左边界不能在其包含块的左边界的左边边。

  8. 浮动元素必须尽可能高地放置。

  9. 左浮动元素必须向左尽可能远,右浮动元素必须向右尽可能的远。

简单的总结就是浮动元素不能超出其包含块,且尽可能的贴着包含块的内边界“漂浮”。

浮动元素与正常流重叠

如果一个浮动元素在内容流过的边上有负外边距,最终导致浮动元素与正常流重叠。 对此,CSS 2.1 指出以下规则:

  • 行内框与一个浮动元素重叠时,其边框、背景和内容都在该浮动元素“之上”显示。

  • 块框与一个浮动元素重叠时,其边框和背景在该浮动元素“之下”显示,而内容在浮动元素“之上”显示。

清除浮动

利用 clear 属性可以确保某个元素不与浮动元素在同一行。

值

left、right、both、none、inherit

初始值

none

应用于

块级元素

继承性

无

计算值

根据指定确定

h3 {
  clear: both;
  background: rgba(0, 0, 0, 0.6);
}
<p>
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat
</p>
<img src="XXX.png" alt="img1" style="float: left;" />
<p>
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat
</p>
<img src="XXX.png" alt="img2" style="float: right;" />
<h3>
  h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3 h3
  h3 h3 h3 h3 h3 h3 h3 h3 h3 h3
</h3>
<p>
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
  repeat repeat repeat repeat repeat repeat repeat
</p>
上一页CSS 外边距合并下一页CSS Position

最后更新于5年前