CSSボックスモデル:マージン、パディング、ボーダー、display

CSSボックスモデル・ビジュアライザー

CSSボックスモデル:マージンとパディングの違い、ボーダー、display | We.Inc

スライダーで内容、パディング、ボーダー、マージンを動かすと、ボックスモデルが描き直されます。box-sizing、マージンの相殺、ボーダーのスタイル、displayのすべての値もその場で比較できます。

すべての要素は入れ子になった長方形として描かれます。中心に内容があり、その外側にパディング(ボーダーの内側の余白で、背景色で塗られます)、さらにボーダー、いちばん外側にマージン(ボーダーの外側の透明な余白で、隣の要素を押し離します)があります。box-sizing: border-boxを指定すると、設定した幅にパディングとボーダーが含まれるため、レイアウトがずっと予測しやすくなります。ボックスがどう並ぶかを決めるのはdisplayプロパティです。

内側から外側へ、4つの層

4つのスライダーを動かすと、図、実際に計測した合計サイズ、そしてCSSがすべて同時に変わります。ビジュアライザーの下では、box-sizingを切り替えたり、2つのマージンが1つに相殺される様子を見たり、同じ3つの項目でblock、inline、inline-block、flex、grid、noneを並べて比較したりできます。

よくある質問

マージンとパディングの違いは何ですか?

パディングはボーダーの内側にあるため、要素の背景で塗られ、クリックできる範囲にも含まれます。マージンはボーダーの外側にあり、常に透明で、要素をほかの要素から離す役割しかありません。また、ブロック同士の上下のマージンは相殺されて1つになることがありますが、パディングが相殺されることはありません。

要素が設定した幅より広くなるのはなぜですか?

初期値のbox-sizing: content-boxでは、幅は内容だけに適用され、その外側にパディングとボーダーが加算されます。20pxのパディングと2pxのボーダーを持つ300pxのボックスは、344pxの幅で描画されます。box-sizing: border-boxに切り替えれば300pxのままで、内容のほうが縮んで収まります。

マージンはどんなときに相殺されますか?

通常フロー内のブロックボックスの上下のマージンは、接したときに1つにまとまります。兄弟要素の間、そしてボーダー、パディング、インラインの内容で隔てられていない親要素と最初または最後の子要素の間で起こります。採用されるのは大きいほうのマージンです。フレックスやグリッドのコンテナの中や、左右方向では相殺は起こりません。

display: noneとvisibility: hiddenの違いは何ですか?

display: noneは要素をレイアウトから完全に取り除くため、その場所は詰められ、スクリーンリーダーも読み飛ばします。visibility: hiddenは場所を確保したまま何も描画せず、内容は支援技術からも隠されます。opacity: 0は場所を残したうえで、クリックやフォーカスも可能なままです。

インライン要素に幅を設定できますか?

できません。spanのような通常のインラインボックスでは、幅、高さ、上下のマージンは無視されます。上下のパディングは描画されますが、行の間隔を押し広げることはありません。inline-blockに変えるか、親をフレックスコンテナにすると、これらのサイズが効くようになります。

content-boxとborder-boxを数値で比べる

ただの線にとどまらないボーダー

displayでボックスはどう変わるか

マージンかパディングか?目的で選ぶ

どちらを使うべきか

マージンの相殺をその場で見る

1組目は、24pxと40pxのマージンが接する2つの兄弟要素です。間隔は64pxではなく40pxになります。2組目はflow-rootのコンテナの中にあり、親と子のマージンがまとまるのを防いでいます。3組目はフレックスを使っており、何も相殺されません。

兄弟要素と親子の相殺

マージンを編集して間隔の変化を見てみましょう。外側のボックスにpadding-top: 1pxを加えても、親と子のマージンがまとまるのを防げます。

ボーダーのスタイルと角丸

目に見える8種類のボーダースタイルすべて

groove、ridge、inset、outsetはボーダーに陰影をつけて立体感を演出します。4px以上の太さで最もきれいに見えます。

角丸の形:角丸、ピル型、円、楕円

999pxのような非常に大きな半径を指定すると、どんな長さでもピル型になります。正方形に50%を指定すると円になります。

同じ3つの項目で見るdisplayの全値

displayの値の比較

block、inline、inline-block、flex、gridを並べて比較

各行には、width: 80pxとパディングを指定した同じ3つのspanが入っています。幅を無視するのはinlineだけです。

display: none、visibility: hidden、opacity: 0の比較

3つの隠し方の比較

中央の項目を3通りの方法で隠す

visibilityとopacityでは間隔が残り、display: noneでは間隔が詰められることに注目してください。

border-boxのリセット

すべての要素にborder-boxを適用する

疑似要素もボックスなので含めています。TailwindのPreflightには、このルールがすでに入っています。

Tailwindでの書き方

Tailwindのボックスモデル用ユーティリティ(既定の余白スケール、1単位 = 0.25rem)

ボックスモデル・ビジュアライザー

マージンの層

描画されたボックス(ボーダーの端)

マージンを含めて占める領域

黄色がマージン、青い線がボーダー、緑がパディング、水色が内容です。

ボーダーの幅

CSSをコピー

無料で始める · クレジットカード不要

関連: ガイド|Webマーケティングと集客を学ぶ

製品

ご利用いただける方

機能

リソース

会社情報

サイトマップを見る