この例のLHS flexの子には1emのパディングがあり、RHSが親をオーバーフローさせます。
<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>
ここにフィドルがあります:
Flexの子供にパディングがある場合、どのようにオーバーフローを排除できますか? box-sizing: border-box
は機能しません。
flexbox
とbox-sizing: border-box;
でも同様の問題がありました。後者はIEで動作しないようです。この場合、パディングによって幅が変更されるため、幅は機能しません。ただし、max-width
を使用できる場合は、問題が解決されます。
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
_私はこれを追加することでこれを解決することができました:
-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-negative: 0
の値であると思われます。これが1に設定されている場合、機能しているようです。
RHSと同じですが、RHSの背景はボックス内に残りますが、その内容は変わりません。 LHSにmax-width: 100%
を追加するとそれが修正されますが、RHSでは修正されませんが、Word-break: break-all
を追加すると、コンテンツが壊れてRHSボックス内に残ります。
これは、あなたの望むことですか?
IE10にはアクセスできませんが、IE11ではflex-basisを明示的にautoに設定する必要がありました。
flex: 0 1 auto;