# CSS 盒子模型

所有 HTML 元素可以看作盒子,在 CSS 中,"box model"这一术语是用来设计和布局时使用。

CSS 盒模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边距,边框,填充,和实际内容。

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

下面的图片说明了盒子模型(Box Model):

不同部分的说明:

  • Margin(外边距) - 清除边框外的区域,外边距是透明的。
  • Border(边框) - 围绕在内边距和内容外的边框。
  • Padding(内边距) - 清除内容周围的区域,内边距是透明的。
  • Content(内容) - 盒子的内容,显示文本和图像。

# W3C 的标准盒模型

在标准的盒子模型中,width 指 content 部分的宽度

# IE 的盒模型

在 IE 盒子模型中,width 表示 content+padding+border 这三个部分的宽度

我们可以看出我们上面的使用的默认正是W3C标准盒模型 而这里盒模型的选取更倾向于项目和开发者的习惯,并没有绝对的好坏之分。

# box-sizing

box-sizing: content-box|border-box|inherit;

  • box-sizing: content-box 是 W3C 盒子模型
  • box-sizing: border-box 是 IE 盒子模型
值 描述
content-box 这是由 CSS2.1 规定的宽度高度行为。宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框。
border-box 为元素设定的宽度和高度决定了元素的边框盒。就是说,为元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。
inherit 规定应从父元素继承 box-sizing 属性的值