• sass

    Compassで楽々スプライト

    2013/02/06

    Compass sprite-map()について

    compass.png

     

    Compassを使う!(独自機能)にチラっと書いていますが、
    もっと詳しく!Compassで作るスプライト画像について!


    基本的な使い方

    まず、imgaeファイルが入っているディレクトリに、スプライト画像用のディレクトリを作成します。

    例えば、アイコンをまとめたスプライト画像を作るとして、ディレクトリ名をiconにします。

    その中に、スプライト化したい画像をホイホイ入れていきます。

    blue.png  red.png  yellow.png

    構造的にこうなりますね。(※imgディレクトリ内の場合)

    
    img/icon/blue.png
    img/icon/red.png
    img/icon/yellow.png
    
    

    次にSCSSファイルにこれを書きます。

    
    @import "icon/*.png";  //iconの所は自分が作ったディレクトリ名
    
    

    これを書いてコンパイルすると、ターミナルに

    
    create img/icon-s7b2f1a9a3d.png
    
    

    と表示されます。(数字のとこは色々)

    これは「imgディレクトリの中にicon-s7b2f1a9a3d.pngっていうスプライト画像を作ったよ!」っていうことですね。

     

    その通り、imgディレクトリの中に

    上記名前のスプライト画像が作られています。

    icon-s4d3f1...

    じゃんっ!


    書き出されたcssはこれ。

    
    .icon-sprite {
      background: url('/img/icon-s7b2f1a9a3d.png') no-repeat;
    }
    
    

    fmfmなるほど。


    続きまして。SCSSファイルに以下を記述。

    
    @include all-icon-sprites;  //iconの所は自分が作ったフォルダ名
    
    

    コンパイルするとcssはこのように書き出されます。

    
    .icon-sprite, .icon-blue, .icon-red, .icon-yellow {
      background: url('../img/icon-s7b2f1a9a3d.png') no-repeat;
    }
    
    .icon-blue {
      background-position: 0 0;
    }
    
    .icon-red {
      background-position: 0 -50px;
    }
    
    .icon-yellow {
      background-position: 0 -100px;
    }
    
    

    各スプライト画像にはフォルダ名-ファイル名のクラス名が自動で指定されています。


    これを使いたい場所のclass名に指定するか、@extendするかで使えますよ!
    が、前回までのお話。



    【応用】sprite-map

     

    基本の方で作られたスプライト画像って、

    各画像がきっちきちに配置されているので使いにくいですね。

     

    それを、自分がほしいように作ってくれるのがsprite-map!(かっこいい!)


    まず書き方

    
    $icon: sprite-map("icon/*.png", [$option]); 
    
    

    任意の変数(上の場合$icon)に、sprite-mapをいれます。

    引数に入っている icon/*.png は基本と同じですね。
    iconディレクトリに入れたpngファイルを、これで結合してスプライト化します。


    続けてカンマ区切りで設定できるオプション。

    
    $spacing //画像と画像間の余白(px)
    $position //x軸に沿ったスプライトの位置(%)
    $layout //スプライトの並べ方
    
    

     

    $layoutで設定できるのは、
    縦方向に並べるvertical(デフォルト)
    横方向に並べるhorizontal
    斜めに並べるdiagonal($position, $spacingは無視されます)
    余白なく並べるsmart($position, $spacingは無視されます)
    があります。


    例えばで色々作ってみると、

    
    $icon: sprite-map("icon/*.png", $spacing:30px, $position: 0%, $layout: horizontal); 
    
    

     

    icon-sf4d31...

     


    
    $icon: sprite-map("icon/*.png", $layout: diagonal); 
    
    

     

    icon-s00e33...

     


    
    $icon: sprite-map("icon/*.png", $layout: smart); 
    
    

     

    icon-s04f4d...

    ※わかりやすいように、丸アイコンを二つ足しました!


    こんな風になります!


     

    作ったスプライトを読み込ませる時は、このように書きます。

    .boxの背景にスプライト内のred.pngをひく場合

    
    .box{
      background:sprite($icon, red);
      @include sprite-dimensions($icon, red);
    }
    
    

    ↓コンパイル結果

    
    .box {
      background: url('../img/icon-s04f4d80b84.png') 0 -100px no-repeat;
      height: 50px;
      width: 70px;
    }
    
    

     

    sprite()の引数に、sprite-mapの変数名, 使用したいファイル名を書くと、
    該当のスプライトの中から使用したいファイルの位置まで書き出してくれます。

    同様に@include sprite-dimensions()にも指定すると、
    該当のファイルのwidth, heightを書き出してくれます。

     

    まとめて書くとこうですね。

    (20pxずつ余白をあけた縦型スプライトを作成 + .boxの背景にblue.pngをひく)

    
    $icon: sprite-map("icon/*.png", $spacing: 20px, $layout: vertical); 
    
    .box{
      background:sprite($icon, blue);
      @include sprite-dimensions($icon, blue);
    }
    
    


    たったこれだけ!

    本当に思うけど
    Compassってすごいいいいいい!!!!

    タグ:Compass , Sass

この記事へのコメント

コメントを送る

  ※ メールは公開されません
Loading...
 画像の文字を入力してください

back