CSS必学:你需要知道的盒子模型的秘密

作者:WangMin
格言:努力做好自己喜欢的每一件事
CSDN原创文章
博客地址 👉 WangMin

作为前端开发来说,要掌握的CSS基础一定很多,那么CSS中盒子模型肯定是必考必问必掌握的前端知识点,因为它是CSS基础中非常重要的内容,接下来我们就一起来了解一下盒子模型吧!

在这里插入图片描述

什么是盒子模型?

CSS 所有的HTML 标签元素在网页中都生成了一个描述该元素在HTML文档布局中所占空间的矩形框,我们可以形象地将它看作是一个盒子,它会把各种html元素按照设计需求包裹起来,将html元素进行封装,就组成了各式各样好看的网页。

简单一点来说,页面中的每一个标签,都可以看作是一个盒子,通过盒子的视角我们可以更直观地进行网页排版布局.

盒子模型的组成以及大小的计算

盒子模型的四个组成属性:内容区域(content)、填充区域(padding)、边框(border)以及 外边距区域(margin)

下面来分别了解一下这四个属性!

内容区(content)

内容区域(content)是盒子模型的中心,它呈现了盒子的主要信息内容,这些内容可以你想要展示的任何东西,例如文本、图片等等多种类型。

这时候你会有一个疑问"内容区的大小如何确定呢?" 那么这里就可以提到width属性和height属性,这两个属性大家应该不陌生吧!

**内容区域(content)**就是由这两个属性组成的,使用width属性和height属性可以指定盒子内容区域的高度和宽度,如图所示

案例1:

只给元素设置width属性和height属性,我们来看看盒子模型的大小是多少?

<div id="box"></div>
<style>#box{width: 300px;height: 300px;background:#f00;}
</style>

结果如图所示:

在这里插入图片描述

在这里插入图片描述

从上图中我们可以明显地看出盒子模型的大小为200 * 200,正是元素的高度与宽度。

由此可以的出一个结论:当一个元素只有width属性和height属性时,那么这个元素的内容区域的大小就是盒子模型的大小,

即盒子模型的大小=内容区域的大小.

边框(border)

边框是围绕在内容区和填充四周的边界

相信大家对border属性应该十分熟悉吧!border属性其实是 border-style、border-width和border-color 这三个属性的简写方式,

它们分别对应的含义与属性值如下表:

属性含义属性值
border-style指定边框样式,是边框最重要的属性。如果没有指定边框样式,其他的边框属性都会被忽略,边框将不会显示dotted(点线)、dashed(虚线)、solid(实线)等等
border-width指定边框的宽度任意数值,通常单位为px
border-color指定边框的颜色css中任何一种颜色表示方法都可以

案例2:

在案例1的基础上,再给元素设置boder属性,我们来看看盒子模型的大小是多少呢?

<div id="box"></div>
<style>#box{width: 300px;height: 300px;border:3px solid #000;background:#f00;}
</style>

结果如图所示:

从上图中可以明显的看出,我设置的边框宽度明明是3px,为什么浏览器显示的是2.4px呢?大家这时候应该都很疑惑

这里我给大家解答一下:这可能是因为你的浏览器缩放比例不是100%,如果浏览器比例是100%而值还是对的话,那么可能是电脑的缩放比例不是100%,通常电脑比例都是125%,可以让用户视觉上由更好的体验。如果你想要浏览器显示出正确的数值,你可以将电脑的缩放比例改为100%。

那么此时从图中我们也可以看出盒子模型的大小为204.8 * 204.8

盒子模型的宽度=200(宽度)+ 2.4(左边框)+2.4(右边框)= 204.8

盒子模型的高度=200(高度)+ 2.4(上边框)+2.4(下边框)= 204.8

由此可以的出一个结论:当一个元素设置width属性、height属性以及border属性时,

那么这个元素的盒子模型的宽度 = width + 左边框 + 右边框,

元素的盒子模型的高度 = height + 上边框 + 下边框

元素的盒子模型的大小 = 元素的盒子模型的宽度 * 元素的盒子模型的高度

填充区域(padding)

填充区域是内容区域和边框之间的空间,填充区域也可以叫做内边距。

