【问题标题】:IE10 flexbox widths include padding, causing overflow. box-sizing: border-box doesn't fixIE10 flexbox 宽度包括填充,导致溢出。 box-sizing:边框框不修复
【发布时间】:2013-10-19 10:24:58
【问题描述】:

本例中的 LHS flex child 有 1em 填充,这会导致 RHS 溢出 parent:

<div style="display: -ms-flexbox; box-sizing: border-box; width: 200px; border: 5px solid black">

    <div style="padding: 1em; -ms-flex-positive: 0; -ms-flex-negative: 0; -ms-flex-preferred-size: 33%; background-color: blue; box-sizing: border-box">
        LHS
    </div>

    <div style="-ms-flex-positive: 0; -ms-flex-negative: 0; -ms-flex-preferred-size: 67%; background-color: red; box-sizing: border-box">
        RHS
    </div>

</div>

这是小提琴:

http://jsfiddle.net/GY4F4/6/

当 flex 子级有填充时,如何消除溢出? box-sizing: border-box 不起作用。

【问题讨论】:

  • 您实际上可以通过在 CSS 中使用“宽度”来解决此问题。但是“高度”不适用于列弯曲。这是原始小提琴的专栏版本:jsfiddle.net/GY4F4/7

标签: css flexbox internet-explorer-11 internet-explorer-10


【解决方案1】:

我无法访问 IE10,但在 IE11 中,我必须将 flex-basis 显式设置为 auto:

flex: 0 1 auto;

【讨论】:

    【解决方案2】:

    我可以通过添加来解决这个问题:

    -ms-flex-preferred-size: calc($basisValue - $paddingValue * 2);
    

    所以这种组合有效,即使使用autoprefixer

    .element {
        padding: 1rem;
        flex: 0 1 20%;
        -ms-flex-preferred-size: calc(20% - 2rem);
    }
    

    calc 值轻易地覆盖了自动生成的前缀,只有 IE 才会注意到。

    【讨论】:

    • -ms-flex-preferred-size:当左右两边有填充时效果很好。谢谢!
    【解决方案3】:

    在 IE 中 flex-basis 不考虑 box-sizing:border-box。这是一个已知的错误,如下所述:https://github.com/philipwalton/flexbugs#7-flex-basis-doesnt-account-for-box-sizingborder-box

    虽然它现在已经在 Edge 中修复了。

    一些修复:

    • 对其容器应用负边距以抵消子填充
    • 使用flex-basis: calc($basisValue - $paddingValue) ←这对我来说效果最好
    • 使用伪元素代替填充,伪元素不计入宽度
    • 使用flex-basis: auto
    • 明确限制宽度:max-width: $value

    【讨论】:

    • 很好的答案,谢谢!就我而言,max-width 工作正常。
    【解决方案4】:

    问题似乎是具有填充的框上-ms-flex-negative: 0 的值,如果将其设置为 1,它似乎可以工作。

    RHS 的背景现在将保留在框内,但其内容不会,尽管与 LHS 相同。将max-width: 100% 添加到 LHS 可以解决此问题,但不会在 RHS 上,但添加 word-break: break-all 会导致内容中断并保留在 RHS 框中。

    Fiddle

    这是你想要的吗?

    【讨论】:

      【解决方案5】:

      flexboxbox-sizing: border-box; 也有类似的问题。后者似乎在 IE 中不起作用。在这种情况下,宽度不起作用,因为填充会改变它 - 但如果你可以使用 max-width,那应该可以解决问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-25
        • 2012-04-08
        • 2016-09-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多