Webデザインの教科書
背景画像
Scroll

CSSだけでレスポンシブ対応背景画像の使い方とテクニック

みなさん、Webデザインで背景画像を入れたくなったことはありませんか?

実は、今話してるヒツジも背景画像です。

こんな感じに、いろんな活用の仕方があります。

今回は背景画像の使い方とレスポンシブ対応について紹介します。

背景画像の表示

ではさっそく、背景に画像を入れてみましょう。

好きな画像を1枚用意してください。

背景に画像を入れる

<div class="back"><div>
.back {
width: 100%;
height: 400px;
background-image: url('../image/paris.jpg');
}
背景に画像を入れる
背景画像の挿入

背景に画像はCSSで画像を読み込み表示します。

CSSプロパティの「background-image」プロパティを使って、背景画像を指定して表示します。

  1. 画像の読み込み
    Web練習フォルダ/
    index.html
    css/
    main.css
    image/
    paris.jpg

    CSSのURL関数を使って、画像があるところまでのファイルパスを指定します。

    今回はCSSファイルの「main.css」からの相対パスを指定して画像を読み込みます。

    .back {
    background-image: url('../image/paris.jpg');
    }
  2. 画像の大きさ

    背景画像は画像を読み込むだけでは表示されません。

    背景画像は表示する画像の大きさをはっきりと指定する必要があります。

    今回は画像の横幅を「100%」高さを「400px」に指定します。

    .back {
    width: 100%;
    height: 400px;
    background-image: url('../image/paris.jpg');
    }
大きさを指定しなかった場合

CSSで背景画像を表示する場合は「width」と「height」を指定する必要があります。

特に高さの「height」は、大きさを指定しなかった場合は画像の大きさが「0px」になります。

画像を適切に読み込む事が出来た場合も、画像の高さが「0px」のため背景画像は見えません。

背景画像を表示する場合は、必ず横幅「width」と高さ「height」を指定しましょう。

.back {
width: 100%;
height: 400px;
}

このようにCSSで画像を表示することが出来ます。

お気づきかもしれませんが、綺麗に画像が表示されていませんよね。

実は背景画像は、表示の仕方を調整する必要があります。

背景画像の表示を整える

<div class="back"><div>
.back {
width: 100%;
height: 400px;
background-image: url('../image/paris.jpg');
background-position: center;
background-size: cover;
background-repeat: no-repeat;
}
背景画像を整える
背景画像の表示位置

背景画像の表示位置を調整します。

背景画像が要素の中心に来るようにします。

CSSプロパティ「background-position」の値を「center」に指定します。

.back {
background-position: center;
}
背景画像のサイズ

背景画像のサイズを調整します。

背景画像の大きさは主に3つのパターンで調節が可能です。

固定値

背景画像の大きさを固定値で設定することが出来ます。

例えば、背景画像の横幅を「200px」高さを「100px」に固定する場合はこのようにCSSで指定します。

固定値で大きさを指定する際は、横幅・高さの順番で記述しましょう。

.back {
background-size: 200px 100px;
}
contain

背景画像の画像全体がすべて見えるように、画像を拡大または縮小します。

表示する画像によっては、画像の上下もしくは左右に余白が作られたように見えます。

CSSプロパティ「background-size」の値を「contain」に指定します。

cover

背景画像が要素全体にピッタリ収まるように拡大または縮小します。

表示する画像によっては、拡大されてはみ出た部分が切り取られたように見えます。

CSSプロパティ「background-size」の値を「cover」に指定します。

.back {
background-size: cover;
}
背景画像の繰り返し

背景画像は、表示する画像の大きさによっては、要素全体を埋めるように繰り返し並べて表示されます。

これは画像の大きさが不足している場合は、CSSが自動で繰り返し表示をして要素全体を埋めようとするためです。

CSSで画像の繰り返しを適切に制御しましょう。

画像の繰り返し (デフォルト)

CSSで背景画像の繰り返しを指定しない場合は、要素全体を埋めるように画像を上下左右に繰り返します。

もしくは、CSSプロパティ「background-repeat」の値を「repeat」にすることで、繰り返すを許可することが可能です。

.back {
background-repeat: repeat;
}
画像の繰り返し禁止

画像を繰り返し表示しない時は「background-repeat」プロパティの値を「no-repeat」に指定します。

CSSプロパティ「background-repeat」の値を「no-repeat」にすることで、画像の繰り返しを禁止します。

.back {
background-repeat: no-repeat;
}

これで綺麗に画像が表示されます。

でも、こんなに長く書かなきゃいけないの?と思ったと思います。

実は、省略した書き方があります。

短く書く方法

