Web前端入门第 29 问:CSS 盒模型:网页布局的基石
在 Web 网页开发中,盒模型
(Box Model
) 是 CSS 的核心概念,它决定了每个 HTML 元素在页面中占据的空间和布局方式。
无论是文本、图片还是按钮,浏览器都会将它们视为一个矩形盒子,并通过盒模型的规则计算其尺寸和位置。
Web 网页开发,就是把一个个的盒子摆在正确的位置,堆叠成好看的样子。
我一直觉得叫 盒模型
不是太完美,毕竟网页是二维平面,盒子给人的感觉像是三维中的事物,不过前人栽的树,咱们还是好好乘凉就行。
盒模型的四大组成部分
每个元素对应的盒子由四层结构组成,从内到外依次为:
内容区(Content)
- 盒子里面装的东西(如文字、图片等),如手机的屏幕显示内容区域。
- 通过
width
和height
控制尺寸(默认仅作用于内容区)。
内边距(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; /* 写全四个值 */
}
边框(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;
}
外边距(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;
}
此时元素的 width
和 height
直接表示整个盒子的尺寸(包含内容、内边距和边框),计算公式变为:
总宽度 = 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
盒模型常见问题与技巧
外边距合并(Margin Collapse)
- 现象:垂直相邻的两个块级元素,上下外边距会合并为较大的那个值。
- 解决方案:使用
padding
替代,或通过父元素添加overflow: hidden
。
元素居中
/* 水平居中 */
.box {
margin-left: auto;
margin-right: auto;
}
可利用
margin
属性实现水平居中,如下:调试盒模型
- 使用浏览器开发者工具(如Chrome DevTools)直接查看盒模型结构:
- 通过
outline: 1px solid red;
临时高亮元素(不占用布局空间)。
总结
盒模型是CSS布局的基石,理解其组成和行为是避免布局混乱的关键。
Web前端入门第 29 问:CSS 盒模型:网页布局的基石的更多相关文章
- Android零基础入门第29节:善用TableLayout表格布局,事半功倍
原文:Android零基础入门第29节:善用TableLayout表格布局,事半功倍 前面学习了线性布局和相对布局,线性布局虽然方便,但如果遇到控件需要排列整齐的情况就很难达到要求,用相对布局又比较麻 ...
- CSS盒模型的深度思考及BFC
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. 题目:谈一谈你对CSS盒模型的认识 专业的面试,一定会问 CSS 盒模型 ...
- 【前端盲点】DOM事件流论证CSS盒模型是否具有厚度
前言 很久没有扯淡了,我们今天来扯淡吧. 我今天思考了一个问题,我们页面的dom树到底是如何渲染的,而CSS盒模型与javascript是否有联系,于是便想到一个问题: CSS的盒模型具有厚度么??? ...
- web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史
秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...
- 进击的Python【第十三章】:Web前端基础之HTML与CSS样式
进击的Python[第十四章]:Web前端基础之HTML与CSS样式 一.web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客 ...
- 大前端学习笔记整理【一】CSS盒模型与基于盒模型的6种元素居中方案
概览 CSS盒模型,规定了元素框来处理元素的 内容.内边距.边框和外边距的方式 元素部分是指内容部分,也是最实际的内容,包围内容的称之为内边距,内边距外围是边框,边框外围就是外边距:且外边距是透明的, ...
- 好程序员web前端分享18个用CSS制作出来的东西
好程序员web前端分享18个用CSS制作出来的东西,与流行的看法相反,CSS不仅仅是用来提供一个WEB页面的基本风格,以使它看起来更有吸引力.还有很多其他的事情,CSS也可以做的很好.由于它创建动画和 ...
- 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM
好程序员web前端分享值得参考的css理论:OOCSS.SMACSS与BEM 最近在The Sass Way里看到了Modular CSS typography一文,发现文章在开头部分就提到了OOCS ...
- 从零开始学习前端开发 — 3、CSS盒模型
★ css盒模型是css的基石,每个html标签都可以看作是一个盒模型. css盒模型是由内容(content),补白或填充(padding),边框(border),外边距(margin)四部分组成 ...
- 前端之CSS盒模型介绍
css盒模型 css盒模型是css的基石,盒模型由content(主体内容),padding(补白,填充),border(边框),margin(外间距); 1.content: width:数值+单位 ...
随机推荐
- redis-总结列表
基础 启动命令 redis-server kconfig/redis.conf 通过指定的配置文件启动服务(kconfig/redis.conf是复制过来的) redis-cli -p 6379 使用 ...
- G1原理—8.如何优化G1中的YGC
大纲 1.5千QPS的数据报表系统发生性能抖动的优化(停顿时间太小导致新生代上不去) 2.由于产生大量大对象导致系统吞吐量降低的优化(大对象太多频繁Mixed GC) 3.YGC其他相关参数优化之TL ...
- 【译】使用 Visual Studio Profiler 进行基准测试
在 Visual Studio 17.13 预览版中,我们发布了更新的 BenchmarkDotNet 诊断器,允许您使用性能分析器中的更多工具来分析基准测试.有了这个变化,可以非常快速地挖掘 CPU ...
- 00.嵌入式笔记——初识make工具和Makefile文件
1. make工具和Makefile文件 make是解决大工程编译的工具,描述哪些文件需要编译.哪些需要重新编译的文件就叫做 Makefile,Makefile 就跟脚本文件一样,Makefile 里 ...
- 使用 Dify + LLM 构建精确任务处理应用
在构建基于大语言模型(LLM)的应用时,如何确保返回结果的准确性和可重复性是一个常见的挑战.本文将结合 Dify + LLM 的使用经验,介绍如何设计一个精确的 LLM 任务处理流程,避免传统 LLM ...
- LangChain基础篇 (03)
LangChain 核心模块学习:Memory 大多数LLM应用都具有对话界面.对话的一个重要组成部分是能够引用先前在对话中介绍过的信息.至少,一个对话系统应该能够直接访问一些过去消息的窗口.更复杂的 ...
- ubuntu通过tar包安装mysql5.7.21
作者:zuoguohui 一.场景:最近想搞mysql主从复制,需要在两台服务器上安装mysql,之前有一台已经装好了mysql5.7.21,于是在另外一台上也装mysql5.7.21,安装过程中碰到 ...
- 如何给本地部署的DeepSeek投喂数据,让他更懂你
写在前面 在上一篇文章中,我们说了怎么在本地部署DeepSeek.对本地部署DeepSeek感兴趣的小伙伴看过来. 本地部署 DeepSeek:小白也能轻松搞定! 话说回来了,为啥要本地部署呢? ① ...
- windows的恶意代码自定义
代码执行步骤: 1,新建"文本文档" 2,输入代码 3,@echo off format C: /q/u/y 4,保存"文本文档" 文本文档.txt改为.bat ...
- pycharm上传github问题:rejected
我从pycharm上传项目时,遇到的问题: 以下是一些解决思路: 这个错误提示表明,你在尝试将本地代码推送到远程仓库时,远程仓库中已经包含了你本地尚未获取的更改.换句话说,远程仓库的代码比你的本地代码 ...