在 Web 网页开发中,盒模型Box Model) 是 CSS 的核心概念,它决定了每个 HTML 元素在页面中占据的空间和布局方式。

无论是文本、图片还是按钮,浏览器都会将它们视为一个矩形盒子,并通过盒模型的规则计算其尺寸和位置。

Web 网页开发,就是把一个个的盒子摆在正确的位置,堆叠成好看的样子。

我一直觉得叫 盒模型 不是太完美,毕竟网页是二维平面,盒子给人的感觉像是三维中的事物,不过前人栽的树,咱们还是好好乘凉就行。

盒模型的四大组成部分

每个元素对应的盒子由四层结构组成,从内到外依次为:

  1. 内容区(Content)

    • 盒子里面装的东西(如文字、图片等),如手机的屏幕显示内容区域。
    • 通过 widthheight 控制尺寸(默认仅作用于内容区)。
  2. 内边距(Padding)

    • 内容区与边框之间的空白区域,如手机屏幕的黑边。
    • 通过 padding 属性设置(如 padding: 20px;)。
    • 可分别控制四个方向:padding-top, padding-right, padding-bottom, padding-left 等。
    • padding 用法:
    .box1 {
    padding: 1px; /* 设置一个值等同于 `padding: 1px 1px 1px 1px;` 四个值分别代表上右下左 */
    }
    .box2 {
    padding: 1px 2px; /* 设置两个值等同于 `padding: 1px 2px 1px 2px;` */
    }
    .box3 {
    padding: 1px 2px 3px; /* 设置三个值等同于 `padding: 1px 2px 3px 2px;` */
    }
    .box4 {
    padding: 1px 2px 3px 4px; /* 写全四个值 */
    }
  3. 边框(Border)

    • 围绕内容和内边距的可见线条,如手机的金属边框厚度。
    • 通过 border 属性设置(如 border: 2px solid #333;)。
    • 可自定义样式(实线、虚线)、颜色、圆角(border-radius)。
    • border 用法:
    .box1 {
    border: 2px solid #333;
    }
    /* 等同于 */
    .box1 {
    border-width: 2px;
    border-style: solid;
    border-color: #333;
    }
    /* 等同于 */
    .box1 {
    border-width: 2px 2px 2px 2px;
    border-style: solid solid solid solid;
    border-color: #333 #333 #333 #333;
    }
  4. 外边距(Margin)

    • 盒子与其他元素之间的透明空白区域,如两个手机之间的距离区域。
    • 通过 margin 属性设置(如 margin: 10px;)。
    • 支持负值(用于特殊布局,如元素重叠)。
    • 其用法与 padding 类似,也是可以同时设置四个方向。

标准盒模型 vs 替代盒模型

默认情况下,浏览器使用 标准盒模型(content-box),此时元素的总宽度计算公式为:

总宽度 = width + padding-left + padding-right + border-left + border-right + margin-left + margin-right

这种计算方式容易导致布局偏差(例如设置 width: 100% 后元素溢出容器)。


替代盒模型(border-box) 通过 box-sizing 属性切换:

.box1 {
box-sizing: border-box;
}

此时元素的 widthheight 直接表示整个盒子的尺寸(包含内容、内边距和边框),计算公式变为:

总宽度 = width(已包含padding和border) + margin-left + margin-right

这种方式更符合直觉,能显著简化布局计算,但需要注意设置行高需要减去 padding 和 border 。

如果觉得 替代盒模型 更符合使用方式,可使用通配符 * 全局设置元素的盒模型:

* {
box-sizing: border-box;
}

盒模型实战演示

示例代码:

<div class="box">这是一个盒子</div>
.box {
width: 200px;
height: 100px;
padding: 20px;
border: 5px solid #ff6b6b;
margin: 30px;
background-color: #ffe8e8;
box-sizing: content-box; /* 默认值 */
}

效果解析(标准盒模型):

  • 内容区:200px × 100px
  • 总宽度:200 + 20×2 + 5×2 + 30×2 = 310px
  • 总高度:100 + 20×2 + 5×2 + 30×2 = 210px


如果将 box-sizing 改为 border-box,则:

  • 总宽度:200px(包含padding和border) + 30×2 = 260px
  • 内容区自动缩小:200 - (20×2 + 5×2) = 150px

盒模型常见问题与技巧

  1. 外边距合并(Margin Collapse)

    • 现象:垂直相邻的两个块级元素,上下外边距会合并为较大的那个值。
    • 解决方案:使用 padding 替代,或通过父元素添加 overflow: hidden

  2. 元素居中

    /* 水平居中 */
    .box {
    margin-left: auto;
    margin-right: auto;
    }

    可利用 margin 属性实现水平居中,如下:

  3. 调试盒模型

    • 使用浏览器开发者工具(如Chrome DevTools)直接查看盒模型结构:

    • 通过 outline: 1px solid red; 临时高亮元素(不占用布局空间)。

总结

盒模型是CSS布局的基石,理解其组成和行为是避免布局混乱的关键。

Web前端入门第 29 问:CSS 盒模型:网页布局的基石的更多相关文章

  1. Android零基础入门第29节:善用TableLayout表格布局,事半功倍

    原文:Android零基础入门第29节:善用TableLayout表格布局,事半功倍 前面学习了线性布局和相对布局,线性布局虽然方便,但如果遇到控件需要排列整齐的情况就很难达到要求,用相对布局又比较麻 ...

  2. CSS盒模型的深度思考及BFC

    本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型 ...

  3. 【前端盲点】DOM事件流论证CSS盒模型是否具有厚度

    前言 很久没有扯淡了,我们今天来扯淡吧. 我今天思考了一个问题,我们页面的dom树到底是如何渲染的,而CSS盒模型与javascript是否有联系,于是便想到一个问题: CSS的盒模型具有厚度么??? ...

  4. web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史

    秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...

  5. 进击的Python【第十三章】:Web前端基础之HTML与CSS样式

    进击的Python[第十四章]:Web前端基础之HTML与CSS样式 一.web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客 ...

  6. 大前端学习笔记整理【一】CSS盒模型与基于盒模型的6种元素居中方案

    概览 CSS盒模型,规定了元素框来处理元素的 内容.内边距.边框和外边距的方式 元素部分是指内容部分,也是最实际的内容,包围内容的称之为内边距,内边距外围是边框,边框外围就是外边距:且外边距是透明的, ...

  7. 好程序员web前端分享18个用CSS制作出来的东西

    好程序员web前端分享18个用CSS制作出来的东西,与流行的看法相反,CSS不仅仅是用来提供一个WEB页面的基本风格,以使它看起来更有吸引力.还有很多其他的事情,CSS也可以做的很好.由于它创建动画和 ...

  8. 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM

    好程序员web前端分享值得参考的css理论:OOCSS.SMACSS与BEM 最近在The Sass Way里看到了Modular CSS typography一文,发现文章在开头部分就提到了OOCS ...

  9. 从零开始学习前端开发 — 3、CSS盒模型

    ★  css盒模型是css的基石,每个html标签都可以看作是一个盒模型. css盒模型是由内容(content),补白或填充(padding),边框(border),外边距(margin)四部分组成 ...

  10. 前端之CSS盒模型介绍

    css盒模型 css盒模型是css的基石,盒模型由content(主体内容),padding(补白,填充),border(边框),margin(外间距); 1.content: width:数值+单位 ...

随机推荐

  1. Java常用框架面试题

    SpringSpring如何解决循环依赖循环依赖的产生可能有很多种情况,例如: A的构造方法中依赖了B的实例对象,同时B的构造方法中依赖了A的实例对象A的构造方法中依赖了B的实例对象,同时B的某个fi ...

  2. SSL和HTTPS

    转载: 链接 随着互联网的发展,给我们的生活带来便利的同时,也伴随着很多网络钓鱼.信息泄露.网络诈骗等事件的频繁发生,企业网站被钓鱼网站仿冒,遭受经济损失,影响品牌形象. 如果网站不使用SSL证书,数 ...

  3. LinkedList的源码

    LinkedList LinkedList是通过双向链表去实现的,他的数据结构具有双向链表的优缺点,既然是双向链表,那么的它的顺序访问效率会非常高,而随机访问的效率会比较低,它包含一个非常重要的私有内 ...

  4. 牛客周赛 Round 77

    题目链接:牛客周赛 Round 77 A. 时间表 tag:签到 B. 数独数组 tag:签到 Description:给定n个数,每个数的范围为1-9,问能否经过排列,使其每个长度为9的连续子数组都 ...

  5. Windows 快速启动器

    在日常工作和学习中,我们经常需要快速访问某些功能或资源,例如打开常用网站.启动应用程序或执行特定命令.Linux 用户可以通过 alias 快速实现这些操作,但在 Windows 上缺乏类似的原生支持 ...

  6. 使用CMD命令导出和导入IIS站点配置信息

    1.导出导入某个站点 1.1.导出应用程序池和站点 1.1.1.导出某个应用程序池配置 具体导出命令如下所示: %windir%\system32\inetsrv\appcmd list apppoo ...

  7. Scrapy 入门基础

    原文学习参考链接:https://blog.csdn.net/u011054333/article/details/70165401 问题解决参考链接:https://blog.csdn.net/du ...

  8. Google 助手安装

    转自:https://www.jianshu.com/p/6086ec29c173 今天这篇推送可能是很多人都需要的,因为它能帮助你无阻碍的访问Google.Google scholar.Gmail. ...

  9. Typescript通用帮助类,格式化日期时间等

    /** * 格式化日期选项 */ export class DateFormatOption { "M+": number;//月 "d+": number;/ ...

  10. Markdown 语法深度详解与实战演示

    一.引言 在当今数字化的时代,高效地处理和呈现文本信息变得至关重要.Markdown 作为一种轻量级标记语言,因其简洁.易读.易写的特点,受到了广大开发者.写作者和内容创作者的喜爱.无论您是撰写博客. ...