CSS
ボックスモデル
サーチ…
構文
- box-sizing: パラメータ 。
パラメーター
パラメータ | 詳細 |
---|---|
content-box | 要素の幅と高さにはコンテンツ領域のみが含まれます。 |
padding-box | 要素の幅と高さには内容とパディングが含まれます。 |
border-box | 要素の幅と高さには、コンテンツ、パディング、境界線が含まれます。 |
initial | ボックスモデルをデフォルト状態に設定します。 |
inherit | 親要素のボックスモデルを継承します。 |
備考
ボックスモデルとは何ですか?
エッジ
ブラウザは、HTMLドキュメント内の各要素の矩形を作成します。ボックスモデルは、パディング、ボーダー、およびマージンをコンテンツに追加してこの矩形を作成する方法を示します。
CSS2.2作業草案からの図
4つの領域のそれぞれの周囲はエッジと呼ばれます 。各辺はボックスを定義します。
- 一番内側の矩形はコンテンツボックスです。これの幅と高さは、要素のレンダリングされた内容(テキスト、イメージ、およびそれが持つ可能性のある子要素)によって異なります。
- 次に、
padding
プロパティで定義されている、 パディングボックスです。padding
幅が定義されていない場合、パディングエッジはコンテンツエッジに等しくなります。 - 次に、
border
プロパティで定義されているborderボックスがborder
ます。border
幅が定義されていない場合、境界エッジはパディングエッジに等しくなります。 - 最も外側の矩形は
margin
プロパティで定義されているmarginボックスです。margin
幅が定義されていない場合、マージンエッジはボーダーエッジに等しくなります。
例
div {
border: 5px solid red;
margin: 50px;
padding: 20px;
}
このCSSは、すべてのdiv
要素のスタイルを5px
幅の上、右、下、左の境界線に5px
します。 50px
上下左右の余白。 20px
上、右、下、左のパディングがあり20px
。コンテンツを無視すると、生成されるボックスは次のようになります:
Google Chromeの要素スタイルパネルのスクリーンショット
- コンテンツがないため、コンテンツ領域(中央の青いボックス)には高さや幅がありません(0px x 0px)。
- デフォルトでは、パディングボックスはコンテンツボックスと同じサイズですが、
padding
プロパティ(40ピクセル×40ピクセル)で上で定義している4つのエッジの20ピクセル幅に加えて、 - 境界ボックスは、パディングボックスと同じサイズに、
border
プロパティ(50px x 50px)で上で定義した5px幅を加えたものです。 - 最後に、マージンボックスは、ボーダーボックスと同じサイズと、
margin
プロパティで上で定義している50ピクセル幅(合計150ピクセル×150ピクセル)になります。
さて、私たちの要素に同じスタイルの兄弟を与えましょう。ブラウザは、両方の要素のBox Modelを調べて、前の要素のコンテンツとの関係で新しい要素を配置する場所を確認します。
各要素の内容は150ピクセルの間隔で区切られていますが、2つの要素のボックスは互いに接触しています。
最初の要素を右マージンを持たないように変更すると、右マージンエッジは右ボーダーエッジと同じ位置になり、2つの要素は次のようになります。
ボックスサイズ
デフォルトのボックスモデル( content-box
)は、直感的ではありません。エレメントのwidth
/ height
は、エレメントにpadding
とborder
スタイルを追加するとすぐに画面上の実際の幅や高さを表しません。
次の例は、 content-box
この潜在的な問題を示していcontent-box
。
textarea {
width: 100%;
padding: 3px;
box-sizing: content-box; /* default value */
}
パディングはテキストエリアの幅に追加されるので、結果の要素は100%より広いテキストエリアになります。
幸いにも、CSSは、要素のbox-sizing
プロパティでボックスモデルを変更することを可能にします。使用可能なプロパティには3つの異なる値があります。
content-box
:共通ボックスモデル - 幅と高さにはコンテンツのみが含まれ、パディングや境界線は含まれません。padding-box
:幅と高さにコンテンツとパディングが含まれますが、境界線は含まれません。border-box
:幅と高さには内容、詰め物、境界線が含まれます
上記のtextarea
問題を解決するには、 box-sizing
プロパティをpadding-box
またはborder-box
変更するだけです。 border-box
が最も一般的に使用されます。
textarea {
width: 100%;
padding: 3px;
box-sizing: border-box;
}
ページ上のすべての要素に特定のボックスモデルを適用するには、次のスニペットを使用します。
html {
box-sizing: border-box;
}
*, *:before, *:after {
box-sizing: inherit;
}
このコーディングbox-sizing:border-box;
直接*
は適用されないため、個々の要素に対してこのプロパティを簡単に上書きすることができます。