padding属性是padding -top(上内边距)、padding -bottom(下内边距)、padding -left(左内边距)、padding-right(右内边距)这四个属性的简写方式,常见的取值方式如下表:

取值个数例子含义
1padding:10px上右下左四个方向的内边距都设置为10px
2padding:10px 30px上下方向的内边距设置为10px、左右方向的内边距设置为30px
3padding:10px 30px 40px上内边距设置为10px、左右方向的内边距设置为30px、下内边距设置为40px
4padding:10px 30px 40px 50px上内边距设置为10px、右内边距设置为30px、下内边距设置为40px、左内边距设置为50px

案例3:

在案例1和案例2的基础上,再给元素的上下内边距设置为10px,左右内边距设置为20px,我们来看看盒子模型的大小是多少呢?

<div id="box"></div>
<style>#box{width: 300px;height: 300px;border:3px solid #000;padding:10px 20px;background:#f00;}
</style>

结果如图所示:

那么此时从图中我们也可以看出盒子模型的大小为244.8 * 224.8

盒子模型的宽度=200(宽度)+ 20 (左内边距) + 2.4(左边框)+ 20 (右内边距) + 2.4(右边框) = 244.8

盒子模型的高度=200(高度)+ 10 (上内边距) + 2.4(上边框)+ 10 (下内边距) + 2.4(下边框) = 224.8

由此可以的出一个结论:当一个元素设置width属性、height属性、border属性以及padding属性时,

那么这个元素的盒子模型的宽度 = width + 左内边距 + 左边框 + 右内边距 + 右边框,

元素的盒子模型的高度 = height + 上内边距 +上边框 + 下内边距 + 下边框

元素的盒子模型的大小 = 元素的盒子模型的宽度 * 元素的盒子模型的高度

外边距区域(margin)

外边距区域位于盒子的最外面,是添加在边框外周围的空间,盒子与盒子之间的距离。外边距区域(margin)使盒子与盒子之间不会紧凑地挨在一起,是CSS 布局的一个很重要的属性。

margin属性跟padding属性类似,是**margin -top(上外边距)、margin -bottom(下外边距)、margin -left(左外边距)、margin-right(右外边距) **这四个属性的简写方式,常见的取值方式如下表:

取值个数例子含义
1margin:10px上右下左四个方向的外边距都设置为10px
2margin:10px 30px上下方向的外边距设置为10px、左右方向的外边距设置为30px
3margin:10px 30px 40px上外边距设置为10px、左右方向的外边距设置为30px、下外边距设置为40px
4margin:10px 30px 40px 50px上外边距设置为10px、右内外距设置为30px、下外边距设置为40px、左外边距设置为50px

案例4:

在案例1、案例2以及案例3的基础上,再给元素的上下外边距设置为10px,左右外边距设置为30px,我们来看看盒子模型的大小是多少呢?

<div id="box"></div>
<style>#box{width: 300px;height: 300px;border:3px solid #000;padding:10px 20px;margin:10px 30px;background:#f00;}
</style>

结果如图所示:

那么此时从图中我们也可以看出盒子模型的大小为244.8 * 224.8,跟案例3的结果一样没有改变。

由此可以的出一个结论::margin属性不会计算到盒子模型的大小里面去,也就是说它不会影响盒子模型的大小,它影响的是盒子与盒子之间的距离

默认宽度的情况下,盒子模型大小的计算

我们在没有设置宽度的情况下,浏览器显示的宽度就是默认宽度。

举个简单的例子来说明一下

<div id="box">今天天气真好啊!</div>
<style>#box{height: 100px;background:#ccc;}
</style>

结果如图所示:

从上图中可以看到,在没有给元素#box设置宽度的情况下,它的默认宽度是1472px, 会铺满整个父元素,这里#box的父元素是body,而body的宽度是根据你的电脑屏幕大小而定的,所以我这里是#box的默认宽度为1472px。

案例5

当给一个没有宽度的元素设置上下外边距为20px,左右外边距为30px时,也就是margin:20px 30px时,我们来看看盒子模型的大小是多少呢?

<div id="box">今天天气真好啊!</div>
<style>#box{height: 100px;margin:20px 30px;background:#ccc;}
</style>

