compassは各自インストールしておいてください。
compassを使うときはサイトの最上位フォルダに config.rb を置きますが、ここでは以下の様な設定を使用します。
以下のコードをファイル名 `
config.rb`
で htmlを制作する最上位フォルダに置いておきます
# パスの設定
http_path = "/"
css_dir = "css"
sass_dir = "scss"
images_dir = "img"
javascripts_dir = "js"
# 書き出すCSSのスタイル :expanded or :nested or :compact or :compressed
output_style = :expanded
# コメントを残すかどうか?
line_comments = false
# 相対パスを使うかどうか?
relative_assets = true
# CSSスプライトのランダム文字列を削除
on_sprite_saved do |filename|
if File.exists?(filename)
FileUtils.mv filename, filename.gsub(%r{-s[a-z0-9]{10}\.png$}, '.png')
end
end
on_stylesheet_saved do |filename|
if File.exists?(filename)
css = File.read filename
File.open(filename, 'w+') do |f|
f << css.gsub(%r{-s[a-z0-9]{10}\.png}, '.png')
end
end
end
以下のコードをファイル名 `
_sprite-css.scss`
で scssフォルダに置いておきます
@mixin sprite-common($map, $pixel_raito:1) {
margin: 0;
padding: 0;
background-image: $map;
background-repeat: no-repeat;
display: block;
overflow:hidden;
text-indent: 100%;
white-space: nowrap;
$sprite_image_path: sprite-path($map);
$sprite_width: round(image-width($sprite_image_path) / $pixel_raito);
$sprite_height: round(image-height($sprite_image_path) / $pixel_raito);
@include background-size($sprite_width, $sprite_height);
}
@mixin sprite-item($map, $name, $pixel_raito:1) {
width: image-width(sprite-file($map, $name)) / $pixel_raito;
height: image-height(sprite-file($map, $name)) / $pixel_raito;
$pos: sprite-position($map, $name);
background-position: (nth($pos, 1) / $pixel_raito) (nth($pos, 2) / $pixel_raito);
}
@mixin sprite-css-hover($class_name, $dir_path) {
$map: sprite-map($dir_path + '*.png');
.#{$class_name} {
background-image: $map;
}
}
@mixin sprite-css($dir_path, $pixel_raito:1) {
$map: sprite-map($dir_path + '*.png');
$dir_name: sprite-map-name($map);
.#{$dir_name} {
@include sprite_common($map, $pixel_raito);
}
@each $name in sprite-names($map) {
.#{$dir_name}_#{$name} {
@include sprite_item($map, $name, $pixel_raito);
}
}
}
cssスプライトを作りたい画像ファイルをフォルダ `
img/splites/navi/に置きます。
ロールオーバーさせたい画像ファイルををフォルダ
img/splites/navi_over/`
に置きます。
画像の例
├── sprites/
│ ├── navi/
│ │ ├── file1.png
│ │ ├── file2.png
│ │ ├── file3.png
│ ├── navi_over/
│ │ ├── file1_over.png
│ │ ├── file2_over.png
│ │ ├── file3_over.png
好きな名前のscssファイル(ここでは `
style.scss`
とします。)を scss フォルダに作成して以下のように記述します
(2行だけです。これだけでCSSスプライト画像の生成とCSSコードの書き出しが行われます。)
@include sprite-css("sprites/navi/", 2); // フォルダ名, 倍率
@include sprite-css-hover("navi", "sprites/navi_over/"); // クラス名, フォルダ名
compassを起動して scss→css 変換を実行します。 (codekitやsublimetextを使用することをおすすめします。)
htmlは以下のように記述します
<link rel="stylesheet" href="./css/style.css">
<ul>
<li><a class="navi navi_file1" href="#">メニュー1</a></li>
<li><a class="navi navi_file2" href="#">メニュー2</a></li>
<li><a class="navi navi_file3" href="#">メニュー3</a></li>
</ul>
これでretina, ロールオーバー対応のメニューができます。
ちなみに生成されるCSS `
style.css`
は以下の様なものになります。
.navi {
margin: 0;
padding: 0;
background-image: url('../img/sprites/navi.png');
background-repeat: no-repeat;
display: block;
overflow: hidden;
text-indent: 100%;
white-space: nowrap;
-moz-background-size: 150px, 150px;
-o-background-size: 150px, 150px;
-webkit-background-size: 150px, 150px;
background-size: 150px, 150px;
}
.navi_file1 {
width: 150px;
height: 25px;
background-position: 0 0;
}
.navi_file2 {
width: 150px;
height: 25px;
background-position: 0 -25px;
}
.navi_file3 {
width: 150px;
height: 25px;
background-position: 0 -50px;
}
.navi:hover {
background-image: url('../img/sprites/navi_over.png');
}