CSS元素的总宽度计算规则

CSS 盒子模型(Box Model)的默认计算规则。

在默认情况下(box-sizing: content-box),元素的总宽度计算公式是:总宽度 = 内容区宽度(width) + 左右内边距(padding-left + padding-right) + 左右边框(border-left + border-right)

这种计算方式的设计逻辑是:

  • width 仅表示元素内部内容区域的宽度
  • padding 是内容与边框之间的空间,属于元素 "内部扩展"
  • border 是元素的边框线,属于元素 "边缘"

比如:

javascript 复制代码
div {
  width: 240px;
  height: 35px;
  border: 1px solid #d9e0ee;
  border-top: 3px solid #ff8400;
  line-height: 35px;
  padding-left: 40px;
  font-size: 14px;
}

当设置 width: 240px 并添加 padding-left: 40px 和 border: 1px 时:总宽度 = 240px(内容) + 40px(左内边距) + 0(右内边距) + 1px(左边框) + 1px(右边框) = 282px

【注】padding-left 会让元素整体变宽 ------ 因为默认规则下,内边距和边框都是在 width 之外额外计算的。

增加 padding-left 时,元素的总宽度会变大(内容宽 + 左内边距 + 边框宽度)。

要解决这个问题,可以使用 box-sizing: border-box 属性,它会让 width 包含内容区、内边距和边框的宽度,这样修改 padding 就不会改变元素的总宽度了。

添加 box-sizing: border-box 后:

  • 元素的总宽度会固定为 width 设定的 240px
  • padding-left: 40px 会从内容区域内部 "挤压" 空间,而不是向外扩展
  • 边框的宽度也会包含在总宽度内,不会额外增加元素的整体尺寸
javascript 复制代码
div {
  width: 240px;
  height: 35px;
  border: 1px solid #d9e0ee;
  border-top: 3px solid #ff8400;
  line-height: 35px;
  padding-left: 40px;
  font-size: 14px;
  /* 新增这行代码 */
  box-sizing: border-box;
}
相关推荐
小小龙学IT7 分钟前
Nginx 开源 Web 服务器与反向代理深度解
前端·nginx·开源
鶴哥只手遮天22 分钟前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 2 章 响应式内幕(一):`effect` 与依赖追踪机制
前端·vue.js·开源
鶴哥只手遮天23 分钟前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 06 章 编译器内幕(二):`transform` 管线与结构指令
前端·vue.js·开源
鶴哥只手遮天24 分钟前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 09 章 编译器内幕(五):compiler-sfc的SFC解析与<script setup> 编译
前端·vue.js·开源
码银27 分钟前
【web】基于HTML/CSS,JavaScript + Three.js做3D流程图
前端·css·html
鶴哥只手遮天27 分钟前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 17 章 运行时内幕(五):`runtime-dom`、自定义元素与内置组件
前端·vue.js·开源
鶴哥只手遮天27 分钟前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 13 章 运行时组件系统:实例、props、emit、slots 与生命周期
前端·vue.js·开源
Highcharts.js30 分钟前
Highcharts React v5 正式发布:支持 ESM、更简洁的组件、更出色的开发体验
前端·react.js·前端框架·数据可视化·highcharts·前端可视化·esm
鶴哥只手遮天33 分钟前
Vue 3 核心源码深度剖析系列(v3.5.44)-第 10 章 compiler-sfc(二)
前端·vue.js·开源
will_net37 分钟前
Vue IIS部署 api 访问当前站点 代理跳转真实API 问题
前端·javascript·vue.js