结果如图所示:

从上图中可以看到元素#box的高度没变依旧是100px,默认宽度变为了是1412px,这是为什么呢?那么就跟设置的margin属性有关了。

我们发现刚好1412px=1470px - 30px - 30px,这是因为当我们在没有给元素设置宽度,并且还设置了margin属性的情况下,它会在默认宽度的基础上减去左右外边距才会的到最终呈现在浏览器上的宽度,设置的上下外边距不会对元素的高度产生影响,只会影响元素的上下位置。

也就是说当元素处于默认宽度,但设置了margin属性的情况下时,元素的盒子模型宽度会受左右外边距的影响,元素的盒子模型宽度不会受上下外边距的影响。

此时元素的盒子模型宽度 = 默认宽度 - 左外边距 - 右外边距

元素的盒子模型高度 = height

案例6

当给一个没有宽度的元素分别设置margin:20px 30px,padding:10px,border:3px solid #000;的情况下,我们来看看盒子模型的大小是多少呢?

<div id="box">今天天气真好啊!</div>
<style>#box{height: 100px;margin:20px 30px;border:3px solid #000;padding:10px;background:#ccc;}
</style>

结果如图所示:

从上图可以看到元素的宽度跟上一个案例的宽度一样没有改变,依旧是1412px,而高度反而变为了124.8px,这是为什么呢?

我明明给元素设置了padding:10px,border:3px solid #000;,按照案例2与案例3盒子模型大小的计算方式,应该会对元素大小有影响,但是这里并没有影响到元素大小,由此可以得到一个结论:**当我们在没有给元素设置宽度,但设置了padding属性与border属性的情况下时,左右内边距与左右边框不会影响到元素的默认宽度。**这里高度发生了变化,是因为这里给元素高度设置了100px,按照案例2与案例3元素盒子模型大小的计算方式,最终元素盒子模型的高度会加上上下内边距与上下边框,就变成了100+10+2.4+10+2.4=124.8px。

那么此时元素的盒子模型的宽度 = 默认宽度 - 左右外边距(内容区域宽度 + 左右内边距 + 左右边框)

元素的盒子模型的高度 = height + 上下边框 +上内边距 +下边框 +下内边距

总结

当一个元素没有设置宽度,也就是默认宽度的情况下,设置的左右外边距会影响到元素的盒子模型的大小,设置的左右内边距和左右边框不会影响到元素的盒子模型的大小。元素的盒子模型的大小会不会受margin属性的影响取决于这个元素有没有设置宽度。

盒子模型的分类

CSS样式中明确将盒子模型分为标准盒子模型与怪异盒子模型。怪异盒子模型也称为IE盒子模型

其主要的属性为box-sizing,当属性值为:content-box时,该元素的盒子模型为标准盒子模型;

当属性值为:border-box时,该元素的盒子模型为怪异盒子模型;

当未设值box-sizing属性时,该元素的盒子模型也为标准盒子模型。

标准盒子模型

上述案例中所提到的都是标准盒子模型,在标准模式下,盒子模型大小的计算方式如下:

元素的盒子模型的宽度 = width + 左内边距 + 左边框 + 右内边距 + 右边框

元素的盒子模型的高度 = height + 上内边距 +上边框 + 下内边距 + 下边框

元素的盒子模型的大小 = 元素的盒子模型的宽度 * 元素的盒子模型的高度

详细案例可以往上翻阅查看

怪异盒子模型 (IE盒子模型)

案例7:

在上述案例的基础上,再给元素设置上box-sizing属性,并且属性值为border-box时,我们来看看盒子模型的大小是多少呢?

<div id="box"></div>
<style>#box{width: 300px;height: 300px;border:3px solid #000;padding:10px 20px;margin:10px 30px;box-sizing: border-box;background:#f00;}
</style>

结果如图所示:

从上述案例中第二张图中我们可以看出盒子模型的大小为200 * 200,不正是我设置的宽度与长度吗?会从上述案例中第一张图中找到答案。图中左右内边距以及左右边框以及内容区域的宽度是包含在设置的宽度内的,也就是说在怪异模式下,盒子模型的宽度=width(左右内边距+左右边框+内容区域的宽度);图中上下内边距以及上下边框以及内容区域的高度是包含在设置的高度内的,也就是说在怪异模式下,盒子模型的高度=height(上下内边距+上下边框+内容区域的高度)

