box-sizing: border-box
私にとってクロスブラウザのレイアウトの問題を解決するCSSプロパティ。
私が現在抱えている唯一の問題は、IE7がそれをサポートしていないように見えることです。 IE7をサポートするためのハックはありますか?
これを行うにはいくつかの方法がありますが、完璧な方法はありません。
あなたが指摘するように:
<!--[if IE 7]>
Special instructions for IE 7 here
<![endif]-->
IE8および9でボックスサイズを使用し、IE7で特定のオーバーライドを行います。このオプションは手間がかかります。
https://github.com/Schepp/box-sizing-polyfill
この優れたPolyfillは、IE6および7の既定のブラウザーの動作を変更するHTCファイルであり、W3Cボックスモデルを使用します。軽度の使用には適していますが、広範囲に使用すると問題が生じる可能性があります。注意してテストして使用してください。
古いスタイルのネストされたdivアプローチは、まだ素晴らしい方法です。
<div style="width:100px; border:1px solid black">
<div style="margin:10px">
Content
</div>
</div>
セマンティックではないネストされたdivは、間接的にパディングを提供しますが、マークアップが乱雑になるという欠点があります。明らかにインラインスタイルを使用しないでください。ここでは、説明のためにインラインスタイルを使用しています。
古い格言固定幅の要素でパディングを使用しないでください。
他の方法は、直接の子セレクターを使用することです。いくつかのコンテンツを含む固定幅のdivがあるとします:
<div class="content">
<h1>Hi</h1>
<p>hello <em>there</em></p>
</div>
次に、divのすべての直接の子に左マージンと右マージンを追加するルールを記述できます。
.content {
width:500px;
padding:20px 0;
}
.content > * {
margin:0 20px;
}
これにより、h1とpにわずかなマージンが追加されますが、ネストされたemには追加されず、コンテンツdivに20pxのパディングが表示されますが、ボックスモデルのバグは発生しません。
IE7は、ボックスサイズプロパティを認識しない最後のブラウザーです。 IE7からのトラフィックが少ない場合は、mightサポートの削除を検討してください。あなたのCSSはもっと良くなります。
2013年後半の時点で、これが私の推奨オプションです。
2017 EDIT:IE7のサポートを現在廃止し、border-boxを使用するのはおそらく過去のことです。
ポリフィルを使用していくつかのアイテムで機能させることができますが、私の入力フィールドでは機能しませんでした。
https://github.com/Schepp/box-sizing-polyfill
box-sizing: border-box;
*behavior: url(/css/boxsizing.htc);
動作URLは、CSSファイルではなくページに関連していることに注意してください。サイトのルートへの相対パスを使用します(URLをスラッシュで開始し、そこから移動します)。