今回のエントリーでやりたいことは、以前に作成したサポートするブラウザのパラメータ設定から、不要なベンダープレフィックスを割り出して表示させないようにすることです。できる限りユーザーが触れるパラメータは少ないにこしたことはありませんよね。
以前に作成した、ベンダープレフィックスを自動で書きだしてくれる処理は以下のエントリーを参考にしてください。
「Sassを使えばbox-shadowのベンダープレフィックスコピペが要らない!」
「Sassで使用するベンダープレフィックスだけを出力する – @ifを使う」
この処理と以下のエントリーの、対応するブラウザのパラメータをうまく組み合わせたいと思います。
「Sassで未対応ブラウザへのCSS3使用は警告&自動修正!」
では今回も完成形から見てもらいたいと思います。
/*----------------------------------------------------------
ベンダープレフィックスの使用可否設定
----------------------------------------------------------*/
$NOTSUPPORT_SAFARI: false;
$NOTSUPPORT_CHROME: false;
$NOTSUPPORT_FIREFOX: false;
$NOTSUPPORT_IE: false;
$NOTSUPPORT_OPERA: false;
// サファリに対応する必要が無い場合
@if ((not $SUPPORT_MAC_SAFARI) and (not $SUPPORT_WIN_SAFARI)) { $NOTSUPPORT_SAFARI: true; }
// Chromeに対応する必要が無い場合
@if ((not $SUPPORT_MAC_CHROME) and (not $SUPPORT_WIN_CHROME)) { $NOTSUPPORT_CHROME: true; }
// FIREFOXに対応する必要が無い場合
@if ((not $SUPPORT_MAC_FIREFOX) and (not $SUPPORT_WIN_FIREFOX)) { $NOTSUPPORT_FIREFOX: true; }
// IEに対応する必要が無い場合
@if ((not $SUPPORT_WIN_IE6) and (not $SUPPORT_WIN_IE7)
and (not $SUPPORT_WIN_IE8) and (not $SUPPORT_WIN_IE9)) { $NOTSUPPORT_IE: true; }
// Operaに対応する必要が無い場合
@if ((not $SUPPORT_MAC_OPERA) and (not $SUPPORT_WIN_OPERA)) { $NOTSUPPORT_OPERA: true; }
$NOTSUPPORT_WEBKIT: false;
$NOTSUPPORT_MOZ: false;
$NOTSUPPORT_O: false;
$NOTSUPPORT_MS: false;
// webkitに対応する必要が無い場合
@if ($NOTSUPPORT_SAFARI and $NOTSUPPORT_CHROME) { $NOTSUPPORT_WEBKIT: true; }
// mozに対応する必要が無い場合
@if ($NOTSUPPORT_FIREFOX) { $NOTSUPPORT_MOZ: true; }
// oに対応する必要が無い場合
@if ($NOTSUPPORT_OPERA) { $NOTSUPPORT_O: true; }
// msに対応する必要がない場合
@if ($NOTSUPPORT_IE) { $NOTSUPPORT_MS: true; }
$USE_WEBKIT: (not $NOTSUPPORT_WEBKIT) !default; // CSS3利用時に-webkit-を使用するかどうか
$USE_MOZ: (not $NOTSUPPORT_MOZ) !default; // CSS3利用時に-mox- を使用するかどうか
$USE_MS: (not $NOTSUPPORT_MS) !default; // CSS3利用時に-ms- を使用するかどうか
$USE_O: (not $NOTSUPPORT_O) !default; // CSS3利用時に-o- を使用するかどうか
/*----------------------------------------------------------
使用するベンダープレフィックスをリストにする
- join関数を利用している理由について
joinを使用しなかった場合、リストをさらにリスト化して
変数を作成してしまうため、each文で取り出せなくなる
----------------------------------------------------------*/
$VENDER_PREFIX: "" !default;
@if ($USE_O) {
$VENDER_PREFIX: join(-o-, $VENDER_PREFIX);
}
@if ($USE_MS) {
$VENDER_PREFIX: join(-ms-, $VENDER_PREFIX);
}
@if ($USE_MOZ) {
$VENDER_PREFIX: join(-moz-, $VENDER_PREFIX);
}
@if ($USE_WEBKIT) {
$VENDER_PREFIX: join(-webkit-, $VENDER_PREFIX);
}
/*----------------------------------------------------------
使用するベンダープレフィックスだけを使ってプロパティを作成する
----------------------------------------------------------*/
@mixin createVenderPrefix($property, $value...) {
@each $prefix in $VENDER_PREFIX {
#{$prefix}#{$property}: $value;
}
}
だいぶ長いソースとなってしまいましたが、今回追加した処理はハイライト部分となります。やっていることは単純で、例えば「 FireFox に対応不要」とパラメータがなっていれば「 -moz- 」は使用しない、としているだけです。ベンダープレフィックスを出力するかどうかは、「Sassで使用するベンダープレフィックスだけを出力する – @ifを使う」にて作っていますので簡単に実装することができました。これでわざわざ対応ブラウザと、出力するベンダープレフィックスを別個に設定する必要がなくなりましたね。
