「Material Design Lite」をRailsで使ってみる



まあ実際は前にも使ったことあるんだけど、今あるRailsのMaterial design関連のgemがイケてないので、今回は独自の方法でRailsで使えるように（自分が使いやすいように）組み込んでみたいと思います。

Material designに関してはこちらの記事とかで詳しい解説をしてくれているのでそちらを参照していただきたい。
[Google の新しいデザインガイドライン「Material Design」](http://dev.classmethod.jp/smartphone/android/google-material-design/)

Googleから公式に「Material Design Lite」（以下MDL）というCSSワイヤーフレームが公開されています。
[Material Design Lite](http://www.getmdl.io/)


#ファイル構成はどうなっているのか？

[LEGOに学ぶ！半永久的に使えるWebデザインの構成要素とデザインの目的とはいったい何なのか？というお話。](http://qiita.com/masamitsu-konya/items/96dbf1e22c8ea442cbd0)でも書いたけど、最近はデザインの構成要素について興味があるので、MDLのファイル構成がどうなってるかが気になった。

と思って調べたら、Bootstrapみたいに特に要素別にファイル分けてるわけでもなかった。。。
ってか普通にダウンロードするだけだと1枚にしてくれてるのかな？
まあそうか。sass使える環境にない人も多いだろうしね。

GitHub見てみよう。
ちゃんとCSSファイルが要素別に分かれてました。

####MDLのファイル構成

```
_color-definitions.scss
_functions.scss
_mixins.scss
_variables.scss
material-design-lite-grid.scss
material-design-lite.scss
styleguide.scss
template.scss
// - ここからコンポーネント --------------------
animation
badge
button
card
checkbox
data-table
footer
grid
icon-toggle
layout
list
menu
menu
palette
progress
radio
resets
ripple
shadow
slider
snackbar
spinner
switch
tabs
textfield
third_party
tooltip
typography
```


コンポーネントの各フォルダにはSCSSファイルと、必要なjsファイルが入ってる。
cssワイヤーフレーム、というよりはwebコンポーネント的な感じでまとめてあるのかな？

# CSSだけまとめてみた
今回はRailsのsassを使える環境のCSSワイヤーフレームとして使いたいので、CSSだけ抜き出してまとめてみた。

```
assets
└ stylesheets
  └ mdl
    ├ _color-definitions.scss
    ├ _functions.scss
    ├ _mixins.scss
    ├ _variables.scss
    ├ material-design-lite-grid.scss
    ├ material-design-lite.scss
    ├ styleguide.scss
    ├ template.scss
    ├ animation
      └ _animation.scss
    ├ components
      ├ _badge.scss
      ├ _button.scss
      ├ _card.scss
      ├ _data-table.scss
      ├ _grid.scss
      ├ _list.scss
      ├ _mega_footer.scss
      ├ _menu.scss
      ├ _mini_footer.scss
      ├ _progress.scss
      ├ _slider.scss
      ├ _snackbar.scss
      ├ _spinner.scss
      ├ _switch.scss
      ├ _tabs.scss
      ├ _textfield.scss
      └ _tooltip.scss
    ├ layout
      └ _layout.scss
    ├ resets
      ├ _h5bp.scss
      ├ _mobile.scss
      └ _resets.scss
    └ styles
      ├ _checkbox.scss
      ├ _icon-toggle.scss
      ├ _palette.scss
      ├ _radio.scss
      ├ _ripple.scss
      ├ _shadow.scss
      └ _typography.scss
```

こんな感じかな。。。
で、それぞれRailsのassetsフォルダにコピーした。

_slider.scssでなんかエラった。
`backgroud`の`radial-gradient`のところでエラってるっぽい。

```
       background: radial-gradient(circle closest-side,
       $range-color 0%,
       $range-color 37.5%,
       $range-faded-color 37.5%,
       $range-faded-color 100%);

```

けど、ちょっと解決方法わからなかったので`radial-gradient`の箇所だけコメントアウトした。

で、CSSはmdl直下にある`material-design-lite.scss`の各パーツのパスを変えてあげる。

```
// Variables and mixins
@import "variables";
@import "mixins";

// Resets and dependencies
@import "resets/resets";
@import "styles/typography";

// Components
@import "styles/palette";
@import "styles/ripple";
@import "animation/animation";
@import "components/badge";
@import "components/button";
@import "components/card";
@import "styles/checkbox";
@import "components/data-table";
@import "components/mega_footer";
@import "components/mini_footer";
@import "styles/icon-toggle";
@import "components/list";
@import "components/menu";
@import "components/progress";
@import "layout/layout";
@import "styles/radio";
@import "components/slider";
@import "components/snackbar";
@import "components/spinner";
@import "components/switch";
@import "components/tabs";
@import "components/textfield";
@import "components/tooltip";
@import "styles/shadow";
@import "components/grid";
```

#使えるのかな？
jsは特に変更しないと思うのでCDNから直で引っ張ってくる。
（ちなみにビューはslimで書いてます。）

```
script src="https://storage.googleapis.com/code.getmdl.io/1.0.6/material.min.js"
```

CSSは先ほど編集した`material-design-lite.scss`を読み込んでくれば良い。
![スクリーンショット 2015-12-21 12.31.04.png](https://qiita-image-store.s3.amazonaws.com/0/7942/3c13048c-0a2b-8549-8a3b-3e7a7bfedfe0.png "スクリーンショット 2015-12-21 12.31.04.png")

アイコンが効いてないけど、スタイルはなんとか読み込めたね。
あとはvariablesとかの値を変更して自分好みのスタイルに変更してイケば良いかな。