japan.internet.comThe Internet & IT Network
Twitter
RSS
  • ニュース
  • コラム
  • リサーチ
  • ヘッドライン
  • 特集
  • ブログ
  • プレスリリース
  • 専門チャンネル
  • イベント
  • ランキング
  • ニュースメール
2009年11月22日
文字サイズ文字サイズ小文字サイズ中文字サイズ大
今年も各携帯キャリアが冬モデルを発表!買う予定はありますか?
今年中に買う予定
来年には買う予定
しばらく買う予定はない
現在の携帯が壊れるまで買わない
投票締切 11/23 12:00
デベロッパー2009年6月26日 10:00

CSSスプライトを使用してサイトの表示速度を改善する

海外海外internet.com発の記事
  • Post to Twitter
  • Post to Facebook
  • このエントリーを含むはてなブックマーク
  • この記事をクリップ!
  • Buzzurlにブックマーク
  • Yahoo!ブックマークに登録
  • newsing it!
  • この記事をokyuuへインポート

はじめに

 デザイナーが作るデザインはますます手の込んだものになっていますが、その一方で、HTTPリクエストの数と使用される情報量を減らそうとする試みが継続的に行われています。本稿では、その手法の1つであるCSSスプライトについて、基本的な使用例を挙げながら説明していきます。

CSSスプライトの使用例

 リクエストの数と情報量の両方を減らすための1つの手法は、デザインの各所で使われているスタイリング画像(例えばコーナー画像、ライン画像、グラデーション、背景など)を結合することです。まず、図1に示すようなスタイリング画像の基本的な使用例から見てみましょう。

図1 四隅が丸いボックス
図1 四隅が丸いボックス
 この単純なボックスはスタイリング画像のよくある使用例ですが、リクエストの数はかなり多くなります。この例では、8枚の異なる画像が使用されています(各コーナーと各辺に対して1つずつ)。これらの8枚の画像を図2に示します。

図2 ボックスを作成するのに使用される8枚の画像
図2 ボックスを作成するのに使用される8枚の画像(※編集部注:約6倍に拡大しています)
 それぞれの画像がよく見えるよう背景を黄色にしています。これらの画像を結合して、いくつかのCSSスプライト画像にできます。ただし、結合を行う前に、まずCSSに注目し、CSSスプライトを使用するためにCSSをどのように変更するかを考える必要があります。次に示すのは、図1のボックスを作成するのに使用したCSSからの抜粋です。

.Top
{
   background-image: url(TopLine.png);
   height:10px;
   width:100%;
   background-repeat:repeat-x;
   background-position:top center;
}

.TopLeft
{
   float:left;
   background-image: url(ULCorner.png);
   width:10px;
   height:10px;
   background-position:top left;
}
 最初のCSSクラスTopは、ボックス上部の辺を描くためのものです。ここではheightパラメータとrepeat-xを使用することで、コーナーに合わせてライン画像を適切に配置し、ボックスの幅いっぱいにライン画像を繰り返しています。次のクラスTopLeftは、ボックスの左上コーナーの部分を描くためのもので、heightwidthに固定値を指定しています。これらのクラスには他のステートメントも存在しますが、それらは画像の結合方法を決定する上で重要な意味を持ちません。基本的には、次に示すように画像を3つのカテゴリに分ける必要があります。

  1. 幅と高さが固定の画像
  2. X方向に繰り返す画像(水平ライン用)
  3. Y方向に繰り返す画像(垂直ライン用)
 画像のカテゴリ分けが決まったところで、お好きなペイントソフトを使用して、8枚あった画像を結合し、3枚の画像にします。この結果、図3に示す3枚の画像ができます。

図3 結合された画像
図3 結合された画像(※編集部注:約6倍に拡大しています)
 これらの結合された3枚の画像を使用するために、CSSを修正することにします。これらの画像を使用するには、CSS内のbackgroundステートメントを次のような形式に修正する必要があります。

background: url(image_file.png) -x -y;
 背景画像の開始位置を決めるために、backgroundステートメントに-xパラメータと-yパラメータを追加して、左上隅の位置を指定します。ボックスの各コーナーで指定する4つの座標を次に示します。

  • 左上コーナー: -0 -0
  • 右上コーナー: -10 -0
  • 左下コーナー: -0 -10
  • 右下コーナー: -10 -10
 スプライト画像を扱うときの重要なポイントの1つは、間違いなく、使用する適切なオフセット量を決定することです。この情報に基づいて、3つのスプライト画像を使うように元のCSSを修正する必要があります。下のリストは、先ほど紹介したボックス上部の辺と左上コーナーを描画するためのクラスを書き直したものです。

