【问题标题】:Using box-sizing : border-box with Twitter Bootstrap 2.x, can we do it easily without breaking everything?使用 box-sizing : border-box 和 Twitter Bootstrap 2.x,我们可以在不破坏所有内容的情况下轻松完成吗?
【发布时间】:2013-03-02 14:22:57
【问题描述】:

我在上一个项目中一直使用“边框框模型”。这有很多优点,我不会在这里解释。但你可以在这里阅读:Border-box in css-tricks

现在我开始了一个更大的项目,我们认为 twitter 引导程序将是满足我们需求的一个很好的解决方案。我想知道是否可以在不破坏所有内容的情况下使其“边框化”。有没有人试过这个,后果是什么/会是什么?调整太多?真正的进步?

谢谢

【问题讨论】:

  • 谢谢我知道这个,但他们并没有真正回答我的问题,更像是 *bootstrap*{ box-sizing:border-box } (这里是伪代码)
  • bootstrap 在文本字段方面似乎不能很好地与边框框配合使用。他们看起来......被压扁而且很糟糕。
  • 注意; Twitter-Bootstrap 3 现在使用通用选择器 (*) 对所有元素断言 box-sizing:border-box
  • 你说得对,我已经为未来的读者更新了问题的标题。

标签: twitter-bootstrap css


【解决方案1】:

是的。

这是一个可以在 Bootstrap 中使用的 mixin。它将自动添加所有供应商前缀。

*, *:before, *:after {
    .box-sizing(border-box);
}

input {
    .box-sizing(content-box);
}

输入仍然需要内容框,否则它们会太小。

【讨论】:

  • 唯一的问题是输入元素在这之后看起来“被挤压”了,所以我还要添加类似的东西: input { .box-sizing( content-box ); }
  • 我认为您仍然应该添加 -moz-box-sizing 。在 Mac OS 的最后一个 firefox 版本 (21) 中,没有它就无法工作。
  • @Amida 看到盒子大小之前的点了吗?这就是在 LESS 中调用 mixin,其中包含带有所有必要供应商前缀的规则。它内置在 Bootstrap 中。
  • 啊,好吧,我知道 mixins,但我没有仔细阅读,发现它是一个。谢谢:)
  • 另外,您可能希望在 content-box 的输入异常中添加类 .add-on,因为它的填充是针对 content-box 计算的。
【解决方案2】:

它极大地简化了流体/响应式设计的工作:有些复杂的布局和情况需要一致的间距,如果不使用border-box,这几乎是不可能的。

我最近用过这个(FTW!):

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

在一个比较大的网站上,发现确实解决了很多问题。如果您需要对 IE7 的支持,我的方法是为该浏览器提供网站的固定宽度版本,并仅在需要时使用 this polyfill。*

我真的没有发现任何缺点 - 能够指定两个 50% 宽度的列,添加 padding 并知道它会起作用,这让我松了一口气。在您可能依赖标准 box-model 的地方,您始终可以针对特定元素恢复使用它。

引导程序特定

关于具体使用 Bootstrap,您可能会遇到一些问题 - 我建议您对其进行测试。有趣的是,将上述 CSS 添加到 Bootstrap homepage 中没有任何问题。

Bootstrap 2.x 中内置的主网格系统使用floatmargin,因此更改box-model 不会对此产生影响(它只会让您能够将padding 直接添加到列中)。

Bootstrap 3 正在转向移动优先的方法(并完全放弃对 IE7 的支持)。其中包括:

[A] 新的单一网格系统(仍然使用 .row)使用百分比宽度、填充和 box-sizing: border-box,而不是像素宽度和边距。

因此,他们显然相信采用这种方法的好处。

* 我的想法是我已经依赖 Modernizr 中的 HTML shim,因此浏览器的布局已经依赖 JS。使用 SASS 将宽度存储为变量,这非常顺利。也就是说,如果任何特定项目对旧 IE 的使用率较高,那么这种方法就不太合适了。

【讨论】:

  • 这很有趣,我也将它添加到引导页面以查看但没有真正发生,因此我需要更详细的反馈。不错的帖子,但我会等着看是否有人可以评论真实案例。 :)
  • 我几乎肯定会被证明是错误的,但我怀疑是否有人完全按照您的要求做了 - 我不确定您为什么会这样做?如果您使用 Bootstrap 进行布局等,那么此时更改 box-model 会给您带来什么好处?也就是说,这种方法的好处在于简化布局/规范化表单元素等,但这一切都已为您完成。
  • 我受够了每次我需要在列中填充时都必须使用内部 div,或者必须进行一些计算,例如删除边距像素以添加边框或填充而不破坏网格。我觉得边界框模型是要走的路,但 bootstrap 3 还没有。
  • 正如我在编辑中所做的那样,Boostrap 2.x 的网格结构不会受到更改的影响 - 因此我非常怀疑它会引入除最小问题之外的任何东西。跨度>
  • 我后来看到了你的编辑。只是想说感谢您花时间调查:)
猜你喜欢
  • 2012-10-21
  • 1970-01-01
  • 2013-10-07
  • 2020-07-28
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
相关资源
最近更新 更多