箱上浆

默认的盒子模型(content-box)可能是违反直觉的,因为一旦你开始向元素添加 paddingborder 样式,元素的 width / height 就不会在屏幕上显示它的实际宽度或高度。

以下示例演示了 content-box 的这个潜在问题:

textarea {
    width: 100%;
    padding: 3px;
    box-sizing: content-box; /* default value */
}

由于填充将被添加到 textarea 的宽度,因此得到的元素是宽度大于 100%的 textarea。

幸运的是,CSS 允许我们使用元素的 box-sizing 属性更改框模型。可用属性有三种不同的值:

  • content-box:常见的盒子模型 - 宽度和高度仅包括内容,而不是填充或边框

  • padding-box:宽度和高度包括内容和填充,但不包括边框

  • border-box:宽度和高度包括内容,填充以及边框

StackOverflow 文档

要解决上面的 textarea 问题,你可以将 box-sizing 属性更改为 padding-boxborder-boxborder-box 是最常用的。

textarea {
    width: 100%;
    padding: 3px;
    box-sizing: border-box;
}

要将特定的盒子模型应用于页面上的每个元素,请使用以下代码段:

html {
    box-sizing: border-box;
}

*, *:before, *:after {
    box-sizing: inherit;
}

在此编码中,box-sizing:border-box; 不直接应用于*,因此你可以轻松地在单个元素上覆盖此属性。