私はこの問題に遭遇したことはありませんが、一言で言えば、すべての要素にボックスサイズとしてボーダーボックスを適用します。
*, *:before, *:after {
-webkit-box-sizing: border-box !important;
-moz-box-sizing: border-box !important;
-ms-box-sizing: border-box !important;
box-sizing: border-box !important;
}
私はレスポンシブな列レイアウトを持っています。この場合、行ごとに3列です。
<div class="row clearfix">
<div class="column span-4-12 property">
<p>..</p>
</div>
<!-- more divs here -->
</div>
.property divにマージンを追加するまで、すべてが3つの列にうまく広がります。通常、ボーダーボックスが原因で、列間にマージンが追加され、3行のままになりますが、何らかの理由で3番目の列が新しい列にプッシュされます。行、私は正直に理由を理解していません、私は何かが欠けていますか?
これがjsFiddleのライブ例です: http://jsfiddle.net/NmrZZ/
マージンはボックスモデル(使用するボックスサイズに関係なく)の一部ではないため、宣言した幅+パディング+境界線に常に追加されます。
以下の画像(このトピックに関する CSSトリック の記事から)は、標準のボックスモデルとbox-sizing: border-box
の違いを示しています。
私ができる最善のアドバイスは、グリッドの余白を完全に避け、プレゼンテーションから分離しておくことです。これはより多くのマークアップを意味しますが、頭痛の種を減らし、物事を維持するのをはるかに簡単にします。あなたの例の このフォーク をチェックしてください。修正されたCSS:
.span-4-12 {
width: 33.33%;
padding-left: 2%;
}
.property {
background: white;
}
そして、新しいマークアップは次のようになります。
<div class="column span-4-12">
<div class="property">
<p>Some text 1</p>
</div>
</div>
それはフロートクリアの問題です。 floatは古くなっているため、floatの代わりにinline-blockを使用できます。別の行にclear
を書く必要がないため、ほとんどの人は現在display:inline-block
を使用しています。
参照:
*, *:before, *:after {
margin: 0;
padding: 0;
-webkit-box-sizing: border-box !important;
-moz-box-sizing: border-box !important;
-ms-box-sizing: border-box !important;
box-sizing: border-box !important;
}
body {
background: grey;
}
}
.row {
clear: both;
}
.clearfix:before,
.clearfix:after {
content:"";
display:table;
}
.clearfix:after {
clear:both;
}
.clear {
zoom:1;
}
.column {
display: inline-block;
}
.span-4-12 {
width: 30%;
}
.property {
background: white;
margin-left: 2%;
}
<div class="row clearfix">
<div class="column span-4-12 property">
<p>Some text 1</p>
</div>
<div class="column span-4-12 property">
<p>Some text 2</p>
</div>
<div class="column span-4-12 property">
<p>Some text 3</p>
</div>
</div>