logo
コーディング

更新日

CSSスプライトで画像を円滑に表示させる

CSSスプライトとは、複数の画像をひとつにまとめて、CSSでポジションを指定することにより表示させるCSSの技のひとつです。画像の数を減らすことにより、サイトの表示を速めることができます。以前よりYoutubeなどに使用されているので、その名前を一度は聞いたことがあるかもしれません。ここではCSSスプライトを使用したメニュー画像の作り方を紹介します。

CSS スプライトを使うデメリット

メリットは上記にあるとおり、サイトの高速化が期待できます。ではデメリットとは?

  • alt 属性が使えない
  • 背景画像のリピート表示ができない
  • 更新する時に手間がかかる(サイズを変えると CSS も変えなければいけないため)

以上をふまえて、私はいつもメニューの背景やボタンなど、マウスオーバー時に変化する画像のみ CSS スプライトを使用しています。ということで、早速作ってみましょう!

CSS スプライトを使ったボタン画像の作り方

サンプル

サンプルボタン。こんな感じです。

1. 通常時の画像を作る

Photoshop を開いて、マウスオーバーする前の画像を作ります。サンプルの画像のサイズは横 140px、縦 40px。

2. マウスオーバー時の画像を作る

続いて、マウスオーバーした時に表示させたい画像を同じサイズで作ります。

3. 2つの画像をひとつにする

新規ファイルを開いて、 横のサイズはそのまま、縦のサイズを2倍に設定。 この場合は横 140px、縦 80px に設定します。

実際に使う画像はこんな感じ ↓。上に通常時の、下にマウスオーバー時の画像をそれぞれ配置します。

4. HTML コーディング

HTML コーディングはいたってシンプル。a タグにクラスをつけ、CSS で背景画像を設定します。

<a class="sample_spritemenu" href="#">サンプル</a>

5. CSS コーディング

通常時では上半分(40px)のみ表示し、マウスオーバーすると下半分を表示するよう CSS で設定します。

  • display:block; を入れることで、画像全体がリンク範囲となります。
  • height は画像の高さの半分の値。サンプルでは padding-top:10px;を使用しているため、画像の高さ(40px)から padding-top(10px)を引いた値(30px)と設定されています。
  • background-position:left bottom; で、マウスオーバー時に下の画像が表示されます。
a.sample_spritemenu {
  background: url(images/sprite-menu.jpg);
  width: 140px;
  height: 30px;
  display: block;
  cursor: pointer;
  padding-top: 10px;
  text-align: center;
  color: #fff;
}

a.sample_spritemenu:hover {
  background-position: left bottom;
}

参考になれば幸いです!