SafariとChrome/Firefoxのレイアウトレンダリングの違いに出くわしましたが、どちらが「正しい」かわかりません。
ここでjsfiddleを確認できます
Firefox / Chromeでは、レイアウトは期待どおりであり、黄色のdivは赤いdivの直後にあります。ただし、Safariでは、黄色のdivは赤いdivの下に配置されます。
私が間違ったことを調査した後、バグはE
、プロパティmargin-right
(値:-11px)がwidth
私のdivのプロパティ(値:10px)よりも大きいCSSクラスに起因することがわかりました。
Safariがこのようにレンダリングする理由を理解していると思います。クラスのdivのB
幅は、プロパティを持つ子の幅の合計として計算されますfloat: left;
。
ここではwidthB = widthB2*2 + widthE + marginRightE + widthC
、marginRightE < -widthE
widthBは、各divを隣り合わせに含めるのに十分な大きさではありません。
だから私の質問は:
- 私はSafariが何をするのかを理解していますか?
- ChromeとFirefoxのレンダリングが異なるのはなぜですか?負の値に基づいて親divの幅を減らしていないだけ
margin-right
ですか? margin-right
この場合、常にdivの幅以下になるように適切に修正しますか?
ありがとうございました!
HTML:
<div class="A">
<div class="C">
<div class="B">
<div class="B2"></div>
<div class="B2"></div>
<div class="E"></div>
<div class="C">
<div class="D"></div>
</div>
</div>
</div>
</div>
CSS:
.A {
background-color: blue;
height: 200px;
}
.B {
height:100px;
}
.B2 {
background-color: red;
height: 100px;
width: 100px;
float: left;
}
.C {
float: left;
}
.D {
height: 40px;
width: 40px;
float:left;
background-color: yellow;
}
.E {
height: 50px;
width: 10px;
position: relative;
left: -10px;
margin-right: -11px;
background-color: black;
float: left;
}