gorogoronyan FC2

CSS: 要素の余白 - padding, margin

概略

margin  : 枠線 (border) の 外側 の余白の大きさ。
padding : 枠線 (border) の 内側 の余白の大きさ。
図: margin, border, padding
図: margin, border, padding

CSS の display の値が inline の要素 (a タグ, span タグ, b タグなど) では上下の margin を設定しても反映されません。 block や inline-block の要素では反映されます。

display の値   padding      margin              要素(タグ)の例
-------------------------------------------------------------------------
inline         確保される   上下は確保されない  span, a, b, strong など
inline-block   確保される   確保される          img など
block          確保される   確保される          div, p, h1, ul, dl など

サンプル

TestCSS_inline_span01.html
インライン要素 (display: inline;) の padding や margin の例。 span タグのサンプル。
span タグ

padding

padding のサンプル

TestCSS_padding01.html
padding のサンプル。px, em, % などの単位。
TestCSS_padding_em01.html
padding を em で指定したサンプル。 em で指定するとフォントサイズに連動した相対的な大きさになります。
CSS: 値の単位

CSS box-sizing

Web ブラウザの初期表示では div の大きさ (width, height ) の設定値が同じでも padding や border の有無によって div の大きさが変わります。 padding や border を入れると、この分だけ要素が大きくなります。

例: div の width が 300px, padding が 10px, border の太さが 2px
 とすると、div の幅は 324px になります。

    (div の width) + (左右の padding) + (左右の border)
  = 300 + (10 x 2) + (2 x 2)
  = 324px 

width を padding や border も含めた大きさにしたい場合は box-sizing: border-box; を指定します。 厳密な大きさを気にするときには border-box を指定すると便利です。

TestCSS_box_sizing01.html
box-sizing: border-box; のサンプル。
TestCSS_box_sizing_li_flex01.html
li タグの目次でマウスカーソルがある項目を強調表示するサンプル。 box-sizing: border-box; で border が太くなっても li の大きさが変わらないようにします。
ul,ol,li タグ
CSS: flex
TestCSS_hover_table03.html
table タグの td:hover のサンプル。 マウスカーソルのあるセルの枠を太くして強調表示する。
table タグ (2)
TestHTML_layout_column1_fix1.html
HTML ソース
固定のページ幅で 1段組のページレイアウトのサンプル。 body の幅だけ指定して header、main、footer の width の指定を省略します。 width: 100% を書く場合は box-sizing: border-box; も必要です。
HTML: ページレイアウト (2) 固定幅

margin

maring (マージン) は枠線 (border) の外側の余白の大きさです。

div タグでは余白は 0 になっています。見出しのタグ (h1, h2 など) や ul タグや dl タグなどでは初期値で上下にマージンが設定されていて余白ができます。

margin の相殺

margin では margin の相殺 の話が出てきます。 隣接する要素がそれぞれ margin を持ってるときに重なる部分が生じます。

下の絵は 2つの div を並べた例です。 各 div はマージンを持っています。 このとき 2つの div の間でマージンが重複する領域が発生します。 これを margin 相殺と呼びます。 2つの div のマージンがそれぞれ 50px だった場合、 div の間の余白は 50px + 50px = 100px にはならず、 重複する部分だけ小さくなります。この場合は 50px になります。

隣接するタグでマージンの大きさが異なる場合は大きい方の値になります。

margin: auto;

ブロック要素を左右中央に配置する

margin: auto; をよく使う用途として ブロック要素 (div タグ, figure タグなど) の左右センタリングがあります。 上下に対してはそのままではセンタリングされない点に注意してください。

TestHTML_div_margin_auto01.html
ブロック要素 (div, p など) の左寄せ、センタリング、 右寄せ。
CSS: 要素の配置: ブロック要素
TestHTML_img_figure01.html
figure タグを配置するサンプル。 figure タグも div タグと使い方は同じです。
figure タグ

ブロック要素を上下左右中央に配置する

CSS の flex や absolute と margin: auto; を組み合わせることでブロック要素を上下中央にも配置できます。
CSS: 要素の配置: 左右中央, 上下中央
CSS: flex
CSS position: absolute;

TestCSS_flex_margin_auto01.html
div を上下中央、左右中央に配置する。

padding や margin 以外でできる余白

padding や margin が 0 でもわずかに余白ができる場合があります。 img タグで画像を並べたときによく出てくる話です。 1) 改行コードの有無、 2) テキストの行間、 3) フォントのベースラインなどが関係してわずかに隙間ができることがあります。

TestHTML_img_gap01.html
img タグで画像を並べたときにできる隙間の話。
img タグ
CSS: vertical-align

関連

inserted by FC2 system