LoginSignup
5
5

More than 5 years have passed since last update.

【Rails on Docker】CSSフレームワークをBootstrapからMaterializeに移行した

Last updated at Posted at 2019-04-05

Introduction

CSSフレームワークといえばBootstrapということで利用していたのですが、MaterializeというのがBootstrapライクにマテリアルUIが実装できるとあって気になっていまして、S-BRSTでリリース後に切り替えてみました。

Bootstrapをアンインストールして、Materializeをインストールするだけなのですが手こずったので手順をまとめておきます。

Materialize使いやすい!きれい!

前提

Gemfile
gem 'bootstrap', '~> 4.3.1'
gem 'jquery-rails'
app/assets/stylesheets/application.scss
@import "bootstrap";
app/assets/javascripts/application.js
//= require jquery3
//= require popper
//= require bootstrap

1. Bootstrapをアンインストール

GitHub - twbs/bootstrap-rubygem: Bootstrap 4 rubygem for Rails / Sprockets / Hanami / etcにそって設定した項目のうちMaterializeに不要な設定をきれいにします。jQueryは使いたいから残す。

Gemfile
gem 'jquery-rails'
app/assets/stylesheets/application.scss
app/assets/javascripts/application.js
  //= require jquery3

2. Materializeをインストール

MaterializeのインストールはGitHub - mkhairi/materialize-sass: Materializecss rubygem for Rails Asset Pipeline / Sprocketsを利用させていただきました。

Gemfile
gem 'materialize-sass', '~> 1.0.0'
gem 'jquery-rails'
app/assets/stylesheets/application.scss
@import "materialize";
app/assets/javascripts/application.js
//= require jquery3
//= require materialize

あとはGemfile.lockにBootstrapの情報が残ったままになってしまっているので一度からファイルにしてgemのインストールをし直します。

$ rm Gemfile.lock
$ touch Gemfile.lock
$ docker-compose build

以上でBootstrapからMaterializeへの移行完了です!

3. 【応用】Bootstrapのpadding/margin使いやすいですよね。

padding, marginの設定の簡単さはBootstrapの魅力でした。
Bootstrapでなくてもあの機能を使うために、mixinを自作します。(Bootstrapのソースを参考に)

app/assets/stylesheets/_spaces.scss
@each $prop, $prop_sub in (margin: m, padding: p) {
  @for $size from 0 through 5 {
    $rem: $size * 0.5;
    @each $direct, $direct_sub in (top: t, bottom: b, left: l, right: r) {
      .#{$prop_sub}#{$direct_sub}-#{$size} {
        #{$prop}-#{$direct}: #{$rem}rem!important;
      }
    }
    .#{$prop_sub}x-#{$size} {
      #{$prop}-right: #{$rem}rem!important;
      #{$prop}-left: #{$rem}rem!important;
    }
    .#{$prop_sub}y-#{$size} {
      #{$prop}-top: #{$rem}rem!important;
      #{$prop}-bottom: #{$rem}rem!important;
    }
    .#{$prop_sub}-#{$size} {
      #{$prop}: #{$rem}rem!important;
    }
  }

  @each $direct, $direct_sub in (top: t, bottom: b, left: l, right: r) {
    .#{$prop_sub}#{$direct_sub}-auto {
      #{$prop}-#{$direct}: auto!important;
    }
    .#{$prop_sub}x-auto {
      #{$prop}-left: auto!important;
      #{$prop}-right: auto!important;
    }
    .#{$prop_sub}y-auto {
      #{$prop}-top: auto;
      #{$prop}-bottom: auto;
    }
    .#{$prop_sub}-auto {
      #{$prop}-top: auto!important;
      #{$prop}-bottom: auto!important;
      #{$prop}-left: auto!important;
      #{$prop}-right: auto!important;
    }
  }
}
app/assets/stylesheets/application.scss
@import 'spaces';

これでMaterializeでもあの便利なpadding/margin設定が利用可能に!

Trouble Shooting

1. Bootstrapをuninstallするとアクセスできなくなる

コンテナは起動しているのに、アクセスできない...
docker-compose.ymlのrailsアプリ用のコンテナの起動コマンドを

docker-compose.yml
command: rails s

から

docker-compose.yml
command: bundle exec rails s -p 3000 -b '0.0.0.0'

に変更したところ解決!詳しくは...わからない...

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5