.Top
{
   background: url(hlines.png) -0px -0px repeat-x;
   height:10px;
   width:100%;
}

.TopLeft
{
   float:left;
   background: url(Corners.png) -0px -0px;
   width:10px;
   height:10px;
}
 後は、残りのCSSクラスについても同様の書き換えを行い、各backgroundステートメントに、スプライト画像に対する適切なオフセット量を指定します。

まとめ

 CSSスプライトを使用したサンプルサイトができたので、実際にどのような改善がなされたのかをパフォーマンスの観点から確認してみましょう。以下に示すのは、変更前後の結果を示す簡単な表です。

表1:CSSスプライトによるパフォーマンスの差異
  画像の数 合計ファイルサイズ
個別の画像を使用した場合 8 7.24KB
CSSスプライトを使用した場合 3 2.97KB
改善効果 リクエスト数が5つ減少 4.27KB減少
 CSSスプライトを使用する場合のもう1つのメリットは、ブラウザでリソースが再利用されるため、サイトのより高速なレンダリングが可能になるということです。この四隅が丸い単純なボックスの例は、あくまで第一歩に過ぎません。CSSスプライトの使い方に工夫をこらし、前述の3つのカテゴリに基づいてできるだけ多くの画像を結合してみてください。図4は、CSSスプライトの可能性を追求してできた画像の一例です。合計13枚の小さな画像を結合して、1枚の3.07KBの画像にしています。この画像の中に、背景やボックス、メニュー、各種セパレータで使用するコーナー部分が含まれています。

図4 複雑なCSSスプライト画像の例
図4 複雑なCSSスプライト画像の例(※編集部注:約4倍に拡大しています)

著者紹介

Chris Bennett(Chris Bennett)
 Crowe Horwath LL社のインディアナポリス事務所のマネージャー。連絡先はchris.bennett@crowehorwath.com
関連テーマ
  • プリンター用
  • 記事を転送
  • Post to Twitter
  • Post to Facebook
  • このエントリーを含むはてなブックマーク
  • この記事をクリップ!
  • BuzzurlにブックマークBuzzurlにブックマーク
  • Yahoo!ブックマークに登録
  • newsing it!
  • この記事をokyuuへインポート
最新トップニュース
Graphic Design Forum
【Graphic Design Forum】
流動的媒体と静的媒体に関する見解(11月18日)
「IT の耳」
「IT の耳」
【書評】『Hyper-V スタートアップバイブル』――仮想化についてのすぐれた解説書(11月20日)
百式のネットビジネス研究
百式のネットビジネス研究
世界でもっともパワフルな iPod のスピーカー「Wall of Sound」(11月20日)
週刊-サイト別アクセス状況データ
週刊-サイト別アクセス状況データ
ビデオリサーチインタラクティブ調査(月間インターネットオーディエンスデータ)(11月19日)
海外ソーシャルウェブに学ぶ成功の秘訣
海外ソーシャルウェブに学ぶ成功の秘訣
ゲーム業界を襲う世界的な激震。ソーシャルゲーム急成長のインパクト(11月19日)
今さら聞けない初歩からのアクセス解析
今さら聞けない初歩からのアクセス解析
サイトリニューアル前のアクセス解析活用法(11月19日)
成約率、反応率を上げる Web 文章術
成約率、反応率を上げる Web 文章術
文章力を磨き、キャッシュを生み出す Web サイト に(11月19日)
「Webからの脅威」―その傾向と最新対策
「Webからの脅威」―その傾向と最新対策
新たな対策技術:スパムフィルタリングと E-mail レピュテーション(11月18日)
ROI向上のための戦略的WebPR
ROI向上のための戦略的WebPR
「戦略的 WebPR」のしかけ方〜WebPR の効果測定手法とは〜(11月18日)
スマートにソーシャルウェブを構築しよう
スマートにソーシャルウェブを構築しよう
社員力を生かすソーシャルメディアポリシー(11月17日)
DevX
DevX
Erlangを使った並列処理プログラムの作成(11月17日)
Copyright 2009 Japan Internet.com K.K. All Rights Reserved.http://www.internet.com/