<div class="back"><div>
.back {
width: 100%;
height: 400px;
background: url('../image/paris.jpg') center / cover no-repeat;
}
短く記述で背景画像を表示
background
  1. ファイルパス
  2. ポジション
  3. サイズ
  4. リピート
背景画像をまとめて設定

CSSで背景画像を挿入する時に、綺麗に表示するようにまとめて設定します。

CSSプロパティ「background」の値に「ファイルパス」「ポジション」「サイズ」「リピート」の順番でまとめて指定します。

  1. ファイルパスの指定
    Web練習フォルダ/
    index.html
    css/
    main.css
    image/
    paris.jpg

    CSSのURL関数を使って、画像があるところまでのファイルパスを指定します。

    今回はCSSファイルの「main.css」からの相対パスを指定して画像を読み込みます。

    .back {
    background: url('../image/paris.jpg');
    }
  2. ポジションの指定

    背景画像が要素の中心に来るようにします。

    URL関数の後ろに「center」を指定します。

    CSSプロパティ「background-position」の値を「center」にしています。

    .back {
    background: url('../image/paris.jpg') center;
    }
  3. サイズの指定

    背景画像が要素全体にピッタリ収まるように、拡大または縮小するようにします。

    先ほど指定したポジションの「center」の後ろに「cover」を指定します。

    その時に、「center / cover」のように「/」を間に挟んで指定します。

    CSSプロパティ「background-size」の値を「cover」にしています。

    .back {
    background: url('../image/paris.jpg') center / cover;
    }
  4. リピートの指定

    画像を繰り返さないように設定します。

    先ほど指定したサイズの「cover」の後ろに「no-repeat」を指定します。

    CSSプロパティ「background-repeat」の値を「no-repeat」にしています。

    .back {
    background: url('../image/paris.jpg') center / cover no-repeat;
    }

このように、CSSのショートハンドと呼ばれる方法で短く記述が可能です。

ぜひCSSを1つ1つ書く方法と短く書く方法の両方を試してみてください。

背景画像のテクニック

背景画像を表示する時に不便なことがあります。

それは画像を表示する際に、高さを固定しなくてはなりません。

高さが固定されてしまうと、レスポンシブ対応が難しくなってしまいます。

背景画像の悪い点

背景画像の高さ

背景画像を表示する際は、高さを固定値で指定する必要があります。

背景画像の高さを画像の縮尺に合わせて変えたい場合に、CSSの「height: auto」にしても意図した通りに表示されません。

この場合の背景画像の高さは、高さの基準になるものがないため高さは「0px」になります。

背景画像の高さは固定値

背景画像はあくまでも背景なので、画像自体に大きさはありません。

背景画像の横幅は「100%」で画面サイズなどに合わせることは可能です。

ただし、背景画像の高さを「auto」や「100%」にする事は出来ず、高さは「0px」になります。

そのため、背景画像の高さは固定値で指定しないと表示されません。

.back {
width: 100%;
height: 400px;
background: url('../image/paris.jpg') center / cover no-repeat;
}
レスポンシブ対応が難しい

背景画像の高さが固定すると、スマホなどの小さな画面では大きすぎたり小さすぎることがあります。

背景画像の大きさを調節する方法として、CSSのメディアクエリを使った方法があります。

例えば下のコードのように、端末の大きさごとに背景画像の高さを調節します。

/* パソコン */
.back {
width: 100%;
height: 400px;
background: url('../image/paris.jpg') center / cover no-repeat;
}
/* タブレット */
@media (max-width: 768px) {
.back {
height: 300px;
}
}
/* スマホ */
@media (max-width: 425px) {
.back {
height: 200px;
}
}

背景画像の悪い点は、高さがどうしても固定されてしまう点です。

画面サイズごとに調整すれば良いけど、かなり面倒ですよね...。

実は秘策があるんです!!

余白を使ったテクニック

<div class="back"><div>
.back {
width: 100%;
padding-bottom: 66.6%;
background: url('../image/paris.jpg') center / cover no-repeat;
}
余白を使ったレスポンシブ対応
レスポンシブ対応のやり方

背景画像の高さは固定値である必要があるため、高さは指定しません

その代わりにCSSの「padding」の余白を使って背景画像の高さを作ります。

  1. 背景画像の横幅を広げる

    背景画像をCSSで読み込み、要素の横幅を最大まで広げます。

    .back {
    width: 100%;
    background: url('../image/paris.jpg') center / cover no-repeat;
    }
  2. 解像度から高さを計算する
    =
    66.66%

    使用する画像の解像度から、縦と横の比率を計算します。

    今回の例では、使用する画像の横が「1920px」縦が「1280px」の解像度を使用しています。

    画像の横幅を100%とした場合に、画像の高さが横幅の何%に相当するするか計算をします。

    =
    画像の高さ

    画像の解像度を式に当てはめる。

    =
    0.666666...

    求めた値を、%に変換する

    0.666666 × 100 = 66.6666%

    小数点第一位より下を切り捨て

    画像の高さ = 66.6%
  3. 余白で背景画像の高さを作る

    画像の解像度から横幅と高さの比率を計算しました。

    計算して求めた値をCSSプロパティ「padding-bottom」の値に当てはめて、要素の高さを余白で作ります。

    今回の場合は「padding-bottom: 66.6%」指定します。

    .back {
    padding-bottom: 66.6%;
    }

