前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
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 热点
旧版
首页程序员面试题库content-box 总宽度计算 padding border
CSS盒模型与排版

width 200px 再加 padding 20px 和 border 5px,元素实际有多宽?

实际宽度是 250px。默认 box-sizing: content-box 下,width 只是内容区的宽度,左右各 20px 的 padding 和各 5px 的 border 要再加上去:200 + 40 + 10 = 250。

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

一个盒子从里到外四层

  1. 内容区content-box 下 width: 200px 指的就是这一层
  2. padding 和 border包在内容外面,默认要额外加进总宽度,这里是 40 + 10
  3. margin最外层透明留白,不属于元素本身,只影响和别人的距离

padding: 20px 是四个方向都加,所以高度同样会多出 50px。题目只问宽度,但写 CSS 时竖直方向也会被撑大。

核心回答

先记住这个答案

总宽度是 250px。默认的 box-sizing 是 content-box,这时 width 指的只是内容区的宽度。padding 和 border 画在内容区外面,要另外加:左右 padding 共 40px,左右 border 共 10px,200 + 40 + 10 = 250。margin 不算在里面,它是元素外面的留白。如果改成 box-sizing: border-box,width: 200px 就是最终宽度,内容区会被压缩成 150px。

  • content-box 下 width 只算内容区
  • 内容盒外还要加边框和内边距
  • margin 不算进元素宽度,但会占布局空间
  • border-box 下内容区会被挤小

两种 box-sizing 的算法对比

同样的三行声明,只差一个 box-sizing,结果差了 50px。

同样的样式,两个结果CSS
.a {
  width: 200px;
  padding: 20px;
  border: 5px solid #333;
  /* 默认 box-sizing: content-box */
  /* 内容区 200,总宽 200 + 20*2 + 5*2 = 250px */
}

.b {
  width: 200px;
  padding: 20px;
  border: 5px solid #333;
  box-sizing: border-box;
  /* 总宽固定 200,内容区 = 200 - 40 - 10 = 150px */
}

打开 DevTools 的 Computed 面板,下面那张盒模型图会分层标出每一层的数值,.a 中间的内容区是 200,.b 中间是 150。 可以把 content-box 想成「先定照片尺寸,再往外加相框」,相框越宽整体越大;border-box 是「先定整体尺寸,相框往里占」,照片被挤小。前者是 CSS 最初的规定,后者更符合设计稿的直觉,所以现在几乎所有项目都会全局改成 border-box。

项目里的通用写法
一般在全局样式里写 *, *::before, *::after { box-sizing: border-box; }。这样设计稿标多宽就写多宽,后面再调 padding 也不会把布局撑破。Tailwind、Bootstrap 的基础样式里都有这一条。

在 JS 里量出来是多少

面试官经常顺着问「JS 读到的宽度是多少」,这时要分清每个属性量的是哪一层。

各个宽度属性对应哪一层
对上面的 .a,offsetWidth 是 250,它量的是 border 外沿,包含内容、padding、border。clientWidth 是 240,只含内容和 padding,不含 border,有滚动条时还要减去滚动条宽度。getBoundingClientRect().width 在没有 transform 时也是 250,但它返回的是变换后的实际渲染尺寸,而且可以是小数。getComputedStyle(el).width 返回的是 '200px',也就是 CSS 里那个 width 的计算值。
回答前,多想一步

容易答错的地方

把 margin 也加进去
有人会答「再加上 margin」。margin 是元素之外的空白,决定它和相邻元素的距离,不属于元素自己的宽度。只是在排版时,它占用的横向空间是 250px 加左右 margin。
以为 padding: 20px 只加一边
padding: 20px 是上下左右四个方向都是 20px,宽度要加两次,border 同理。只加一次会算成 225px。
以为 border-box 下内容区不会变小
border-box 保证的是总宽度不变,代价是内容区变小。如果 padding 和 border 加起来超过了 width,内容区只会缩到 0,总宽度会被撑到 padding 加 border 的和,不会出现负数。
试着用自己的话回答

面试官还会怎么问?

怪异模式下的盒模型是怎么回事?

页面没有写 <!DOCTYPE html> 时,浏览器进入怪异模式,老 IE 的盒模型就是 width 包含 padding 和 border,效果和 border-box 一样。box-sizing: border-box 可以理解成把这种算法标准化了。所以页面第一行一定要写 DOCTYPE。

width: 100% 再加 padding 为什么会出现横向滚动条?

content-box 下 100% 只是内容区等于父元素宽度,再加上左右 padding 和 border,总宽就超过父元素了。改成 border-box,或者干脆不写 width,让块级元素自动填满父元素,就不会溢出。

box-sizing 会影响 min-width 和 max-width 吗?

会。min-width、max-width、min-height、max-height 都按 box-sizing 的规则来解释。border-box 下 max-width: 300px 限制的是包含 padding 和 border 的总宽度。

从一道题,走向一组知识

把知识连起来

盒模型与排版

clear both 到底做了什么,它是怎么避开左右两边浮动的?

两个浮动列宽度按 50% 算却掉到下一行,常见原因就是 content-box 下 padding 把总宽撑过了 100%。

盒模型与排版

子元素全部浮动后父元素高度变成 0,为什么?怎么修?

浮动布局里既要算准每列宽度,又要处理父元素高度塌陷,两个问题经常一起出现。

参考资料

  • CSS:盒模型与排版参考资料

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

本题目录
  1. 先记住这个答案
  2. 两种 box-sizing 的算法对比
  3. 在 JS 里量出来是多少
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

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

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