其他分享
首页 > 其他分享> > 果冻公开课第五课:五分钟理清盒模型的前世今生

果冻公开课第五课:五分钟理清盒模型的前世今生

作者:互联网

 

果冻公开课第五课:五分钟理清盒模型的前世今生

在前端程序员眼中,页面其实可以被视为一个个盒子组成的

那么,这些盒子是如何构建起整个页面的呢?

动画视频:

https://v.qq.com/x/page/j0839rssr9f.html

如何理解盒模型?

 

文字解析:

在上一节里面

我们知道了文档流和网页中的DOM都可以看作是盒子

而无论是文档流还是网页状态,要把一些元素比如H1 H2 H3放到另外一个元素中

都需要他们属于这个元素的子节点,这个元素则是H1 H2 H3的父节点

 

这个父节点,它就像是一个打包盒,把它的子级元素打包到一起,然后作为一个整体来进行布局

 

这个打包盒我们通常会用哪个元素呢?

答案是DIV

 

 

虽然从理论上来讲大多数html元素都可以担任打包盒这个职责

在不考虑语义的情况下,通常都会使用DIV

 

不过随着html的发展,大家逐渐觉得只有DIV还不够:

无法区分更多的语义

因此创造出了各种专有的打包盒:

如section article hgroup等等

 

由此我们可以知道DIV是盒子,而其他的元素也都是盒子

如果想要将盒子在一个二维的页面中陈列开

除了它们自身出现的顺序以外,还由5个基本属性来调节它们的位置和大小

 

这5个属性分别是:

宽 高 内边距 边框和外边距

 

 

宽和高 决定了盒子内部空间有多大

盒子装的内容都是放在这个区域当中

 

边框 就是盒子本身

可以修改盒子的厚度 材料以及颜色

 

内边距和外边距好比是给盒子内外添加的透明抗震材料

改变内边距可以改变内容与盒子之间的距离

改变外边距则可以改变盒子之间的距离,通过这些基本属性改变盒子的⼤小会影响到布局

 

盒⼦⼤小的计算模型有两种

标准盒⼦模型IE盒⼦模型

通过改变CSS属性box-sizing的值来改变

 

 

第⼀种标准盒⼦模型

box-sizing为content-box

这种行为模式下,盒⼦子的宽和⾼只决定元素的content内容部分

⽽内边距padding和边框border是在content外部另外绘制

也就是说

width = content

 

第⼆种IE盒⼦模型

box-sizing为border-box

这种⾏为模式下,为盒⼦设定的宽和⾼决定了元素的边框border⼤小,

那么盒⼦的内边距padding和边框border都将在已设定好的宽⾼内绘制

也就是说

width = content + padding + border

 

 

因此如果为两个盒子设置同样的css属性

不同的盒模型将会占据不同的⻚面宽度

 

标准盒⼦模型下的盒⼦会这样计算:

width = content = 300px

然后再额外计算padding和border的值

因此盒⼦实际占据了了500px

 

IE盒⼦模型下的盒子则会这样计算

width = content + padding + border = content + 50px * 2 + 50px * 2 = 300px

不用额外计算padding和border的值

width 设置是多少,盒子就实际占据多少

不过通过减量计算得到盒子的content部分就只剩下100px了

 

 

在实际的开发中

为了在横向方向上尽量不出现滚动条

通常会希望盒⼦实际占据的宽度不超过⻚面宽度

 

标准盒⼦模型的解决⽅案是通过数学计算

设置宽度时需要⽤希望的宽度减去内边距和边框宽度

 

但这样开发起来实在太过复杂

幸好我们有IE盒子模型

内边距和边框不会再增加盒⼦宽度

有的开发者甚⾄会这样设置他们的CSS代码

以保证所有盒⼦的计算都统一而且简单直观

 

 

怎么样是不是很简单?

学会后赶紧上手写点代码练习一下吧。

 

 

标签:盒子,模型,第五课,果冻,content,公开课,内边,边框,border
来源: https://blog.csdn.net/jnshu_it/article/details/87775042