CSSスプライトのCSSを自動で生成したい【横並びメニュー編】
2016/06/05

WEBサイトのナビゲーションなどで使用されるCSSスプライト。
「サーバーへのリクエスト回数を軽減する」
「画像をスライスする手間が省ける」
などのメリットもあり、多用されている。
しかしながら
「CSSのbackground設定がめんどくさい」
この一言に尽きるのではなかろうか。
ナビゲーションの大きさが均等かつ「200px」などと計算しやすい場合なら特に悩まない。
しかしコンテンツ幅によっては端数が多かったり、
サイトデザインやナビゲーション内の文字数の関係で、
ナビゲーションのサイズが均等であるとは限らない。
作成した画像を使用する際に、微妙にサイズが異なるという情けない場合もまれにあり、
並べてみるとナビゲーションが何だか変、ホバー時にずれるなどの事案も発生する。
何とか面倒くさいこのCSSをさくっとできへんものか考え、
画像のサイズを入力するだけでCSSを勝手に生成するジェネレーターを作成してみた。
Contents
横並びメニューの場合
今回はメインナビなどで使用されることが多い横並びメニューのパターン。
「例:横幅1000pxのナビゲーション、各ナビゲーションサイズは横幅:200px、縦幅50px
それぞれのナビゲーションに「mn01」から「mn05」のclassを設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
nav ul { width:1000px; height:50px; } nav ul li { width:200px; height:50px; float:left; } nav ul li a { display:block; width:100%; height:100%; background:url(xxxx/xxxxxxx/xxxx.jpg); } nav ul li.mn01 a {background-position:0;} nav ul li.mn02 a {background-position:-200px;} nav ul li.mn03 a {background-position:-400px;} nav ul li.mn04 a {background-position:-600px;} nav ul li.mn05 a {background-position:-800px;} |
これくらいは実際に画面で見なくてもCSSを書くことができる。
ところがナビゲーション幅が端数の場合、各ナビゲーションの幅が均等でない場合どうだろう。
例:横幅724pxのナビゲーション、各ナビゲーションサイズは横幅はさまざま、縦幅50px
それぞれのナビゲーションに「mn01」から「mn05」のclassを設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
nav ul { width:724px; height:50px; } nav ul li { height:50px; float:left; } nav ul li a { display:block; width:100%; height:100%; background:url(xxxx/xxxxxxx/xxxx.jpg); } nav ul li.mn01 {width:130px;} nav ul li.mn02 {width:148px;} nav ul li.mn03 {width:134px;} nav ul li.mn04 {width:148px;} nav ul li.mn05 {width:164px;} nav ul li.mn01 a {background-position:0px;} nav ul li.mn02 a {background-position:-130px;} nav ul li.mn03 a {background-position:-278px;} nav ul li.mn04 a {background-position:-412px;} nav ul li.mn05 a {background-position:-560px;} |
それぞれのナビゲーション画像の幅を調べ、
その値を各classのwidthに設定し、
それらのwidthを段階的に加算した数値を、
background-positionに設定するという気の遠くなる作業。
そろばんなど習ったことのない僕は暗算などできるはずもなく、
毎回電卓を叩いて、画面で確認して、の無限ループ。
ナビゲーションの個別の幅は調べるから、
せめて上記の下半分CSSだけでも自動計算できないものか。
そこで作ってみたのが下記のジェネレーターだ。
CSSスプライトジェネレーターはこちら!!
使用方法は下記の通り
1.まず、共通部分のCSSは別途作成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
nav ul { width:xxx; height:yyy; } nav ul li { height:yyy; float:left; } nav ul li a { display:block; width:100%; height:100%; background:url(xxxx/xxxxxxx/xxxx.jpg); } |
xxxにはナビゲーションの横幅、yyyには高さ、
(xxxx/xxxxxxx/xxxx.jpg)は画像のパスとファイル名を入力。
2.Photoshopなどでスプライト用の画像を開き各ナビゲーションの始点を調べる
Photohopなどの定規を使い、各ナビゲーションの始点を調べる。
使用する画像の場合は当然、始点は「0」、次のナビゲーションは「130px」といった感じで
3.classもしくはidを設定
ジェネレーターの「class/id」にclassもしくはidを入力。
入力された値がCSSとして生成されるため、セレクタにて入力。
個別のナビゲーションには末尾01から09までのクラスが付与される。
4.各ナビゲーションの始点を入力
上部の白いボックスに各ナビゲーションの始点を入力(単位は不要)
すると下の橙色のボックスに各ナビゲーションの幅が自動計算され、
それらを含めたCSSが下部のtextareaに生成される。
5.CSSをコピーし、不要部分を削除して完了
生成されたCSSをコピーする。
作成するナビゲーションが5つの場合は「06」以下のCSSは不要となるため削除。
以上でCSSの面倒くさい部分を自動生成できた。
まとめ
以上、今回はCSSスプライトのCSSを自動で生成するツールを紹介。
ただちょっと記事を書いてみて、このジェネレータはさらに改良の余地があると確信。
バージョンアップの後、再掲載したいと思います。