Stylusでスタイリングを始めましょう
Node.jsがインストールされていれば、Stylusのインストールは非常に簡単です。お使いのプラットフォーム用のバイナリを入手し、Nodeのパッケージマネージャであるnpmも含まれていることを確認してください。
次に、ターミナルで次のように入力します。
# npm
$ npm install stylus -g
# pnpm
$ pnpm add -g stylus
# npm
$ npm install stylus -g
# pnpm
$ pnpm add -g stylus
以下の機能や、下記に記載されている機能を持つnodejs用の表現力豊かなCSS言語が必要な場合は、詳細についてGitHubにアクセスしてください。
Stylus CLI
Stylusには、StylusをCSSに変換するためのstylus
実行ファイルが付属しています。
Usage: stylus [options] [command] [< in [> out]]
[file|dir ...]
Commands:
help [<type>:]<prop> Opens help info at MDC for <prop> in
your default browser. Optionally
searches other resources of <type>:
safari opera w3c ms caniuse quirksmode
Options:
-i, --interactive Start interactive REPL
-u, --use <path> Utilize the Stylus plugin at <path>
-U, --inline Utilize image inlining via data URI support
-w, --watch Watch file(s) for changes and re-compile
-o, --out <dir> Output to <dir> when passing files
-C, --css <src> [dest] Convert CSS input to Stylus
-I, --include <path> Add <path> to lookup paths
-c, --compress Compress CSS output
-d, --compare Display input along with output
-f, --firebug Emits debug infos in the generated CSS that
can be used by the FireStylus Firebug plugin
-l, --line-numbers Emits comments in the generated CSS
indicating the corresponding Stylus line
-m, --sourcemap Generates a sourcemap in sourcemaps v3 format
--sourcemap-inline Inlines sourcemap with full source text in base64 format
--sourcemap-root <url> "sourceRoot" property of the generated sourcemap
--sourcemap-base <path> Base <path> from which sourcemap and all sources are relative
-P, --prefix [prefix] Prefix all css classes
-p, --print Print out the compiled CSS
--import <file> Import stylus <file>
--include-css Include regular CSS on @import
-D, --deps Display dependencies of the compiled file
--disable-cache Disable caching
--hoist-atrules Move @import and @charset to the top
-r, --resolve-url Resolve relative urls inside imports
--resolve-url-nocheck Like --resolve-url but without file existence check
-V, --version Display the version of Stylus
-h, --help Display help information
Usage: stylus [options] [command] [< in [> out]]
[file|dir ...]
Commands:
help [<type>:]<prop> Opens help info at MDC for <prop> in
your default browser. Optionally
searches other resources of <type>:
safari opera w3c ms caniuse quirksmode
Options:
-i, --interactive Start interactive REPL
-u, --use <path> Utilize the Stylus plugin at <path>
-U, --inline Utilize image inlining via data URI support
-w, --watch Watch file(s) for changes and re-compile
-o, --out <dir> Output to <dir> when passing files
-C, --css <src> [dest] Convert CSS input to Stylus
-I, --include <path> Add <path> to lookup paths
-c, --compress Compress CSS output
-d, --compare Display input along with output
-f, --firebug Emits debug infos in the generated CSS that
can be used by the FireStylus Firebug plugin
-l, --line-numbers Emits comments in the generated CSS
indicating the corresponding Stylus line
-m, --sourcemap Generates a sourcemap in sourcemaps v3 format
--sourcemap-inline Inlines sourcemap with full source text in base64 format
--sourcemap-root <url> "sourceRoot" property of the generated sourcemap
--sourcemap-base <path> Base <path> from which sourcemap and all sources are relative
-P, --prefix [prefix] Prefix all css classes
-p, --print Print out the compiled CSS
--import <file> Import stylus <file>
--include-css Include regular CSS on @import
-D, --deps Display dependencies of the compiled file
--disable-cache Disable caching
--hoist-atrules Move @import and @charset to the top
-r, --resolve-url Resolve relative urls inside imports
--resolve-url-nocheck Like --resolve-url but without file existence check
-V, --version Display the version of Stylus
-h, --help Display help information
STDIOコンパイルの例
stylus
は*stdin*から読み取り、*stdout*に出力します。例えば
$ stylus --compress < some.styl > some.css
$ stylus --compress < some.styl > some.css
ターミナルでStylusを試してみましょう。以下に入力して、__EOF__
のためにCTRL-D
を押してください。
$ stylus
body
color red
font 14px Arial, sans-serif
$ stylus
body
color red
font 14px Arial, sans-serif
ファイルのコンパイル例
stylus
はファイルとディレクトリも受け付けます。例えば、css
という名前のディレクトリは、同じディレクトリに.css
ファイルをコンパイルして出力します。
$ stylus css
$ stylus css
以下は、./public/stylesheets
に出力します。
$ stylus css --out public/stylesheets
$ stylus css --out public/stylesheets
または、いくつかのファイル
$ stylus one.styl two.styl
$ stylus one.styl two.styl
開発目的では、生成されたCSSでStylusのファイル名と行番号を示すコメントを生成するために、linenos
オプションを使用できます。
$ stylus --line-numbers <path>
$ stylus --line-numbers <path>
または、Firebug用のFireStylus拡張機能を使用する場合はfirebug
オプションを使用します。
$ stylus --firebug <path>
$ stylus --firebug <path>
クラスのプレフィックス
stylus
実行ファイルは、指定された[プレフィックス]
で--prefix
オプションを使用することで、生成されたすべてのスタイルにプレフィックスを付ける方法を提供します。
$ stylus --prefix foo-
$ stylus --prefix foo-
このコードで使用すると
.bar
width: 10px
.bar
width: 10px
以下が得られます。
.foo-bar {
width: 10px;
}
.foo-bar {
width: 10px;
}
すべてのクラスには、挿入、拡張などを含め、プレフィックスが付けられます。
CSSの変換
CSSを簡潔なStylus構文に変換したい場合は、--css
フラグを使用します。
stdio経由
$ stylus --css < test.css > test.styl
$ stylus --css < test.css > test.styl
同じベース名の.styl
ファイルを出力します。
$ stylus --css test.css
$ stylus --css test.css
特定の宛先に出力します。
$ stylus --css test.css /tmp/out.styl
$ stylus --css test.css /tmp/out.styl
CSSプロパティのヘルプ
OS Xでは、stylus help <prop>
を実行すると、デフォルトのブラウザが開き、指定された<prop>
のヘルプドキュメントが表示されます。
$ stylus help box-shadow
$ stylus help box-shadow
インタラクティブシェル
Stylus REPL(Read-Eval-Print-Loop)または「インタラクティブシェル」を使用すると、ターミナルから直接Stylus式を試すことができます。
これは式でのみ機能します。セレクタなどではありません。シンプルに使用するには、-i
または--interactive
フラグを追加します。
$ stylus -i
> color = white
=> #fff
> color - rgb(200,50,0)
=> #37cdff
> color
=> #fff
> color -= rgb(200,50,0)
=> #37cdff
> color
=> #37cdff
> rgba(color, 0.5)
=> rgba(55,205,255,0.5)
$ stylus -i
> color = white
=> #fff
> color - rgb(200,50,0)
=> #37cdff
> color
=> #fff
> color -= rgb(200,50,0)
=> #37cdff
> color
=> #37cdff
> rgba(color, 0.5)
=> rgba(55,205,255,0.5)
インポート内の相対URLの解決
デフォルトでは、Stylusはインポートされた.styl
ファイルのURLを解決しません。したがって、url("baz.png")
を持つbar/bar.styl
を@import "bar/bar.styl"
で持つfoo.styl
があった場合、結果のCSSでもurl("baz.png")
になります。
ただし、--resolve-url
(または単に-r
)オプションを使用することで、この動作を変更して、結果のCSSでurl("bar/baz.png")
を取得できます。
依存関係の一覧表示
--deps
(または単に-D
)フラグを使用して、コンパイルされたファイルの依存関係の一覧を取得できます。
たとえば、test.styl
があるとします。
@import 'foo'
@import 'bar'
@import 'foo'
@import 'bar'
そしてfoo.styl
内
@import 'baz'
@import 'baz'
実行
$ stylus --deps test.styl
$ stylus --deps test.styl
インポートパスのリストが表示されます
foo.styl
baz.styl
bar.styl
foo.styl
baz.styl
bar.styl
現在、これは動的に生成されたパスでは機能しないことに注意してください。.
プラグインの活用
この例では、nib Stylusプラグインを使用して、そのCLIの使用法を説明します。
linear-gradient()
関数を使用するためにnibをインポートする次のStylusがあるとします。
@import 'nib'
body
background: linear-gradient(20px top, white, black)
@import 'nib'
body
background: linear-gradient(20px top, white, black)
stdio経由でstylus(1)
を使用してレンダリングする最初の試みは次のようになります。
$ stylus < test.styl
$ stylus < test.styl
(Stylusはnibの場所を知らないため)次のエラーが発生します。
Error: stdin:3
1|
2|
> 3| @import 'nib'
4|
5| body
6| background: linear-gradient(20px top, white, black)
Error: stdin:3
1|
2|
> 3| @import 'nib'
4|
5| body
6| background: linear-gradient(20px top, white, black)
Stylus APIを提供するだけのプラグインの場合は、Stylus検索パスへのパスを追加できます。それには、--include
または-I
フラグを使用します。
$ stylus < test.styl --include ../nib/lib
$ stylus < test.styl --include ../nib/lib
以下に出力結果を示します。(お気づきかもしれませんが、gradient-data-uri()
とcreate-gradient-image()
の呼び出しはリテラルとして出力されています。これは、プラグインがJavaScript APIを提供する場合、ライブラリのパスを公開するだけでは不十分なためです。ただし、純粋なStylus nib関数のみを使用したい場合は、問題ありません。)
body {
background: url(gradient-data-uri(create-gradient-image(20px, top)));
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #000));
background: -webkit-linear-gradient(top, #fff 0%, #000 100%);
background: -moz-linear-gradient(top, #fff 0%, #000 100%);
background: linear-gradient(top, #fff 0%, #000 100%);
}
body {
background: url(gradient-data-uri(create-gradient-image(20px, top)));
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #000));
background: -webkit-linear-gradient(top, #fff 0%, #000 100%);
background: -moz-linear-gradient(top, #fff 0%, #000 100%);
background: linear-gradient(top, #fff 0%, #000 100%);
}
そこで、必要なのは--use
または-u
フラグを使用することです。これは、nodeモジュールへのパス(.js
拡張子の有無にかかわらず)を期待します。これはモジュールをrequire()
し、関数がmodule.exports
としてエクスポートされることを期待し、その関数はstyle.use(fn())
を呼び出してプラグインを公開します(そのjs関数などを定義します)。
$ stylus < test.styl --use ../nib/lib/nib
$ stylus < test.styl --use ../nib/lib/nib
期待どおりの結果が得られます
body {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAUCAYAAABMDlehAAAABmJLR0QA/wD/AP+gvaeTAAAAI0lEQVQImWP4+fPnf6bPnz8zMH358oUBwkIjKJBgYGNj+w8Aphk4blt0EcMAAAAASUVORK5CYII=");
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #000));
background: -webkit-linear-gradient(top, #fff 0%, #000 100%);
background: -moz-linear-gradient(top, #fff 0%, #000 100%);
background: linear-gradient(top, #fff 0%, #000 100%);
}
body {
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAUCAYAAABMDlehAAAABmJLR0QA/wD/AP+gvaeTAAAAI0lEQVQImWP4+fPnf6bPnz8zMH358oUBwkIjKJBgYGNj+w8Aphk4blt0EcMAAAAASUVORK5CYII=");
background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #000));
background: -webkit-linear-gradient(top, #fff 0%, #000 100%);
background: -moz-linear-gradient(top, #fff 0%, #000 100%);
background: linear-gradient(top, #fff 0%, #000 100%);
}
プラグインに引数を渡す必要がある場合は、--with
オプションを使用します。--with
は任意の有効なjavascript式を評価し、その値をプラグインに渡します。例えば
$ stylus < test.styl --use ../node_modules/autoprefixer-stylus --with "{ browsers: ['ie 7', 'ie 8'] }"
$ stylus < test.styl --use ../node_modules/autoprefixer-stylus --with "{ browsers: ['ie 7', 'ie 8'] }"