CSS イメージスプライト

画像スプライト

画像スプライトは、単一の画像に含まれる画像集合です。

多くの画像を含むウェブページは、長い時間がかかり、複数のサーバーへのリクエストが生成されることがあります。

画像スプライトを使用することで、サーバーへのリクエストの数を減らし、帯域幅を節約できます。

画像スプライト - 単純な例

「navsprites.gif」の単一の画像を使用し、3つの別々の画像を使用するのではなく、以下のように簡単な例を使用します:

ナビゲーション画像

CSSを使用することで、必要な画像の部分のみを表示することができます。

以下の例では、CSSが「navsprites.gif」画像のどの部分を表示するかを指定しています:

#home {
  width: 46px;
  height: 44px;
  background: url(navsprites.gif) 0 0;
}

自分で試してみる

例説明:

  • <img id="home" src="trans.gif"> - 小さな透明画像のみを定義します。なぜなら、src属性は空にすることができず、実際に表示される画像はCSSで指定された背景画像になります。
  • width: 46px; height: 44px; - 使用する画像部分を定義します
  • background: url(navsprites.gif) 0 0; - 背景画像とその位置(left 0px, top 0px)を定義します

画像スプライト - ナビゲーションリストの作成

「navsprites.gif」のスプライト画像を使用してナビゲーションリストを作成したいです。

HTMLリストを使用します。なぜなら、リンクとして使用できるだけでなく、背景画像をサポートするからです:

#navlist {
  position: relative;
}
#navlist li {
  margin: 0;
  padding: 0;
  list-style: none;
  position: absolute;
  top: 0;
}
#navlist li, #navlist a {
  height: 44px;
  display: block;
}
#home {
  left: 0px;
  width: 46px;
  background: url('img_navsprites.gif') 0 0;
}
#prev {
  left: 63px;
  width: 43px;
  background: url('img_navsprites.gif') -47px 0;
}
#next {
  left: 129px;
  width: 43px;
  background: url('img_navsprites.gif') -91px 0;
}

自分で試してみる

例説明:

  • #navlist {position:relative;} - 位置設定が相対的となり、その中で絶対定位を行うことができます
  • #navlist li {margin:0;padding:0;list-style:none;position:absolute;top:0;} - 余白と内余白を 0 に設定し、list-style を削除し、すべてのリストアイテムは絶対配置
  • #navlist li, #navlist a {height:44px;display:block;} - すべての画像の高さは 44px

今から各特定部分の配置とスタイルを設定し始めます:

  • #home {left:0px;width:46px;} - 始終左に配置し、画像の幅は 46px
  • #home {background:url(navsprites.gif) 0 0;} - 背景画像及其位置(left 0px, top 0px)を定義
  • #prev {left:63px;width:43px;} - 右に 63px(#home 幅 46px + プロジェクト間の一部の余分なスペース)に配置、幅 43px
  • #prev {background:url('navsprites.gif') -47px 0;} - 背景画像を右に 47px(#home 幅 46px + 1px の分離線)に定義
  • #next {left:129px;width:43px;} - 右に 129px(#prev 開始は 63px + #prev 幅は 43px + 余分なスペース)に配置、幅 43px
  • #next {background:url('navsprites.gif') -91px 0;} - 背景画像を右に 91px(#home 幅 46px + 1px の分離線 + #prev 幅 43px + 1px の分離線)に定義

画像エンティティ - ホバー効果

次に、ナビゲーションリストにホバー効果を追加します。

ヒント::hover セレクタはすべての要素に適用できますが、リンクに限られていません。

新しい画像("navsprites_hover.gif")には、三つのナビゲーション画像と三つのホバー効果用の画像が含まれています:

ナビゲーション画像

これは画像であり、六つの個別のファイルではなく、ユーザーが画像上にマウスをホバーするときに、ロード遅延はありません

ホバー効果を実現するために、わずか三行のコードを追加します:

#home a:hover {
  background: url('navsprites_hover.gif') 0 -45px;
}
#prev a:hover {
  background: url('navsprites_hover.gif') -47px -45px;
}
#next a:hover {
  background: url('navsprites_hover.gif') -91px -45px;
}

自分で試してみる

例説明:

#home a:hover {background: transparent url('img_navsprites_hover.gif') 0 -45px;} - すべての3つのホバーアイコンに同じ背景位置を指定し、45ピクセルだけ下に移動