注意:在标准盒子模型和怪异盒子模型 (IE盒子模型)下,margin属性都不会计算到盒子模型的大小里面去。


以上仅是个人见解,若有不足之处欢迎在下方评论指出,那就先分享到这里!! 😄 后续继续更新!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/168599.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

异步编程详解(.NET)

在之前写的一篇关于async和await的前世今生的文章之后&#xff0c;大家似乎在async和await提高网站处理能力方面还有一些疑问&#xff0c;很多网站本身也做了不少的尝试。今天我们再来回答一下这个问题&#xff0c;同时我会做一个async和await在WinForm中的尝试&#xff0c;并且…

Java SOAP 调用 C# 的WebService

Java SOAP 调用 C# 的WebService&#xff0c;C# 的WebService方法的创建可以参考上一篇文章。IntelliJ IDEA Community Edition 2021.2.3的idea64.exe新建项目&#xff0c;导入需要的jar&#xff0c;代码如下&#xff1a; import org.apache.axis.client.Service; import org.…

循环神经网络(Recurrent Neural Network)

1. 为什么需要循环神经网络 RNN 上图是一幅全连接神经网络图&#xff0c;我们可以看到输入层-隐藏层-输出层&#xff0c;他们每一层之间是相互独立地&#xff0c;(框框里面代表同一层)&#xff0c;每一次输入生成一个节点&#xff0c;同一层中每个节点之间又相互独立的话&#…

PKU 概率论+数理统计+建模 期中考复习总结

目录 计算条件概率计算概率&#xff08;放回与不放回&#xff09;生成随机数算法Linear Congruential Method判断是否是full period Uniformity (test of frequency)1.Chi-Square testmethodreminderexample 2.Kolmogorov-Sminov testmethodexample Independence (test of auto…

互联网Java工程师面试题·Spring篇·第一弹

目录 1、一般问题 1.1、不同版本的 Spring Framework 有哪些主要功能&#xff1f; 1.2、什么是 Spring Framework&#xff1f; 1.3、列举 Spring Framework 的优点。 1.4、Spring Framework 有哪些不同的功能&#xff1f; 1.5、Spring Framework 中有多少个模块&#xff…

JSX 模板精简原则

学习目标&#xff1a; 使模板中的逻辑跟简洁 实现&#xff1a; 复杂的多分枝的逻辑收敛为一个函数&#xff0c;通过一个专门的函数来写分支逻辑&#xff0c;模板中只负责调用 实例&#xff1a; // 有一个状态type有1&#xff0c;2&#xff0c;3三种 // 1 展示 h1 // 2 展示 h2…

webpack proxy如何解决跨域?

一、是什么 webpack proxy&#xff0c;即webpack提供的代理服务 基本行为就是接收客户端发送的请求后转发给其他服务器 其目的是为了便于开发者在开发模式下解决跨域问题&#xff08;浏览器安全策略限制&#xff09; 想要实现代理首先需要一个中间服务器&#xff0c;webpac…

C++左值引用与右值引用

0.类型和值类别的区别&#xff1f; 类型&#xff08;type&#xff09;和值类别&#xff08;value category&#xff09; 1.类型指的是数据类型&#xff0c;int&#xff0c;char这样的内置类型&#xff0c;类型主要是用来区别它们的字节大小。除了内置类型还有自定义类型&…

【ESP-BOX-LITE】:照片查看器

目录 项目场景&#xff1a; 项目需求描述&#xff1a; 项目技术&#xff1a; 项目成果&#xff1a; 项目总结&#xff1a; 项目视频&#xff1a; 芳香 项目场景&#xff1a; 使用ESP-BOX-LITE实现照片查看器功能&#xff0c;显示多级目录下的图片或文件夹&#xff0c;自…

二进制部署k8s

常见的K8S安装部署方式 ●Minikube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特性使用。 部署地址&#xff1a;https://kubernetes.io/docs/setup/minikube ●Kubeadm Kubeadm也是一个工具&#xff0c;提供…

