skel.jsでレスポンシブWebデザイン対応のWebサイトを構築する
背景
skel.jsはレスポンシブなWebサイトを構築する為の軽量(19KB)なフロントエンドフレームワークです。
jQueryなどの他のスクリプトに依存することなくグリッドシステムを利用でき、表示サイズごとのbreakpointの設定も簡単です。
また、reset cssやbox-modelなどの有用なCSSのショートカットも用意されています。
準備
今回はmiddlemanをベースにskel.jsを扱ってみます。
bundlerでrubyプロジェクトの作成を開始します。
bundle init
Gemfileにmiddleman
を追加し、
gem 'middleman'
middleman
をインストール。
そしてmiddlemanプロジェクトを初期化します。
bundle install --path vendor/bundle
bundle exec middleman init .
middleman初期化時にGemfileが上書きされるので、
update Gemfile
run bundle install from "."
Could not find gem 'ruby18_source_location (>= 0) ruby' in the gems available on this machine.
Run `bundle install` to install missing gems.
create .gitignore
create config.rb
create source/index.html.erb
create source/layouts/layout.erb
create source/stylesheets
create source/stylesheets/all.css
create source/stylesheets/normalize.css
create source/javascripts
create source/javascripts/all.js
create source/images
create source/images/background.png
create source/images/middleman.png
改めて依存関係をインストールします。
bundle
skel.jsのインストール
skel.jsをダウンロードし、javascriptディレクトリに配置するだけでインストールは完了です。
skel.jsの設定
今回はcoffee scriptで設定を記述してみます。
javascriptディレクトリにskel.config.coffee
というファイルを作成します。
skel.config.coffee
window._skel_config=
prefix: "/assets/stylesheets/style"
resetCSS: true
boxModel: "border"
grid:
gutters: 30
breakpoints:
wide:
range: "1200-"
containers: 1140
grid:
gutters: 50
narrow:
range: "641-1199"
containers: 960
mobile:
range: "-640"
viewportWidth: 640
containers: "fluid"
grid:
collapse: true
breakpoints
は任意のブレイクポイントの名前と、それに対してのオプションを指定することが出来ます。
ここではwide
, narrow
, mobile
と3つのブレイクポイントを作り、それぞれに切り替えの条件を指定しています。
prefix
はCSSをskel.jsから動的に読み込む場合に指定します。(デフォルトは“style"であり、無効にするにはnullを指定します)
これはbreakpoints
と連動していて、たとえばmobile
時では/assets/stylesheets/style.css
と/assets/stylesheets/style-mobile.css
が読み込まれます。
もちろん個別のstylesheetsの読み込みを抑制することも可能です。
resetCSS
オプションを有効にすることで、skel.jsにビルトインされているReset CSSが自動的に読み込まれます。
他にもnormalizeCSS
も用意されています。
boxModel
には"border”, “content”, “margin”, “padding"のいずれかを指定できます。
使いかた
設定ファイルとskel.jsをまとめて読み込むためにall.coffee
を作成し、
all.coffee
#= require 'skel.config'
#= require 'skel.js'
layoutファイルで読み込みます
layout.haml
!!!
%html
%head
%meta{:charset => "utf-8"}
%meta{:name => "viewport", :content => "width=device-width, user-scalable=no"}
%title= current_page.data.title || "Title"
= javascript_include_tag "all"
%noscript
= stylesheet_link_tag "skel-noscript.css", "style", "style-wide"
%body{:class => page_classes}
.container
= yield
CSSはskel.jsから動的に読み込みますが、jsが無効化されている場合に備えてnoscriptの中にjsが無効化されている場合に読み込みむCSSを指定します。
グリッドシステムを使う場合には<div class="row">
の内部に<div class="4u">
などと"数字+u"のクラスを作成するだけで、
カラム数12のグリッドに配置されます。
後は.row
, .4u
とそのまま用いてもよし、それらのクラスを元に自分でCSS拡張してもよしです。
まとめ
bootstrapなどを用いると、グリッドシステムの他にボタンをはじめとした様々なパーツをすぐに利用することが出来ます。
プログラマがとりあえず体裁を整えるために使うのは有効ですが、デザインが画一的になってしまう欠点もあります。
しかもbootstrapを元にデザインを変更しようとするのも手間がかかります。
デザインは自前で構築する場合にそのベースとしてレスポンシブルなデザインに対応した軽量フレームワークであるskel.jsを有効に活用できそうです。