国际盒子大小意识日

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 价值 200 美元的免费积分!

今天是 2 月 1 日,我决定将这一天宣布为 **国际盒子大小意识日**。 为了纪念,你猜对了,最谦虚、最默默无闻,但最棒、最有用的 CSS 属性:box-sizing

这个日期对应于 Paul Irish 的帖子,他在帖子中介绍了在页面上的每个元素上使用它的概念。 我们也曾 在 CSS-Tricks 上 多次讨论过它。

这是它在所有荣耀中的样子

*, *:before, *:after {
  -webkit-box-sizing: border-box; 
  -moz-box-sizing: border-box; 
  box-sizing: border-box;
}
你也可以考虑 使用此技术让盒子大小属性级联box-sizing 属性通常不会级联,而您将强制它级联,但这使得在组件级别覆盖它变得容易得多。

box-sizing 的默认值为 content-box,这是我们在这里要覆盖的。 还有一个 padding-box 值,但...如果你问我,它有点没用。 我们很快就会知道这意味着什么。

请注意,我们使用 * 选择器来选择所有元素,并使伪元素使用相同的模型,否则它们将不会被 * 选择器单独选择。

这是浏览器支持情况。“-” =“此版本及以下”。“+” =“此版本及以上”。

*, *:before, *:after {
  /* Chrome 9-, Safari 5-, iOS 4.2-, Android 3-, Blackberry 7- */
  -webkit-box-sizing: border-box; 

  /* Firefox (desktop or Android) 28- */
  -moz-box-sizing: border-box;

  /* Firefox 29+, IE 8+, Chrome 10+, Safari 5.1+, Opera 9.5+, iOS 5+, Opera Mini Anything, Blackberry 10+, Android 4+ */
  box-sizing: border-box;
}

在不久的将来,我们根本不需要任何前缀,但我喜欢把这种事情留给 Autoprefixer

为什么如此激动?!

它使处理盒子变得超级超级容易。

当你设置元素的宽度时,那就是它的宽度。 如果你将宽度设置为 25%,它将占据其父元素可用水平空间的 1/4。 就这样。

情况并不总是这样。 使用默认的盒子大小,只要元素应用了填充或边框,实际呈现的宽度就会比你设置的宽度更宽。

实际宽度 = 宽度 + 左边框 + 右边框 + 左填充 + 右填充

数学已经足够糟糕了,但当与百分比(或任何混合单位)结合时,结果无法在脑中计算出来,更重要的是,最终会变成一个你无法处理的无用数字。

你可以这样想:使用 box-sizing: border-box,填充和边框 * 向内压 *,而不是扩展盒子。 结果是一个与你设置的宽度完全相同的盒子,你可以依靠它。

列是一个 特别有用的案例,但这在所有时候都非常有用,并成为那些 让 CSS 开发变得更好 的事情之一。


记得阅读 Paul 的原始帖子,它涵盖了更多内容,比如性能(不用担心)、jQuery(不用担心)和第三方内容(很容易修复)。

祝 **国际盒子大小意识日** 快乐! 也许明年我们可以组织起来,都戴上 时髦的方形太阳镜 等等。