大まかに言えば、4 列のレイアウトを構築しようとすると、次の HTML が得られます。
<div>
<div>A column</div>
<div>A column</div>
<div>A column</div>
<div>A column</div>
</div>
そして、私はこのCSSを持っています:
div {
background: #ccc;
}
div div {
background: #eee;
display: inline-block;
width: 25%;
}
->これをいじってください<-
ブラウザーでレンダリングすると (現在、Chrome のみでテストしています)、ネストされた div 要素間の空白 (この例では、空白は改行が原因です) がレンダリングされ、レイアウトが破棄されます。
明らかに、ネストされた div をフロートできます...
div {
background: #ccc;
}
div div {
background: #eee;
width: 25%;
float: left;
}
->それをいじってください<-
しかし、コンテナ div が折りたたまれてしまい、それを開くために CSS の clearfix ハックや追加の HTML を使用する必要はありません。
または、空白が削除されるように HTML を変更することもできます...
<div><div>A column</div><div>A column</div><div>A column</div><div>A column</div></div>
しかし、それでは作業が難しくなります。タグを壊して読みやすくするという代替案は、どういうわけか私を汚く感じさせます...
<div>
<div>A column</
div><div>A column</
div><div>A column</
div><div>A column</div>
</div>
リソースを1つまたは2つ見つけました(SOで何も見つかりませんでした)が、どのソリューションもあまり好きではありません.
だから私の質問...クロスブラウザ、w3c準拠、非javascript、ハックフリー、整頓されたHTML、使用中にブラウザでHTML空白がレンダリングされるのを防ぐ防爆方法はありdisplay:inline-block
ますか? または、不快な副作用がなく、使用できるインラインブロックの代替手段はありますか?
編集
これが本当に不可能であると仮定すると、最良の解決策は、追加の HTML マークアップと「柔軟な」CSS を必要としないものになります。言い換えれば、ウェブマスターは、レイアウトを壊すことを考慮せずに通常どおり HTML を編集でき、CSS (ハッキングまたはその他の方法で) は、それ自体を修正する必要なく、ウェブマスターの修正に対応します。
私の「回避策」
さて、何かを与えなければならないようです。私の状況では、追加のマークアップを必要としない HTML を使用することがより重要であるため、最善の解決策は、目に見えないように「機能する」CSS ハックで作業することです。解決策は、ネストされた div をフロートし、ハックを追加することです...
div div {
float: left;
}
div::before,
div::after {
content: "";
display: table;
}
div::after {
clear: both;
}
div {
*zoom: 1;
}
...これは、私がしばらく使用してきた修正の派生物であり、回避したいと考えていました。この簡潔なバージョンの修正は、このサイトで見つかりました。
これで、マークアップ内のすべての div に、必要かどうかにかかわらず、clearfix ハックが適用されました。これがすべてのdivに適用されることによる悪い副作用があるかどうかはまだわかりません-問題が表面化したときにデバッグして修正することを楽しみにしています;-)