はじめに
みなさんは普段からSassを使われていますか?
昨年公式から@import
の廃止が発表され、サポート終了まで1年を切りました。
えっ?まだなにもしていない!という方もいらっしゃるかと思い、@import
に変わる@use
とはどんなものなのか、どう使うのかをご紹介していきます。
@import
まずこれまで使用してきた@import
について軽くおさらいします。
sassでは機能ごとファイルを分割して、style.scss
内で読み込むことで、まとめて1つのcssファイルとしてコンパイルできます。
しかし、@import
使った場合では定義された変数・mixin・関数(以下、メンバーとします)が、インポートされたすべてのスタイルシートで利用できるためどこで定義されていたのかがわからなくなってしまいます。
つまり、先に呼び出してさえいれば、この後参照するファイルすべてで呼び出しが可能ということです。
@use
@useが@importに代わるなら、置き換えればいいだけじゃないの??
と考える方もいらっしゃるかと思いますが、@use
は呼び出したファイルの中でしか読み込んだ内容を参照することができません。
また、読み込んだ内容を使用する箇所でも、どのファイルを参照するのか明記しなければなりません。
これは名前空間を利用することで解決できます。
名前空間
// @useを使用する際、名前空間を “as ~” で指定する
@use "config/variables" as v;
// プロパティの値に “名前空間.使用するメンバー” と書くことで呼び出せる
color: v.$main-color;
as
以下で指定している名前空間名は省略することもできます。
// 名前空間は省略も可能。その場合参照したファイル名が名前空間となる
@use "config/variables";
color: variables.$main-color;
@importと@useの比較
では実際に@import
と@use
ではどのように異なるのか見ていきましょう。
@importのとき
$bg-color: #137cbd;
$text-color: #ffffff;
@mixin button {
width: 300px;
height: 45px;
background-color: $bg-color;
color: $text-color;
font-size:16px;
}
@import "foundation/variables";
@import "foundation/mixin";
これらをコンパイルします。
button {
width: 300px;
height: 45px;
background-color: #137cbd;
color: #ffffff;
font-size:16px;
}
先述したとおり、@import
ではすべてのスタイルシートで参照が可能なため、style.scss
にインポートすることで、すべて参照されています。
@useのとき
$bg-color: #137cbd;
$text-color: #ffffff;
_mixin.scss
で_variables.scss
を参照するために@use
を記載します。
@use "variables" as v;
@mixin button {
width: 300px;
height: 45px;
background-color: v.$bg-color;
color: v.$text-color;
font-size:16px;
}
sytle.scss
では、_mixin.scss
のみを参照します。
@use "foundation/mixin" as m;
div {
@include m.button;
}
このように各ファイルに ”どのファイルの”、”なにを” 使うかを明記する必要があります。
div {
width: 300px;
height: 45px;
background-color: #137cbd;
color: #ffffff;
font-size:16px;
}
記述しなければならないものが増えてはしまいますが、
参照しているファイルがプロパティを見ればすぐにわかる点では運用がしやすいと思います。
プライベートメンバー
定義したファイル内でしか使えないメンバーも作成できます。
変数名の先頭に-(ハイフン)
または_(アンダースコア)
を付けます。
$-radius: 3px;
div {
@include m.button;
border-radius: $-radius;
}
div {
width: 300px;
height: 45px;
background-color: #137cbd;
color: #ffffff;
font-size:16px;
border-radius: 3px;
}
_mixin.scss
内のbutton
を呼び出した後のborder-radius
にプライベートメンバーの値が設定されました。
$-radius: 5px;
@mixin rounding {
border-radius: $-radius;
}
_parts.scss
内で設定した$-radius
は
@use "foundation/parts" as p;
div {
@include p.rounding;
// これはエラーになる
padding: 5px + rounding.$-radius;
}
同じ_parts.scss
内で定義したmixin
には値が入りますが、_parts.scss
外のファイルでは参照されません。
Dart sass
ここまで意気揚々と@use
についてお話してきましたが、そもそも@use
を使用するにはDart Sassを使用するしかありません。
今後LibSass(node-sass)でも実装予定となっておりますが、この点ご注意ください。
今回VSCodeで実装してみましたが、プラグインのDartJS Sass Compiler and Sass Watcherを利用しました。
↓こちらが大変わかりやすかったです。
おわりに
いかがでしたでしょうか。
実際の@import
の廃止については、ユーザーのみなさんが移行完了した時に行う、と公式ドキュメントは言っています。
これに甘んじずみなさんの移行が完了するとともに、この記事が少しでもお役に立てたら嬉しいです。