vue3中使用vue3-pdf-app和使用浏览器内置的PDF插件浏览器PDF文件

文章目录 先准备一个PDF使用浏览器内置的PDF插件预览PDF在HTML中使用浏览器插件预览PDFVscode使用插件发布服务后直接通过URL地址访问PDF可使用的浏览器 在vue3项目中预览PDF文件vue3项目也是可以通过URL地址访问文件的vue3中使用浏览器内置的PDF插件预览PDF代码如下所示&#…

京东数据分析:2023厨房小电市场遇冷,空气炸锅等明星产品被抛弃

过去几年间&#xff0c;宅经济的爆发带火了酸奶机、煮蛋器、豆浆机、空气炸锅、养生壶等&#xff0c;一众外观小巧、功能丰富、价格相对便宜的厨房小家电。但随着年轻人走出家门回归工作岗位&#xff0c;厨房小家电们却步入了艰难时刻。 如今&#xff0c;厨房小家电们似乎正在经…

blender怎么在一个面上对半切割(不影响别的面)

1进入编辑模式 2.在面选择模式下&#xff0c;选中该物体需要切割成两半的面。 3.按K这个快捷键&#xff08;切记&#xff0c;必须得用快捷键&#xff0c;不用的话没办法调出第一个绿色切割点&#xff09;&#xff0c;将切割点移动到需要切割的起始边&#xff0c;按住Shift键不放…

第六节:Word中对象的层次结构

《VBA之Word应用》&#xff08;10178982&#xff09;&#xff0c;是我推出第八套教程&#xff0c;教程是专门讲解VBA在Word中的应用&#xff0c;围绕“面向对象编程”讲解&#xff0c;首先让大家认识Word中VBA的对象&#xff0c;以及对象的属性、方法&#xff0c;然后通过实例让…

[Linux 基础] make、Makefile自动化构建代码工具

文章目录 1、make与Makefile是什么2、为什么要有make与Makefile3、怎么实现一个Makefile文件3.1 如何编写Makefile文件3.1.1 依赖关系3.1.2 依赖方法 3.2 如何清理项目3.2.1 如何编写3.2.2 clean详解 3.3 make的使用3.4 原理3.4.1 查看文件修改时间 1、make与Makefile是什么 m…

为什么索引要用B+树来实现呢,而不是B树

首先&#xff0c;常规的数据库存储引擎&#xff0c;一般都是采用 B 树或者 B树来实现索引的存储。 B树 因为 B 树是一种多路平衡树&#xff0c;用这种存储结构来存储大量数据&#xff0c;它的整个高度会相比二叉树来说&#xff0c;会矮很多。 而对于数据库来说&#xff0c;所有…

Java日志系统之Logback

目录 Logback Logback的简单使用 Logback配置文件 log4j.peoperties转化为logback.xml Logback Logback的性能要比log4j要好。 Logback分为三个模块&#xff1a; logback-core&#xff1a;其他两个模块的基础模块logback-classic&#xff1a;它是log4j的一个改良版本&am…

小白也会的校园网宽带拨号自动重连设置

开始菜单搜索“任务计划程序”&#xff1a;我这个开始菜单和你们的不太一样&#xff0c;用了StartAllBack设置的&#xff0c;总之能找到这个程序就行了 提示&#xff1a;可以按下“Win R”&#xff0c;打开“运行”&#xff0c;输入taskschd.msc来打开任务计划程序 点击“任务…

最新咸鱼签名JS逆向分析教程

本章教程,主要分享一下咸鱼H5网页端sign签名算法。 案例地址:https://h5.m.goofish.com/item?id=744640763988 程仅供参考,请勿滥用,由此带来的法律责任,需由自己承担。 目录 一、参数分析 二、逆向过程

浅谈 docker run 命令中的 -i -t 和 -d 选项

以 docker Ubuntu 镜像为例&#xff0c;ubuntu镜像启动时默认执行的命令是"/bin/bash"。 文章目录 不带任何选项带 -i 选项带 -i 和 -t 选项-d 选项 不带任何选项 rootubuntu20:~# docker run ubuntu:20.04 rootubuntu20:~# docker ps CONTAINER ID IMAGE …