Menu

CSS 背景色の指定: ページ全体、要素、透明な背景

background-color は要素のボックスを色で塗ります。ページ全体、div、テーブルの行、1 つの単語の背景色の指定方法、透明度の仕組み、bgcolor が廃止された理由、background-color と background ショートハンドの違いを解説します。

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

背景色の指定方法

background-color は、padding と border の下の領域も含めて、要素のボックスを色で塗ります。CSS のどんな色でも使えます。

ページの色は body に、カードとお知らせはそれぞれの div に、ハイライトはインライン要素に指定しています。インライン要素の背景は、行ごとにテキストの後ろだけに付きます。

ページ全体の背景色

body に background-color を指定します。<html> 要素に自分の背景がなければ、ブラウザは body の内容が終わった先も含めて、ウィンドウ全体に body の背景を描きます:

body {
  background-color: #111827;
  color: #f9fafb; /* change the text color too, for contrast */
}

昔の HTML では <body bgcolor="black"> と書きました。bgcolor 属性はすべての要素で廃止されているので、代わりに CSS を使いましょう。古いページのためにブラウザが今も対応しているので、動いているように見えることがあります。

透明な背景

すべての要素は background-color: transparent から始まるので、後ろの親が見えます。ボックスに色を付けつつ透けさせたいときは、アルファチャンネル付きの色を使います:

opacity: 0.5 でも縞模様は透けて見えますが、テキストも薄くなります。背景だけ透けさせてテキストははっきり見せたいなら、アルファ付きの色を使いましょう。色のすべての書き方は 色のページ にあります。

色が塗られる範囲

初期状態では、背景は border の外側の端まで届きます (そのため破線や半透明の border の隙間から背景が見えます)。background-clip でこれを変えられます:

1 つ目のボックスでは、破線の間からオレンジ色が見えます。2 つ目では border の内側の端で止まり、3 つ目では内容の領域だけに色が付きます。margin は決して塗られず、常に透明です。

テーブルの行を縞模様にする

1 行おきに背景を付けると、幅の広いテーブルが目で追いやすくなります:

background-color と background ショートハンド

background はすべての背景プロパティを一度に指定します。書かなかった部分は初期値に戻るので、ここでつまずく人が多くいます:

.hero {
  background-image: linear-gradient(#2563eb, #1e40af);
  background: #111827;          /* also resets background-image to none */
}

.hero {
  background-image: linear-gradient(#2563eb, #1e40af);
  background-color: #111827;    /* only the color; the gradient stays */
}

色だけを指定したいときは background-color を使います。色と画像など、背景全体を 1 か所で指定するときは background を使います。background-image を参照してください。

アクセシビリティ: 文字色と組み合わせる

背景色は、文字色と組み合わせて初めて読みやすさが決まります。どちらかを指定したら、もう一方も確認しましょう。WCAG は本文に 4.5:1 以上のコントラスト比を求めています。テキストは継承した暗い色のままなので、暗い背景には明るい文字色を明示的に指定する必要があります。

よくある間違い

  • bgcolor を使う。 廃止されています。background-color を使いましょう。
  • 透ける背景に opacity を使う。 内容も薄くなります。アルファ付きの色を使いましょう。
  • background-image の後に background ショートハンドを書く。 画像がリセットされます。代わりに background-color と書きましょう。
  • margin に色が付くと思う。 margin は背景の外側です。色の付いた余白には padding を使いましょう。
  • 暗い背景に初期値のままの文字色。 明るい color も指定しましょう。

よくある質問

HTML で背景色を変えるには?

CSS の background-color プロパティを使います。ページ全体なら body { background-color: #f3f4f6; }、1 つの要素なら <div style="background-color: #fef3c7;"> です。

HTML の bgcolor はまだ使えますか?

使えません。<body>、<table>、<td> の bgcolor 属性は HTML5 で廃止されています。古いページのためにブラウザは今も表示しますが、正しい方法は CSS の background-color です。

背景色を透明にするには?

background-color: rgb(37 99 235 / 20%); のように、アルファチャンネル付きの色を使います。opacity と違い、中のテキストははっきり見えたままです。

background と background-color の違いは何ですか?

background-color は色だけを指定します。background はすべての背景プロパティ (色、画像、位置、サイズ、繰り返し、固定、origin、clip) のショートハンドなので、background: red; と書くと背景画像も none にリセットされます。

body の背景色がウィンドウ全体に広がるのはなぜですか?

<html> 要素に自分の背景がないと、ブラウザは body の背景をキャンバス全体に、body のボックスの外まで描きます。2 つを別の色にしたいなら、html に背景を指定しましょう。

Coddy programming languages illustration

Coddyでコードを学ぼう

始める