前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库float 与 inline-block 文字环绕区别
CSS盒模型与排版

想让文字绕着图片排,用 float 和 inline-block 效果一样吗?

只有 float 能做文字环绕。float 把元素移出正常流贴到一侧,后面的文字行会缩短,从它旁边绕过去。inline-block 还是行内元素,只是和文字挤在同一行里,把那一行撑高,下一行文字照样从最左边开始,不会绕着它排。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#盒模型与排版
先看核心答案读代码示例
理解线索

一个在行外,一个在行内

  1. float移出正常流贴到左或右,后续行盒让出宽度,形成环绕
  2. inline-block作为一个整体放进行盒,像一个大号的字符参与排版
  3. 行盒每一行文字的容器,环绕就是行盒宽度被浮动元素压短

float 脱离的只是块级排版,文字仍然能感知它,所以才会绕开。绝对定位是彻底脱离,文字看不见它,会直接压在底下。

核心回答

先记住这个答案

不一样,只有 float 能做出文字环绕。float 让元素离开正常流,贴到容器的左边或右边,后面的块元素会当它不存在,但里面的文字行会感知到它,把自己缩短,从它旁边绕过去,图片下面没文字的地方文字又回到全宽。inline-block 没有离开正常流,它就像一个大号字符插在文字行里,最多让这一行变高,下一行照样从最左边开始,所以不会环绕。两者还有几处区别:float 不撑开父容器高度,inline-block 会;inline-block 受 vertical-align 和空白字符影响,float 不受。

  • float 脱离正常流,后面的行盒会缩短绕开它
  • inline-block 不让文字环绕
  • 浮动可能令父容器高度塌陷
  • 行内块之间的源码空白会成间隙

同一张图,两种写法的排版

一篇文章配一张图,希望图放在左边,正文绕着图排。

float 和 inline-block 放在一起对比HTML
<p>
  <img class="pic float" src="a.png" width="120" height="120" />
  这里是一大段正文,文字会从图片右边开始排,排到图片底部以下时回到最左边……
</p>

<p>
  <img class="pic inline" src="a.png" width="120" height="120" />
  这里是另一段正文,只有第一行和图片同行,并且和图片底部对齐……
</p>

<style>
  .float  { float: left; margin-right: 12px; }       /* 文字环绕 */
  .inline { display: inline-block; }                 /* 图片是一个大字符,只占第一行 */
</style>

第一段里,图片浮到左边,正文前几行的行盒宽度都被压短,从图片右侧开始排;排到图片底部以下,行盒恢复全宽。这就是杂志式的环绕。 第二段里,图片和第一行文字排在同一行。图片 120px 高,这一行就被撑到 120px,文字默认按基线对齐,贴在图片底部那条线上。第二行文字在图片下面,从最左边开始,图片右侧上方是一大块空白。img 本来就是行内替换元素,写不写 inline-block 效果都差不多。

放到布局里的其它区别

以前没有 Flex 时,float 和 inline-block 都被拿来做横向排列,比如导航菜单、商品列表。这时它们还有几处行为差异,经常被一起问。

父容器高度
float 元素不参与父容器的高度计算。一个只包含浮动子元素的父容器,高度会塌成 0,背景和边框缩成一条线,要用清除浮动或 display: flow-root 修复。inline-block 在正常流里,父容器会被它撑开,不存在塌陷问题。
对齐方式
float 元素顶部对齐,各自贴着上边排,高度不同也是顶部平齐。inline-block 按 vertical-align 对齐,默认是基线,高度不同的卡片会底部参差不齐,通常要写 vertical-align: top。
空白间隙和居中
HTML 里标签之间的换行和空格,在 inline-block 之间会被渲染成一个空格宽的间隙,float 之间没有。反过来,inline-block 能用父级的 text-align: center 整体居中,float 只能贴左或贴右,做不到居中。
回答前,多想一步

容易答错的地方

以为 float 元素完全脱离了文档流
float 只是脱离了块级元素的正常流,后面的块盒会占到它下面去,但块盒里的行盒会避开它。文字能环绕,正是因为行盒还感知得到浮动元素。真正完全脱离的是 position: absolute,文字会直接被它盖住。
以为 inline-block 加 vertical-align: top 就能环绕
vertical-align: top 只是让图片和第一行文字顶部对齐,文字还是只有一行在图片旁边,第二行照样跑到图片下面。行内排版没有「让后面的行绕开」的能力。
以为给 float 元素设 display: inline-block 会生效
元素浮动后,display 的计算值会被强制转成块级,inline-block 算出来就是 block。所以同时写这两个没有意义,浮动元素本身就能设宽高。
试着用自己的话回答

面试官还会怎么问?

除了 float,还有别的办法做环绕吗?

没有能替代的布局方式,Flex 和 Grid 都不做环绕。但可以在 float 基础上加 shape-outside,比如 shape-outside: circle(50%),让文字沿着圆形而不是矩形边界绕排。它只对浮动元素生效。

现在做横向排列,还该用 float 或 inline-block 吗?

一般不用了。横向排列用 Flex,二维网格用 Grid,它们没有高度塌陷、空白间隙、基线对齐这些历史问题,还有 gap 可以直接控制间距。float 回到了它最初的用途,就是图文环绕。

浮动元素后面的块元素为什么背景跑到图片下面了?

后面的块盒不避让浮动元素,它的盒子从容器最左边开始,背景和边框会延伸到浮动图片的下面,只有里面的文字绕开了。想让整个块盒待在图片旁边,给它加 overflow: hidden 或 display: flow-root 创建 BFC,BFC 的边框盒不会和浮动元素重叠。

从一道题,走向一组知识

把知识连起来

盒模型与排版

父元素高度是 auto,为什么撑不开绝对定位的子元素?

float 不撑父高,绝对定位子元素也不撑,那道题讲 height: auto 忽略哪些子元素。

盒模型与排版

inline-block 排成一行的元素之间,为什么总有一条几像素的缝?

用 inline-block 横排时的空白间隙是这道题的一个区别点,那道题专门讲怎么去掉。

参考资料

  • CSS:盒模型与排版参考资料
  • display - CSS | MDN

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 同一张图,两种写法的排版
  3. 放到布局里的其它区别
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