Menu

CSS padding の使い方: 指定の順番、上下左右、パーセント

padding は要素の内側、内容と border の間の余白です。1 から 4 つの値で書く padding のショートハンド、片側だけのプロパティ、論理プロパティの padding、パーセント指定、padding で要素のサイズがどう変わるかを解説します。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

padding とは

padding は要素の 内側、内容と border の間の余白です。要素の背景が見えるので、ボタン、カード、バッジにゆとりを持たせるプロパティです。

青い領域が内容です。その周りの緑の帯が、全方向に 24px ずつの padding で、border はその外側にあります。

padding のショートハンド: 値は 1、2、3、4 つ

padding は 1 つの宣言で 4 辺すべてを指定します。値の数で、どの辺にどの値が入るかが決まります。上から時計回りです:

宣言上右下左
padding: 10px;10101010
padding: 10px 20px;10201020
padding: 10px 20px 30px;10203020
padding: 10px 20px 30px 40px;10203040

値が 2 つなら「上下、左右」。3 つなら「上、左右、下」。4 つなら時計回りに上、右、下、左です (英語では TRouBLe と覚えます)。

下にショートハンドを入力してみてください。ボックスが再描画され、各辺に入った値をブラウザが表示します:

8px、8px 24px、0 0 40px、1em 5% を試してみてください。-10px のような無効な値は無視され、ボックスは最後の有効な padding を保ちます。

1 辺ずつ指定する

各辺には専用のプロパティがあります。1 辺だけ変えたいときは、4 つの値のショートハンドよりわかりやすくなります:

.card {
  padding-top: 16px;
  padding-right: 24px;
  padding-bottom: 16px;
  padding-left: 24px;
}

ショートハンドの後に 1 辺を書くのはよくある書き方です。全体を設定してから、1 辺だけ調整します。

.card {
  padding: 16px;
  padding-bottom: 32px; /* only the bottom changes */
}

ここでは順番が重要です。padding-bottom の後に padding のショートハンドを書くと、下が 16px に戻ってしまいます。

論理プロパティ: padding-inline と padding-block

padding-left と padding-right は物理的なプロパティで、どの言語でも同じ側に付きます。論理プロパティは書字方向に従います。右から左の言語でも表示するサイトではこちらが適しています:

論理プロパティ英語 (左から右)アラビア語 (右から左)
padding-inline-start左右
padding-inline-end右左
padding-inline左と右右と左
padding-block上と下上と下

padding でボックスは大きくなる (border-box でない限り)

初期状態では width は内容だけの幅で、padding はその上に加わります。padding: 20px の width: 200px のボックスは幅 240px になります:

box-sizing: border-box にすると、ボックスは 200px のままで、padding は内側から取られます。計算の全体は ボックスモデルのページ で解説しています。

パーセントの padding

パーセントの padding は、上下も含めた 4 辺すべてで、親の 幅 を基準に測られます:

16:9 の動画ボックスに使われた昔の「padding-top: 56.25%」のテクニックはここから来ています。今は aspect-ratio: 16 / 9 で同じことが直接できます。

ボタンとリンクの padding

リンクやボタンを大きくするには padding が適しています。padding は要素の一部なので、クリックやタップできる範囲に含まれるからです。margin では余白は増えますが、押せる範囲は広がりません。

.btn {
  display: inline-block; /* lets vertical padding take space in the line */
  padding: 10px 18px;    /* a comfortable touch target */
}

padding に使える値

値例補足
長さ12px, 1rem, 0.5emem は要素のフォントサイズに合わせて変わります
パーセント5%包含ブロックの幅が基準
0padding: 0単位は不要
マイナス-10px無効で、無視されます
autoautopadding では無効 (margin では使えます)

よくある間違い

  • 4 つの値の順番を間違える。 上、右、下、左の時計回りです。
  • padding を足すとボックスが広がる。 box-sizing: border-box を指定しましょう。
  • 2 つの要素の間を padding で空ける。 要素と要素の間の余白は margin で、padding は 1 つの要素の内側の余白です。margin と padding の違い を参照してください。
  • インラインのリンクに縦の padding を付けて、ほかの行と重なる。 inline-block にしましょう。
  • マイナスの padding や padding: auto。 どちらも無効で、黙って無視されます。

よくある質問

CSS の padding とは何ですか?

padding は要素の内容と border の間の余白です。要素の一部なので、要素の背景色が見え、リンクやボタンのクリックできる範囲も広がります。

padding のショートハンドの値はどの順番ですか?

上から時計回りです: padding: top right bottom left;。値が 3 つなら上、左右、下。2 つなら上下、左右。1 つなら 4 辺すべてです。

padding を付けると要素は大きくなりますか?

初期値の box-sizing: content-box では大きくなります。padding が width と height に加わるからです。box-sizing: border-box では padding が幅の内側から取られるので、要素は指定したサイズのままです。

パーセントの padding は何を基準にしますか?

4 辺すべて、包含ブロックの幅が基準です。padding-top: 50% は親の高さではなく幅の半分です。昔のアスペクト比のテクニックで縦の padding が使われていたのはこのためです。

padding にマイナスの値は使えますか?

使えません。マイナスの padding は無効で、宣言は無視されます。内容を外側に引き出したいときは、代わりにマイナスの margin を使います。

HTML で padding を付けるには?

スタイルシートか style 属性で CSS を使います: <div style="padding: 16px;">。HTML には一般の要素に使える padding 属性はありません。テーブルの古い cellpadding 属性は廃止されていて、td と th の padding に置き換わっています。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める