27
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Autoprefixer RailsでCSSのベンダープレフィックスをsprocketsに任せよう

Last updated at Posted at 2016-10-11

はじめに

CSS3のアニメーションなど新し目のものを使おうとするとベンダープレフィックス(-webkit-hogehoge)みたいなのをつけないといけない時があるよね?

ベンダープレフィックスをつけるとこんな感じで同じようなことを各ブラウザ向けに何度も書かなければならなくなってしまう。

  animation: spin 1s infinite linear;
  -webkit-animation: spin 1s infinite linear;

このベンダープレフィックスを意識していちいちこのプロジェクトで対応するブラウザにはこのCSSにはこのプレフィックスが必要なんて考えたりするのって生産性が悪いよね?

それにシンプルなコードにならない。

そこでベンダープレフィックスを自動でつけてくれるAutoprefixerなんだけど、基本的にGulpやWebpackなどフロントエンドのツールに組み込んで使うんだ。

そこで僕らのRailsでcssをminifyしてくれたりメッセージダイジェストをつけたりしてくれるSprocketsにAutoprefixerの機能をつけてくれたのがAutoprefixer Rails

検証環境

  • Rails: ver4.3.1
  • scssファイルをSprocketsでコンパイルしてcssへ変換

RailsにAutoprefixer Railsを組み込む方法

Gemfileに追記

Gemfileに下記を追記

gem 'autoprefixer-rails'

設定ファイルを追加

config/autoprefixer.yml

browsers:
  - "> 5%" #上位1%のブラウザを対象にする 
  - "last 2 versions" #下記以外は最新のメジャーブラウザ2バージョンのみサポート
  - "IE >= 11" # IEは11以上
  - "Android >= 4" # Androidは4系をサポート

上記の設定だと、上位5%以上のシェアのブラウザに対して、そのブラウザの過去2のバージョンをサポートするが、IEは11以上、Androidは4以上をサポートするということになる。
ここでIE >= 8と書くとIE8以上を対象にしてくれるというわけだ。(対象にしたくないけど)

パーセンテージ指定ところはどのブラウザ名なのか、各バージョンで見てるのか正直良くわからなかった
詳細は https://github.com/ai/browserslist を参考にしてもらいたい。

キャッシュの削除

キャッシュの削除が推奨されているので素直にクリアしといたほうが良さそう。
あまりトリッキーなことをしないでいるdevelopment環境のならたぶんやらなくても良さそう

bin/rake tmp:clear

コンパイル結果

assets:precompile したり、development環境で逐次コンパイルした結果以下のようになる。

コンパイル前のSCSS

.sample {
  animation: spin 1s infinite linear;

  @keyframes spin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
  }
}

コンパイル後のCSS

-webkitのベンダープレフィックスがついているものが追加されているのがわかる

.sample {
  -webkit-animation: spin 1s infinite linear;
          animation: spin 1s infinite linear;
}
@-webkit-keyframes spin {
  from {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg);
  }
  to {
    -webkit-transform: rotate(360deg);
            transform: rotate(360deg);
  }
}
@keyframes spin {
  from {
    -webkit-transform: rotate(0deg);
            transform: rotate(0deg);
  }
  to {
    -webkit-transform: rotate(360deg);
            transform: rotate(360deg);
  }
}
27
15
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
27
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?