快捷搜索: 王者荣耀 脱发

盒子模型(一)——block box

盒子模型

这就是我们所熟悉的盒子模型,包含了margin(外边距)、border(边框)、padding(内边距)、content(内容)。

    Margin(外边距) - 清除边框区域。Margin没有背景颜色,它是完全透明 Border(边框) - 边框周围的填充和内容。边框是受到盒子的背景颜色影响 Padding(内边距) - 清除内容周围的区域。会受到框中填充的背景颜色影响 Content(内容) - 盒子的内容,显示文本和图像

块级盒子(block box)

对于块级元素,浏览器会采用block box模型来进行渲染。 不过,早期的IE和W3C有不同的解释。

IE盒子模型

早期的IE浏览器(IE6之前)采用IE盒子模型,现在多采用标准模式(W3C模式)

(content)width = content-width + padding-width + border-width
(content)height = content-height + padding-height + border-height

标准盒子模型(W3C盒子模型)

标准模式看起更加容易理解一点。

(content)width = content-width 
(content)height = content-height

注意: 这里的高度和宽度并不是元素的真正宽高。这里的宽高指的是通过CSS设置的内容的宽高。 (吐槽:网上被广泛传播的这个图,我一直以为是错的…)

box-sizing属性

box-sizing属性可以让我们自由选择盒子的模式。

box-sizing:content-box/border-box/inherit content-box——默认值,采用Standard box model border-box——采用IE box model inherit——继承父元素属性值

借助这个属性,我们来看看到底IE盒子和W3C标准盒子到底有什么不同。

IE和W3C盒子的异与同

这里的padding和margin以及border为了书写方便,全部假定为左右值都相等,大家懂这个意思就好了。

W3C盒子

通过设置 box-sizing: content-box;,我们选定了W3C盒子模型。 图-W3C1:

图-W3C2:

通过W3C2我们可以明显的看出,contentWidth=width;即图阴影部分。 那么这个div元素的实际宽度(个人认为这个应该被称为做像素宽度)为:

contentWidth+padding*2+border*2+margin*2
=
100+50*2+0*2+200*2
=600px

IE盒子

IE盒子相比之下就显得很怪异了。 图-IE1:

在IE盒子的模式下,

contentWidth=width+padding*2+border*2

也就说我们设置了contentWidth=100px,但是由于padding*2=100px,所以把width的宽度消除了。 如果我们让padding=0,那么width则会恢复正常。 图-IE2

所以图-IE1中div元素的实际宽度(像素宽度)为:

width+margin*2
=
100+200*2
=500px

这里另外提一点, 如果 border+padding>width, 那么 width=border+padding; contentWidth=0;。 图—IE3


参考资料:

经验分享 程序员 微信小程序 职场和发展