Windows 環境での Sass と Compass のインストールと基本的な環境設定に関するメモ。
Sass には Ruby が必要なので Ruby がインストールされているかどうかをコマンドプロンプトで確認する。
ruby -v
上記コマンドで Ruby のバージョンが表示されれば、Ruby はインストール済み。
インストールされていない場合は、Ruby の公式サイトのダウンロードページ(https://www.ruby-lang.org/ja/downloads/)の下のほうにある「Windows版Rubyバイナリ」からリンクを選択してそのページへ。
例:RubyInstaller (英語) 安定版に多数の便利なライブラリを加えたもの。
RubyInstaller のページに行くと「Download」ボタンがあるのでクリック
「Downloads」ページでダウンロードするバージョンを選択(64bit の場合は x64 と書かれているものを選択)してダウンロード
ダウンロードしたら、実行ファイル(.exe)をダブルクリックしてインストール
「インストール先とオプションの指定」の画面では「Ruby の実行ファイルへの環境変数 PATH を設定する」にチェックを入れる。
インストールが完了したら、以下のコマンドでバージョンを確認。
ruby -v
Sass をインストールするには gem コマンドを使用。
コマンドプロンプトで以下を実行すると Sass がインストールされる。
gem install sass
Sass のバージョンの確認
sass -v
まずは gem を最新のものにアップデート
gem update --system
以下のように表示されれば、最新の gem がインストールされている。
Sass をアップデートするにはコマンドプロンプトで以下を実行
gem update sass
以下のように表示されれば、最新版がインストールされている。
以下のコマンドを実行すると、インストールされている Sass のバージョンや依存性の警告が表示されるので、削除したいバージョンを選択する。
gem uninstall sass
基本的な Sass コマンドについて。
この例では以下のような Sass ファイル(test.scss)を作成
test.scss
#main { width: 600px; p { margin: 0 0 1em; color: #666; } }
コマンドプロンプトを開くと、カレントディレクトリはホームフォルダになっているので、作業するファイルのフォルダへ「cd」コマンドで移動する必要があるが、以下は少し簡単な方法。
1.「cd」コマンド入力後、フォルダをコマンドプロンプトへドラッグ&ドロップする
2.Vista 以降の場合は、フォルダを選択後「Shift キー」を押しながら右クリックすると「コマンドウィンドウをここで開く」というメニューが表示されるので、これを選択するとそのフォルダをカレントディレクトリとしてコマンドプロンプトを開くことができる。
「test.scss」を「test.css」にコンパイルする例
sass test.scss:test.css
「sass/test.scss」を「css/test.css」にコンパイルする例(カレントディレクトリ:sass)
sass test.scss:../csstest.css
アウトプットスタイル(コンパイルされたファイルの見栄え)のオプションは「–style または -t」と記述し、半角スペースを空けてスタイルを指定。
スタイルの種類
スタイルに「expanded」を指定する例
sass test.scss:test.css --style expanded
nested(デフォルト)を指定した場合のアウトプット(CSS)
#main { width: 600px; } #main p { margin: 0 0 1em; color: #666; }
expanded を指定した場合のアウトプット(CSS)
#main { width: 600px; } #main p { margin: 0 0 1em; color: #666; }
compact を指定した場合のアウトプット(CSS)
#main { width: 600px; } #main p { margin: 0 0 1em; color: #666; }
compressed を指定した場合のアウトプット(CSS)
#main{width:600px}#main p{margin:0 0 1em;color:#666}
Watch オプションを付けると、Sass ファイル(またはフォルダ)を監視し、更新(保存)される度に自動的にコンパイルされる(Sass ファイルを書き換えて保存すると、CSS ファイルも更新される)。
Watch オプションを利用するには「–watch」を付ける。
ファイル単位で更新を監視する例
「test.scss」を監視して、更新されると自動的に「test.css」としてコンパイルする
sass --watch test.scss:test.css
以下のように表示される
フォルダ単位で更新を監視
拡張子を付けずに指定すると、それをフォルダ名として認識し、そのフォルダ内の全てのファイルを監視する。
「input」フォルダ内の Sass ファイルを監視して更新があれば、同じ「input」フォルダに CSS ファイルを書き出す場合
sass --watch input
カレントディレクトリを監視して、カレントディレクトリ内に CSS ファイルを書き出す場合
sass --watch .
書き出し先を指定する場合は、コンパイルと同様に CSS を書き出すフォルダをコロン(:)で区切って指定。
「input」フォルダ内の Sass ファイルを監視して更新があれば、CSS フォルダ内の「output」フォルダに CSS ファイルを書き出す場合
sass --watch input:css/output
コンパイル結果のファイル名を指定することも可能
sass --watch input:css/test.css
他のオプションと組み合わせて指定することも可能。
sass --watch --style expanded input:css/output
エラーが起きた場合は停止するオプション
Watch オプションは記述ミスなどでエラーが出ても監視を続けるが「–stop-on-error」オプションを付けるとエラーが起こった場合に監視を中止する。
sass --stop-on-error --watch input
Sass ファイルをコンパイルすると、カレントディレクトリに「.sass-cache」というフォルダが作成される。
キャッシュフォルダを異なるフォルダにする場合
sass --watch input --cache-location フォルダ名
キャッシュフォルダを作らない場合
sass --watch input --no-cache
ヘルプを表示(以下の3つはいずれも同じ)
sass --help sass -h sass -?
SCSS ファイルの位置のコメント(ファイルのパスと記述されている設定の行番号)を出力する
「–line-comments」オプション
sass --watch --line-comments --style expanded sass:css
コンパイルされた CSS
/* line 1, ../sass/test.scss */ #main { width: 600px; } /* line 3, ../sass/test.scss */ #main p { margin: 0 0 1em; color: #666; padding: 5px; }
フォルダの監視やコンパイルを毎回行うのは面倒なので、バッチファイルを作成して簡単に作業できるようにする。
テキストエディタで拡張子が「bat」のファイルを作成して、以下のように記述する(例)。
バッチファイルの例(sass_batch.bat)
cd /d %~dp0 sass --watch -t expanded sass:css ::sass --watch -t nested sass:css ::sass --watch -t compact sass:css ::sass --watch -t compressed sass:css
このファイルを作業するフォルダに置いて、ダブルクリックすると「sass」フォルダ内の Sass ファイルを監視して更新があれば、CSS フォルダ内に CSS ファイルを書き出す。
バッチファイルはダブルクリックしたり「開く」を選択すると実行されてしまうので、編集する場合は右クリックして「編集」を選択。
バッチファイルを実行するとコマンドラインがループして表示され続ける場合は、Ctrl + C で中断して以下を試して見る。
バッチファイルを「sass.bat」として以下の内容を記述して実行するとループになってしまう。
cd /d %~dp0 sass --watch -t expanded sass:css
フォルダ構成
以下のようにコマンドがループする。
バッチファイルを「sass.bat」以外の名前に変更すると、正常に実行される。
例
cd /d %~dp0 sass -watch sass:css --load-path C:\sass\myLibrary
以下は Sass がインストールされていることを前提としている。
Compass がすでにインストールされているかどうかをコマンドプロンプトで確認する。
compass -v
上記コマンドで Compass のバージョンが表示されれば、Compass はインストール済み。
インストールされていない場合は、以下のコマンドを実行。
gem install compass
インストールが完了したら、前述のコマンド(compass -v)でバージョンを確認。
アップデートする場合は以下のコマンドで。
gem update compass
プロジェクトを作成したいフォルダに移動して、以下のコマンドを実行。
この場合 Sass ファイルは「sass」フォルダに、CSS ファイルは「css」フォルダにプロジェクトが作成される。
compass create --sass-dir "sass" --css-dir "css"
上記コマンドを実行すると、以下のようなフォルダとファイルが作成される。
sass フォルダの中には「ie.scss」「print.scss」「screen.scss」というファイルが作成される
css フォルダの中には「ie.css」「print.css」「screen.css」というファイルが作成される
これらはそのまま使用しても良いし、独自のファイルを作成して使用することもできる。
何もオプションを付けずに以下のように実行すると、デフォルトのフォルダが作成される。
compass create
デフォルトで作成されるフォルダ
Sass フォルダ名:sass
CSS フォルダ名:stylesheets
初期で作られる Sass ファイルや CSS ファイルが必要ない場合は以下のようにすれば config.rb と sass フォルダだけが作られる。
compass create --bare
自動的に作成された「config.rb」はこのプロジェクトの設定ファイルとなっている。必要に応じてオプションを指定する。
以下は参考になるサイト
[Compass] 超訳 Configuration Reference /WebTecNote
CSSの常識が変わる!「Compass」、基礎から応用まで!
設定ファイルを知っておこう – 番外編
SassとCompassを使って楽しくCSSコーディング!
プロジェクトディレクトリの指定
環境(フォルダの構成)に合わせて以下のプロジェクトディレクトリの指定をしておく(プロジェクトからの相対パスで指定)。
以下は「compass create」コマンドでオプションを指定せずにプロジェクトを作成した場合(デフォルト)のプロジェクトディレクトリの例
http_path = “/”
css_dir = “stylesheets”
sass_dir = “sass”
images_dir = “images”
javascripts_dir = “javascripts”
「compass create」コマンドで全てのディレクトリ(フォルダ)を指定して作成することも可能。
compass create --sass-dir "sass" --css-dir "css" --javascript-dir "js" --images-dir "img"
上記コマンドでプロジェクトを作成した場合
http_path = “/”
css_dir = “css”
sass_dir = “sass”
images_dir = “img”
javascripts_dir = “js”
アウトプットスタイル
デフォルトは「expanded」。例えば「compact」にする場合は以下のように指定する。(コメントアウトを外して編集)
output_style = :compact
パスの指定
画像の URL を取得する際に、生成する URL を相対パスか絶対パスかを指定する。
「# relative_assets = true」のコメントアウトを外して相対パスにしておくと良い。
relative_assets = true
ラインコメントの設定
Sass ファイルの行数などのコメントを書き出したくない場合は、コメントアウトを外して以下のようにする。
line_comments = false
画像のクエリ情報の削除
キャッシュ削除のためのパラメータ(ランダムな数字)が画像パスの末尾追加さるが、つけたくない場合は以下のように指定。
asset_cache_buster :none
Sassのコンパイル時に Source Map の生成
Source Map(ソースマップ)とはコンパイルされたり圧縮された元の位置を教えてくれるファイルです。スタイルシートのデバッグをするときに、コンパイル後の CSS ファイルでなく Sass ファイルの場所を表示するようにすることができます。
Compass のバージョン:Compass 1.0.3 (Polaris) (2016年5月21日追記)
sourcemap = true
config.rb の例
# Require any additional compass plugins here. # Set this to the root of your project when deployed: http_path = "/" css_dir = "css" sass_dir = "sass" images_dir = "images" javascripts_dir = "js" # You can select your preferred output style here (can be overridden via the command line): # output_style = :expanded or :nested or :compact or :compressed # To enable relative paths to assets via compass helper functions. Uncomment:相対パスにするには以下のコメントを外す relative_assets = true # To disable debugging comments that display the original location of your selectors. Uncomment: line_comments = false # If you prefer the indented syntax, you might want to regenerate this # project again passing --syntax sass, or you can uncomment this: # preferred_syntax = :sass # and then run: # sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass asset_cache_buster :none sourcemap = true
フォルダの監視やコンパイルを毎回行うのは面倒なので、Sass 同様バッチファイルを作成して簡単に作業できるようにする。
テキストエディタで拡張子が「bat」のファイルを作成して、以下のように記述してプロジェクトフォルダに配置しておく。
バッチファイルの例(compass_start.bat)
cd /d %~dp0 compass w
作業中の WordPress のテーマで Sass/Compass を使用する場合の例。
テーマのフォルダ内に「sass フォルダ」「css フォルダ」「config.rb」「compass_start.bat」を配置
config.rb のパス
# Set this to the root of your project when deployed: http_path = "/" css_dir = "css" sass_dir = "sass" images_dir = "images" javascripts_dir = "js"
compass_start.bat
cd /d %~dp0 compass w
sass フォルダの中に「style.scss」を配置。(コンパイルされると css フォルダの中に「style.css」が生成される)
functions.php で CSS フォルダ内の「style.css」を読み込むように設定して、header.php では読み込まない。
functions.php
function register_style() { wp_register_style('style', get_template_directory_uri().'/css/style.css'); } function add_stylesheet() { register_style(); wp_enqueue_style('style'); } add_action('wp_print_styles', 'add_stylesheet');
通常の style.css には WordPress にテーマを認識させるために以下のみを記述
/* Theme Name: テーマ名 Description: テーマ概要 Author: 著者 */
参考にしたサイト:Compass Compiling and WordPress Themes / css-tricks.com
Compass をインポートするには、以下のように指定して Sass に Compass をインポート。
Sass
@import "compass";
上記のように指定すると、以下の Compass のコアモジュールのミックスインなどの機能が使えるようになる。
Compass のコアモジュール
モジュールを個別にインポートすることも可能。
@import "compass/css3"; @import "compass/typography"; @import "compass/utilities";
以下の2つのモジュールはコアモジュールでインポートされないので、個別にインポート指定する必要がある。
@import "compass/layout"; @import "compass/reset";
Sass と Compass を使用できる環境ができたので、以下のようなフォルダ構成を作成してみた。
自動的に作成された ie.scss, print.scss, screen.scss, ie.css, print.css, screen.css は全て削除。
sass フォルダに以下の Sass ファイルを作成(Compass にはリセットや豊富なミックスインがあるが独自に作る場合も考えて)
_extend.scss (独自の @extend 用ファイル)
_mixin.scss (独自のミックスイン用ファイル)
_reset.scss (独自のリセット CSS)
_setting.scss (プロジェクト全体の設定用ファイル:変数などの定義)
style.scss (メインのスタイルと各 Sass ファイルのインポート用:このファイルのみ CSS として生成される)
style.scss の記述例(内容はない)
@import "setting"; //変数等の定義の読み込み(最初に記述) @import "compass/reset"; //Compass のリセットの読み込み @import "compass"; //Compass のコアモジュールの読み込み @import "extend"; @import "mixin"; .box { @include border-radius(10px 5px); }
出力される CSS
/* line 17, ../../../../Ruby/lib/ruby/gems/2.0.0/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font: inherit; font-size: 100%; vertical-align: baseline; } ・・・省略・・・ /* line 7, ../sass/style.scss */ .box { -webkit-border-radius: 10px 5px; -moz-border-radius: 10px 5px; -ms-border-radius: 10px 5px; -o-border-radius: 10px 5px; border-radius: 10px 5px; }
コメントが表示されているが、非表示にするには「config.rb」に以下を記述するか、その行のコメントアウトを外す
line_comments = false
Compass の設定変数を変更することで、ベンダープレフィックスやレガシーブラウザ対応の設定を変更することができる。
Removing Vendor Prefixes from Compass Stylesheets
Compass Variables(Compass の変数)
Compass Cross-Browser Support Configuration
追記:Compass の新しいバージョン:1.0.3 (Polaris) では以下の設定変数はサポートされていません。(2016年5月22日)
関連記事:「Compass のベンダープレフィックス」
初期値は以下のようになっているので、不要なベンダープレフィックスの値を「false」にすれば、そのベンダープレフィックスは出力されなくなる。
$experimental-support-for-mozilla : true !default; $experimental-support-for-webkit : true !default; $experimental-support-for-opera : true !default; $experimental-support-for-microsoft : true !default; $experimental-support-for-khtml : true !default;
Opera と Konquerer のベンダープレフィックスが不要な場合の例
$experimental-support-for-opera:false; $experimental-support-for-khtml:false; @import "compass/css3";
個々の設定に対して指定することもできるみたい。
.kadomaru { @include border-radius(4px); } $experimental-support-for-opera : false; .kadomaru2 { @include border-radius(4px); } $experimental-support-for-opera : true; .kadomaru3 { @include border-radius(5px); }
コンパイルされた CSS
.kadomaru { -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; -o-border-radius: 4px; border-radius: 4px; } .kadomaru2 { -webkit-border-radius: 4px; -moz-border-radius: 4px; -ms-border-radius: 4px; border-radius: 4px; } .kadomaru3 { -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; -o-border-radius: 5px; border-radius: 5px; }
以下は IE6/7 に対応するかどうかの設定変数(初期値は true:オン)
$legacy-support-for-ie: true;
IE のバージョンごとに指定することも可能。初期値は「$legacy-support-for-ie」の値が設定されている。
$legacy-support-for-ie6: $legacy-support-for-ie; $legacy-support-for-ie7: $legacy-support-for-ie; $legacy-support-for-ie8: $legacy-support-for-ie;
IE6/7 の対応をオフにする例
.foo { @include inline-block; } $legacy-support-for-ie: false; .bar { @include inline-block; }
コンパイルされた CSS
.foo { display: -moz-inline-stack; display: inline-block; vertical-align: middle; *vertical-align: auto; zoom: 1; *display: inline; } .bar { display: -moz-inline-stack; display: inline-block; vertical-align: middle; }
以下はその他の設定変数とその初期値
//Firefox 3.6 以下の対応をどうするか $legacy-support-for-mozilla: true; //Webkit の初期のグラデーションの記法をサポートするかどうか $support-for-original-webkit-gradients: true; //SVG を書き出すかどうか $experimental-support-for-svg: false; //CSS3PIE をサポートするかどうか $experimental-support-for-pie: false;
Compass の Sprites モジュールを使うと簡単に CSS スプライトが作成できる。
「images_dir」で指定した画像フォルダ(この例では images)の中に「icon」というフォルダを作成し、以下のようなアイコン画像(32×32)を用意。(この例では「icon」としているが、名前は何でもかまわない)
HTML
<ul> <li><a href="#" class="icon-home">home</a></li> <li><a href="#" class="icon-profile">profile</a></li> <li><a href="#" class="icon-download">download</a></li> <li><a href="#" class="icon-contact">contact</a></li> </ul>
CSS
li a { display: block; padding: 10px 0 0 40px; height: 32px; font-size: 14px; }
マジックインポートという機能で簡単に個々の画像を1枚の画像に結合して、background プロパティを書き出すことができる。
以下のように記述すると、画像フォルダ(images)に結合した画像が作成され、background プロパティも書き出される。結合した画像名は「フォルダ名-文字列.png」となる。
@import "icon/*.png";
コンパイルされた CSS
.icon-sprite { background: url('../images/icon-sf47ed3d192.png') no-repeat; }
注意点
画像の位置を書き出すには「all-フォルダ名-sprites」ミックスインを使用する。
@import "icon/*.png"; @include all-icon-sprites;
コンパイルされた CSS
.icon-sprite, .icon-contact, .icon-download, .icon-home, .icon-profile { background: url('../images/icon-sf47ed3d192.png') no-repeat; } .icon-contact { background-position: 0 -127px; } .icon-download { background-position: 0 -85px; } .icon-home { background-position: 0 0; } .icon-profile { background-position: 0 -42px; }
それぞれのクラスセレクタは「.フォルダ名-ファイル名」になっている。
リストの数が増えた場合でも、「icon」フォルダに画像を追加するだけでスプライト画像の再作成及び位置の再計算をしてくれる。画像が減る場合も同様。
スプライト画像の間隔
間隔を空けないと隣接したスプライト画像が見えてしまうような場合はスプライト画像の間隔を指定する。
設定変数「$フォルダ名-spacing」を定義することにより画像の間隔を設定できる。「@import」の前に記述する必要がある。
$icon-spacing: 10px; @import "icon/*.png"; @include all-icon-sprites;
この他にも以下のような設定変数がある。
:hover などの疑似クラスも簡単に作成できる。
これだけで、以下のような CSS が追加され、マウスオーバーで画像が切り替わる。
.icon-home:hover, .icon-home.home_hover, .icon-home.home-hover { background-position: 0 -126px; }
クリック時の :active 疑似クラスやリンクターゲット時の :target 疑似クラスも同様に、画像を用意して、画像名に「_active」「_target」を付けてコンパイルするだけで作成できる。