PostCSSでCSSを変換する
1年ほど前に作った開発環境のテンプレートのようなものを最近使う機会があったのだけど、いざ使ってみようとモジュールをインストールしたらgulp-sassが動作しなかった。
どうもバージョンが古いせいだったようなのだけど、自分も他の人もSCSSのすべての機能を使いこなしているわけではない(というか、ほとんどネストくらいしか使っていない)ので、node-sassと違ってバイナリをコンパイルする必要がないPostCSSを使ったほうが良いのではないかと思って使ってみることにした。
最初に必要なモジュールをインストールする。
$ npm install postcss postcss-cli postcss-import postcss-nested autoprefixer
とりあえずimportとnestedとautoprefixerをインストールした。
postcss.jsonというファイル名で設定ファイルを書く。
{ "use": [ "postcss-import", "postcss-nested", "autoprefixer" ], "input": "index.css", "output": "output.css", "local-plugins": true, "autoprefixer": { "browsers": "last 2 version" } }
useには使用するモジュールを書く必要があるのだけど、importを使用する場合は先頭に書く必要がある。あとはCSSをいくつか書く。
clearfix.cssというファイル名でCSSを書く。
.clearfix::after { content: ""; clear: both; display: block; }
index.cssというファイル名でCSSを書く。
@import "./clearfix.css"; /* comment */ div { opacity: 0.5; border-radius: 5px; animation: anime 1s linear 0s; &.div { opacity: 1; } } @keyframes anime { from { transform: translateY(0px); } to { transform: translateY(100px); } }
これらをpostcss-cliから変換する。
$ ./node_modules/.bin/postcss --config postcss.json
変換されたoutput.cssは以下の通り。
.clearfix::after { content: ""; clear: both; display: block; } /* comment */ div { opacity: 0.5; border-radius: 5px; -webkit-animation: anime 1s linear 0s; animation: anime 1s linear 0s; } div.div { opacity: 1; } @-webkit-keyframes anime { from { -webkit-transform: translateY(0px); transform: translateY(0px); } to { -webkit-transform: translateY(100px); transform: translateY(100px); } } @keyframes anime { from { -webkit-transform: translateY(0px); transform: translateY(0px); } to { -webkit-transform: translateY(100px); transform: translateY(100px); } }
今回はファイル名を指定したけれど、ディレクトリを指定することもできるようなので用途に応じて使用方法を変えれば良いと思う。
変換も早いし、よほどnode.jsが古くなければ動作すると思うのでnode-sassを使う必要がなくなるかな、と思った。













