[Sass & Compass] CSS Lint の vendor prefix WARNING から Can I use, Autoprefixer, Compass の確認まで

CSS Lint で怒られたので確認してみます。

[markdown]
## 状況

確認すると Compass の background-image mixin が該当箇所でした。

> * [Compass Images | Compass Documentation](http://compass-style.org/reference/compass/css3/images/)

CSS は下記のとおり。

“`css
.linear–gradient {
background-image: url(‘data:image/svg+xml;base64,PD94bWw…==’);
background-size: 100%;
background-image: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #0083f6), color-stop(100%, #5dcdfa));
background-image: -moz-linear-gradient(left, #0083f6, #5dcdfa);
background-image: -webkit-linear-gradient(left, #0083f6, #5dcdfa);
background-image: linear-gradient(to right, #0083f6, #5dcdfa);
}
“`

CSS Lint は、Opera 11.1+ 用の vendor-prefix がないという警告。

“`prettyprinted
[L375:C1]
WARNING: Missing vendor-prefixed CSS gradients for Opera 11.1+. When using a vendor-prefixed gradient, make sure to use them all. (gradients) Browsers: All
“`

out of date と表示されていたりでメンテナンス止まっているんでしょうか。

> * [CSSLint/csslint](https://github.com/CSSLint/csslint)

“`prettyprinted
% csslint –version
v0.10.0
“`

csslint の vendor-prefix は、どうやって判定してるんだろ?

## Can I use で確認する

Can I use で確認してみると、今は vendor-prefix は webkit のみのようですね。

> * [Can I use… Support tables for HTML5, CSS3, etc](http://caniuse.com/#feat=css-gradients)

プロジェクトには Compass を使っています。

“`prettyprinted
% compass –version
Compass 1.0.1 (Polaris)
“`

Compass も Version 1.0 リリース以降から Can I use のデータを使うようになったようなので、Opera 11.1+ の vendor-prefix が出力されていないのは意図通りです。

> * [Compass History | Compass Documentation](http://compass-style.org/CHANGELOG/)
> * [Compass 1.0 is Released! | Compass Documentation](http://compass-style.org/blog/2014/08/15/omg-compass-1-0/)
> * [Compass 1.0リリースノート 和訳 – Qiita](http://qiita.com/ariyo13/items/edb5f40bc51025d1709e)

但し、他の vendor-prefix は不要かもしれないですね。

## Autoprefixer CLI を利用する

Autoprefixer をかけてみます。
CSS の vendor-prefix を Can I use のデータを元に調整してくれます。

> * [postcss/autoprefixer](https://github.com/postcss/autoprefixer)

CLI 版をインストールします。

“`prettyprinted
% npm install –global autoprefixer
/usr/local/bin/autoprefixer -> /usr/local/lib/node_modules/autoprefixer/autoprefixer
autoprefixer@5.1.0 /usr/local/lib/node_modules/autoprefixer
├── fs-extra@0.16.3 (jsonfile@2.0.0, rimraf@2.2.8, graceful-fs@3.0.5)
├── postcss@4.0.3 (js-base64@2.1.7, source-map@0.2.0)
└── autoprefixer-core@5.1.0 (num2fraction@1.0.1, browserslist@0.2.0, caniuse-db@1.0.30000060)
“`

実行します。

“`prettyprinted
% autoprefixer *.css
“`

CSS を確認すると、やはり -moz- が削除されていました。

“`prettyprinted
background-image: -moz-linear-gradient(left, #0083f6, #5dcdfa);
“`

Autoprefixer と Compass の -moz- を削除するかしないかという振る舞いの違いは、ディフォルト設定の閾値が違うからのようですね。

## Autoprefixer

Autoprefixer は、下記に設定方法が記載されていて、内部的には [ai/browserslist](https://github.com/ai/browserslist) というものが使われているとか。

> * [postcss/autoprefixer](https://github.com/postcss/autoprefixer)

こんなコマンドで状況を確認できました。

“`prettyprinted
% autoprefixer –info
Browsers:
Chrome for Android: 40
UC for Android: 9.9
Android: 4.4.3-4.4.4, 4.4, 4.2-4.3
Chrome: 40, 39, 38, 37
Firefox: 35, 34, 33, 31
IE: 11, 10, 9, 8
IE Mobile: 11, 10
iOS: 8.1, 8, 7.0-7.1
Opera Mini: 5.0-8.0
Opera: 27, 26, 12.1
Safari: 8, 7.1
At-Rules:
@keyframes: webkit
@viewport: ms, o
@resolution: webkit
:
“`

## Compass

Compass では、下記で設定できるようです。

> * [Compass Cross-Browser Support Configuration | Compass Documentation](http://compass-style.org/reference/compass/support/)

`$browser-minimum-versions` を Autoprefixer に揃えてみたりしたのですが、手元のプロジェクトでうまくコントロールできませんでした。

このあたりは別途確認しました。

> * [Compass V1.0 Cross-Browser Support Configuration の書式を確認する – Qiita](http://qiita.com/DriftwoodJP/items/dac0c2dc956348a9a4d2)

## 補遺

> * [Autoprefixerによる、CSS3の管理|Web Design KOJIKA17](http://kojika17.com/2014/01/autoprefixer.html)
[/markdown]