以前に@starting-styleを使用する記事でフェードのアニメーションを実装しましたが、その実装をSassのmixinで使えるようにしてみます。
サンプルコード
mixinは以下の通りで、フェードの初期設定(非表示の状態)とフェードインの設定の2つ用意しています。
@mixin fade-init($duration: 0.3s, $easing: ease-out) {
display: none;
opacity: 0;
transition:
opacity $duration $easing,
display $duration allow-discrete;
}
@mixin fade($display: block) {
display: $display;
opacity: 1;
@starting-style {
opacity: 0;
}
}
以下のように使用します。
.sample {
@include fade-init;
&.is-open {
@include fade;
}
}
CSSは以下のように生成されます。
.sample {
display: none;
opacity: 0;
transition: opacity 0.3s ease-out, display 0.3s allow-discrete;
}
.sample.is-open {
display: block;
opacity: 1;
}
@starting-style {
.sample.is-open {
opacity: 0;
}
}
フェードインで表示した際のdisplayをblock以外にしたい場合、引数で設定できます。
.sample {
@include fade-init;
&.is-open {
@include fade(flex);
}
}
CSSを生成すると、以下のように変更されました。
.sample {
display: none;
opacity: 0;
transition: opacity 0.3s ease-out, display 0.3s allow-discrete;
}
.sample.is-open {
display: flex;
opacity: 1;
}
@starting-style {
.sample.is-open {
opacity: 0;
}
}
コメントが承認されるまで時間がかかります。