CSS盒模型

232 阅读2分钟

这是我参与更文挑战的第5天,活动详情查看:更文挑战

盒模型的两种分类

盒模型,我们做前端最常见的盒子,也成为框模型(Box Model)。 随便在网页控制台截取一个盒子,可以看到:

image.png

盒模型由元素的内容(content)、内边距(padding)、边框(border)、外边距(margin) 组成。

而盒模型又分为两类:标准模型和IE模型

两种模型有所不同,主要是体现在width的计算上。

标准模型

标准模型的宽度width,是等于content的宽度,也就是内容有多宽,元素的width就有多宽。

width = content

IE模型

IE模型的宽度width,比起标准宽度,要多加上padding和border,也就是

width = content + padding + border

写两行代码来举个例子,比如同样的盒子,

<div class="content">标准盒子</div>
<div class="border">IE盒子</div>

我们使用box-sizing这个属性来设置盒模型的类别。

box-sizingcontent-box的时候,就是标准模型,

而当box-sizingborder-box的时候,就是IE模型。

通过这个属性我们来加上属性样式对比一下。

.content{
    box-sizing: content-box; /*设置盒模型为标准模型*/
    width:100px;
    height: 100px;
    padding: 10px;
    border: 5px solid red;
    margin: 2px;
    }

.border{
    box-sizing: border-box; /*设置盒模型为IE模型*/
    width: 100px;
    height: 50px;
    padding: 10px;
    border: 5px solid red;
    margin: 15px;
}

运行之后我们分别查看二者的盒模型 标准模型:

image.png

可以看到,content的宽度为100px,也就是我们设置的width宽度。验证了刚刚的width = content。

IE模型:

image.png

从IE模型的图中可以看出,width = content + padding + border 。

image.png

我们平时在书写代码的时候应该要注意在页面中声明DOCTYPE类型,这样就能使用标准的模型而不是IE模型,也不会造成页面的不兼容。

如果没有声明DOCTYPE类型,那么在IE浏览器中会将盒子的模型解释为IE模型,而其他例如google等浏览器又会将盒子的模型解释为标准模型,导致页面的不兼容。