軽量CSSフレームワークPure.cssで異なる単位のグリッドを作成する

概要

最近、Webサイトを構築するときに Pure.css というCSSフレームワークを使用している。 Pure.cssはとても軽いCSSフレームワークで、提供されている機能は少ないが使い勝手がとてもいいので重宝している。

CSSフレームワークを使ったレイアウトの基本はグリッドシステムを使うことだと思うのだが、提供されているグリッドではどうにもならない事態が発生した。 Pure.cssでは任意の単位のグリッドを生成できるプログラム rework-pure-grids を提供してくれているので、これを使って自分の好きなグリッドを生成することにした。

ことの発端

4:3の画像が3枚あるとする。 1つは横長、2つが縦長である。 これを、高さを揃えて横に3枚並べたい。

Pure.cssはブラウザの横幅を1として1/5ベースと1/24ベースのグリッドを提供してくれるのだが、上記の要求はこのグリッドでは満たせない。 横長の画像の幅をA、縦長の画像の幅をBとすると B = (9A)/16 となるため、1/9ベースのグリッドが欲しくなった。

手順

rework-pure-grids はNode.jsを使用するため、Node.jsを導入する。 Macの場合はHomebrewでnodebrewを導入し、最新安定版を導入すれば良い。

% brew install nodebrew

Homebrewで入れてもPATHが通らないので、 ~/.bashrc などにPATHの設定を追加する。

...
export PATH=$HOME/.nodebrew/current/bin:$PATH
...

つづいてNode.js本体をインストールする。 インストール可能なバージョンを確認。

% nodebrew ls-remote

ここで io@ というのが付いていないやつが安定版。 だと思う。 この記事を書いている現時点での最新版は5.1.0。

% nodebrew install-binary v5.1.0

2015/11/27追記ここから

Failed to create the file などというエラーになることがある。

fetch: http://nodejs.org/dist/v5.1.0/node-v5.1.0-darwin-x64.tar.gz
Warning: Failed to create the file
Warning: /Users/pman0214/.nodebrew/src/v5.1.0/node-v5.1.0-darwin-x64.tar.gz: No such file or directory
                                                                           0.0%
 curl: (23) Failed writing body (0 != 2493)

この場合には、今表示されたディレクトリを手動で作成してやればいい。

% mkdir -p /Users/pman0214/.nodebrew/src/v5.1.0

2015/11/27追記ここまで

Node.jsの本家サーバが遅いと時間がかかるかもしれない。

インストールしたバージョンを使う宣言をする。

% nodebrew use v5.1.0

これでNode.jsが使えるようになった。

Node.jsの使い方がイマイチよく分かっていないのだが、とりあえず、 rework-pure-grids の説明にある通り reworkrework-pure-grids をインストールする。

% npm install rework rework-pure-grids

これで node_modules というディレクトリが作成され、その中に reworkrework-pure-grids 、依存するパッケージがインストールされる。

ここまで来たらグリッドを生成するための簡単なプログラムを書く。 rework-pure-grids にある書き方を参考にして、今回は1/9ベースのグリッドを生成するプログラムを書く。 ここでは app.js という名前で保存することにする。

var sys = require('sys');
var rework    = require('rework'),
    pureGrids = require('rework-pure-grids');

// Creates a 9ths-based Grid.
var css = rework('').use(pureGrids.units(9, {
    mediaQueries: {
        sm: 'screen and (min-width: 35.5em)',
        md: 'screen and (min-width: 48em)',
        lg: 'screen and (min-width: 64em)',
        xl: 'screen and (min-width: 80em)'
    }
})).toString();

sys.print(css);

これを実行するとグリッド用のCSSが出力されるので、ファイルに保存する。

% node app.js > pure-grid-1-9.css

ちなみに sys を使うのは古いやり方だというWarningが出た。 が、新しいやり方は調べていない・・・。

Pure.cssでは、例えば1/5幅の div を作るときに <div class="pure-u-1-5"> などと書く。 生成した pure-grid-1-9.css をHTMLファイルで読み込めば、この書き方と同じように <div class="pure-u-1-9"> などと書けるようになる。 CSSファイルを小さくしたいなら tr コマンドで改行とスペースを削除すればいい。