为啥 Bootstrap 3 切换到 box-sizing:border-box?

Posted

技术标签:

【中文标题】为啥 Bootstrap 3 切换到 box-sizing:border-box?【英文标题】:Why did Bootstrap 3 switch to box-sizing: border-box?为什么 Bootstrap 3 切换到 box-sizing:border-box? 【发布时间】:2013-09-22 03:38:49 【问题描述】:

我正在将我的 Bootstrap 主题从 v2.3.2 迁移到 v3.0.0,我注意到的一件事是,由于 bootstrap.css 中的以下样式,许多维度的计算方式不同。

*,
*:before,
*:after 
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;

谁能解释为什么 Bootstrap 将所有元素的 box-sizing 切换为border-box?我怀疑这与基于百分比的新网格系统有关,但上面的选择器显然不仅适用于网格元素。

似乎有点激进恕我直言:-)

有人愿意提供一些见解吗?

【问题讨论】:

感谢 CSS sn-p;这正是我想要将其应用于非引导项目的方法。 :) 有人知道为什么需要 *:before 和 *:after 吗? @limscoder *:before*:after 也需要将此框模型应用于 :before:after 伪元素。 * 选择器使开发人员难以在 CSS 的其他地方使用 content-box 或 padding-box。从头开始新项目的最佳实践是html box-sizing: border-box; *, *:before, *:after box-sizing: inherit; 【参考方案1】:

发行说明告诉你:(http://blog.getbootstrap.com/2013/08/19/bootstrap-3-released/)

默认情况下更好的盒子模型。 Bootstrap 中的所有内容都得到了 box-sizing:border-box,提供了更简单的尺寸选项和增强的网格系统。

我个人认为大多数好处都归于网格系统。在 Twitter 的 Bootstrap 中,所有网格都是流动的。列定义为总宽度的百分比。但是排水沟有一个固定的像素宽度。默认情况下,列两侧的内边距为 15px。以像素为单位的宽度和百分比的组合可能很复杂。使用border-box,这个计算很容易,因为border-box 值(与默认的内容框相反)使最终渲染的框具有声明的宽度,并且框内的任何边框和填充都被切割。 (http://css-tricks.com/box-sizing/)

另请阅读:http://www.paulirish.com/2012/box-sizing-border-box-ftw/

【讨论】:

简单示例:尝试在 100% 宽度的 div 上放置 1 像素边框,使用 content-box。现在你得到了 100% + 2 像素的东西。使用border-box,您就没有这个问题,它仍然是 100%。 在this issue 中进行很好的额外讨论和证明。 另外值得注意的是,盒子尺寸实施最佳实践已更新,以免干扰第 3 方库。我不确定 Bootstrap 是否计划更新,但他们应该:css-tricks.com/… 就我个人而言,自 IE6 以来我从未更改过盒子模型。这是 IE 唯一知道的事情。是的,今天你有 calc() 来解决那些 100% 加 2 像素的问题,但是 samurai 的方式始终是包含边框和填充的边框框。这就是人脑想象一个盒子的方式。我喜欢看到这种“新趋势”,我为他们准备了迎宾饮品。

以上是关于为啥 Bootstrap 3 切换到 box-sizing:border-box?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Bootstrap Navbar 总是折叠? [复制]

为啥bootstrap.css无法引入

如何切换到 lg 视口以在 bootstrap 3 上进行打印预览?

请问Bootstrap中的bootstrap.min.js下载到本地为啥不能用?

从打开的 Bootstrap 3 下拉菜单切换到不同的下拉菜单需要额外点击移动设备

同时使用 Bootstrap 3 和 Bootstrap 4