以上が余白を使った背景画像のレスポンシブ対応のやり方です。

画像の解像度を使って計算が必要ですが、とても便利なテクニックです。

背景画像のレスポンシブ対応は、実はもう一つ方法があります。

アスペクト比のテクニック

<div class="back"><div>
.back {
width: 100%;
aspect-radio: 3/2;
background: url('../image/paris.jpg') center / cover no-repeat;
}
アスペクト比を利用する
横幅:高さ=3:2
画像のアスペクト比

画像のアスペクト比とは、画像の縦と横に比率のことを言います。

よくある画像の縦と横の比率は「4:3」が多くそのほかにも「3:4」「16:9」などの比率があります。

アスペクト比を指定する

背景画像をアスペクト比で全体の大きさを指定して表示します。

アスペクト比を指定する場合は、画像の横幅「width」と高さ「height」のどちらか基準になります。

width基準のアスペクト比

背景画像の横幅を「width: 100%」にして最大まで広げます。

画像の横幅を基準に、アスペクト比が横幅と高さが「3:2」になるように表示します。

.back {
width: 100%;
aspect-radio: 3/2;
background: url('../image/paris.jpg') center / cover no-repeat;
}
heigth基準のアスペクト比

背景画像の高さを「height: 300px」まで広げます。

画像の高さを基準に、アスペクト比が横幅と高さが「3:2」になるように表示します。

.back {
height: 300px;
aspect-radio: 3/2;
background: url('../image/paris.jpg') center / cover no-repeat;
}
アスペクト比がわからない場合
横幅:高さ=3:2

もし画像のアスペクト比がわからない場合は、画像の解像度から比率を割り出すことができます。

もしくは、実際にアスペクト比を調節して一番良い比率を探すという方法もあります。

ちょうど良い比率を探す

よくある画像のアスペクト比は「3:2」「4:3」「16:9」がほとんどです。

画像を正確な比率で表示する必要がない場合は、実際に表示を確認しながらバランスの良いアスペクト比を指定してみましょう。

.back {
width: 100%;
aspect-radio: 4/3;
background: url('../image/paris.jpg') center / cover no-repeat;
}
解像度からアスペクト比を算出

画像の正確なアスペクト比が必要な場合は、画像の縦横の解像度から算出する事ができます。

今回は、画像の縦横の解像度が「1920 × 1280」を例にその計算方法を解説します。

1920 : 1280 = 3 : 2

画像の横幅と高さの解像度の比からアスペクト比を計算する。

解像度の値を、整数値1桁もしくは2桁になるまで割っていく。

1920 : 1280 (10で割る)
= 192 : 128 (16で割る)
= 12 : 8 (4で割る)
= 3 : 2

よって、解像度「1920 × 1280」のアスペクト比は「3:2」である。

1920 : 1280 = 3 : 2
.back {
width: 100%;
aspect-radio: 3/2;
background: url('../image/paris.jpg') center / cover no-repeat;
}

以上が背景画像をアスペクト比を利用して表示するテクニックです。

画像の縦横の比率がわかっている場合は直感的に指定できます。

テクニックの応用

<div class="frame">
<div class="back"><div>
<div>
.frame {
margin: 40px auto;
max-width: 800px;
}
.back {
width: 100%;
padding-bottom: 66.6%;
background: url('../image/paris.jpg') center / cover no-repeat;
}
すべての画面サイズに対応する
要素全体の構造

背景画像を入れる「back」クラスの親要素に、サイズ制限をする「frame」クラスを作成します。

「back」クラスは常に最大(100%)まで広がります。

親要素の「frame」クラスの大きさで、画像サイズを制限します。

要素の最大サイズの制限

パソコンなどの大きな画面では、背景画像が大きくならないように制限します。

画面サイズが「800px」より大きい時は「frame」クラスの大きさを「800px」に固定します。

さらに、「margin」の値を「auto」にして背景画像が中央に寄るようにします。

.frame {
margin: 40px auto;
max-width: 800px;
}

以上が背景画像で使えるテクニックです。

難しい処理をしなくても、ここまでレスポンシブ対応出来ます。

ぜひ使ってみてください!!