第6章 Sassを更に便利にする Compass
6-6 Compassで簡単CSSスプライト(Compass Sprites)
Compassで簡単CSSスプライト(Compass Sprites)
@import "<map>/*.png";
@import "icon/*.png";
.icon-sprite { background: url('../img/icon-sde4c3f298e.png') no-repeat; }
背景の位置を書き出す
@import "icon/*.png"; @include all-icon-sprites;
.icon-sprite, .icon-author, .icon-book, .icon-contact, .icon-download, .icon-sample, .icon-top, ul li.top { background: url('../img/icon-sde4c3f298e.png') no-repeat; } .icon-author { background-position: 0 -96px; } .icon-book { background-position: 0 0; } .icon-contact { background-position: 0 -128px; } .icon-download { background-position: 0 -32px; } .icon-sample { background-position: 0 -64px; } .icon-top { background-position: 0 -160px; }
<ul> <li><a href="/" class="icon-top">トップ</a></li> <li><a href="/about/" class="icon-book">書籍について</a></li> <li><a href="/source/" class="icon-sample">サンプルソース</a></li> <li><a href="/profile/" class="icon-author">著者プロフィール</a></li> <li><a href="/dl/" class="icon-download">ダウンロード</a></li> <li><a href="/contact/" class="icon-contact">お問い合わせ</a></li> </ul>
li { list-style: none; a { display: block; padding:5px 0 0 40px; height: 32px - 5px; font-size: 16px; } }
設定変数
$icon-layout: horizontal; @import "icon/*.png";
$icon-layout: diagonal; @import "icon/*.png";
$icon-layout: smart; @import "icon/*.png";
$icon-spacing:20px; @import "icon/*.png";
$icon-layout: horizontal; $icon-spacing: 20px; @import "icon/*.png";
$icon-spacing: 20px; $icon-download-spacing: 60px; @import "icon/*.png";
$icon-position: 50%; @import "icon/*.png";
$icon-author-position: 100%; @import "icon/*.png";
$icon-repeat: repeat-x; @import "icon/*.png";
$icon-clean-up: false; @import "icon/*.png";
$icon-sprite-dimensions: true; @include all-icon-sprites;
.icon-author { background-position: 0 -96px; height: 32px; width: 32px; } 〜 省略 〜 .icon-top { background-position: 0 -160px; height: 32px; width: 32px; }
@include all-icon-sprites(true);
$icon-sprite-base-class: ".list";
.list { background: url('../img/icon-sde4c3f298e.png') no-repeat; }
マジックセレクタで擬似クラスを作成する
ホバー擬似クラス
$icon-spacing: 20px; @import "icon/*.png";
$icon-spacing: 20px; @import "icon/*.png"; @include all-icon-sprites;
.icon-sprite, .icon-author, .icon-book, .icon-contact, .icon-download, .icon-sample, .icon-top { background: url('../img/icon-sa76527fd68.png') no-repeat; } .icon-author { background-position: 0 -468px; } .icon-author:hover, .icon-author.author_hover, .icon-author.author-hover { background-position: 0 -104px; } .icon-book { background-position: 0 -312px; } .icon-book:hover, .icon-book.book_hover, .icon-book.book-hover { background-position: 0 -52px; } .icon-contact { background-position: 0 -520px; } .icon-contact:hover, .icon-contact.contact_hover, .icon-contact.contact-hover { background-position: 0 -260px; } .icon-download { background-position: 0 -364px; } .icon-download:hover, .icon-download.download_hover, .icon-download.download-hover { background-position: 0 0; } .icon-sample { background-position: 0 -416px; } .icon-sample:hover, .icon-sample.sample_hover, .icon-sample.sample-hover { background-position: 0 -156px; } .icon-top { background-position: 0 -572px; } .icon-top:hover, .icon-top.top_hover, .icon-top.top-hover { background-position: 0 -208px; }
アクティブ/ターゲット擬似クラス
$icon-spacing: 20px; @import "icon/*.png"; @include all-icon-sprites;
.icon-sprite, .icon-top { background: url('../img/icon-s690405afc3.png') no-repeat; } .icon-top { background-position: 0 -156px; } .icon-top:hover, .icon-top.top_hover, .icon-top.top-hover { background-position: 0 -104px; } .icon-top:target, .icon-top.top_target, .icon-top.top-target { background-position: 0 0; } .icon-top:active, .icon-top.top_active, .icon-top.top-active { background-position: 0 -52px; }
マジックセレクタの設定変数
$disable-magic-sprite-selectors: false; $sprite-selectors: hover, target, active ;
個別のセレクタにプロパティと値を渡す
背景位置、サイズをまとめて取得する
背景位置のみ取得する
@import "icon/*.png"; //@include all-icon-sprites;
.top { @include icon-sprite(top); }
.icon-sprite, .top { background: url('../img/icon-sa76527fd68.png') no-repeat; } .top { background-position: 0 -572px; } .top:hover, .top.top_hover, .top.top-hover { background-position: 0 -208px; }
背景位置とサイズを取得する
.top { @include icon-sprite(top, true); }
.icon-sprite, .top { background: url('../img/icon-sa76527fd68.png') no-repeat; } .top { background-position: 0 -572px; height: 32px; width: 32px; } .top:hover, .top.top_hover, .top.top-hover { background-position: 0 -208px; }
背景位置を調整する
.top { @include icon-sprite(top, false, 100px, -100px); }
.icon-sprite, .top { background: url('../img/icon-sa76527fd68.png') no-repeat; } .top { background-position: 100px -672px; } .top:hover, .top.top_hover, .top.top-hover { background-position: 100px -308px; }
サイズを取得する
.top { @include icon-sprite-dimensions(top); }
.top { height: 32px; width: 32px; }
幅・高さを別で取得する
.top { width: icon-sprite-width(top); height: icon-sprite-height(top); }
.top { width: 32px; height: 32px; }
Oily PNGのインストール
gem install oily_png
※Macはコマンドの先頭に"sudo"を付けてパスワードを入力する必要があります。