[CSS] Sassでイージングのmixinを作りたい – easing, scss, transition

2016/12/8

こんにちは。きんくまです。

Sassでイージングのscssのmixinが欲しかったです。
調べてみると、変数の方ですでに作られた方がいらっしゃいました。

>> SCSSで使うcubic-bezier値を変数化しておく

それで同じように mixin の方で作りました。

easing.scss

/*
 * Easing mixin 
 * cubic-bezier values are from http://easings.net/
 */

@mixin transition-base($property:all, $duration:1s, $delay:0s){
	transition-property: $property;
	transition-duration: $duration;
	transition-delay: $delay;
}

@mixin ease-in-sine(){
	transition-timing-function: cubic-bezier(0.47, 0, 0.745, 0.715);
}

@mixin ease-out-sine(){
	transition-timing-function: cubic-bezier(0.39, 0.575, 0.565, 1);
}

@mixin ease-in-out-sine(){
	transition-timing-function: cubic-bezier(0.445, 0.05, 0.55, 0.95);
}

@mixin ease-in-quad(){
	transition-timing-function: cubic-bezier(0.55, 0.085, 0.68, 0.53);
}

@mixin ease-out-quad(){
	transition-timing-function: cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

@mixin ease-in-out-quad(){
	transition-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955);
}

@mixin ease-in-cubic(){
	transition-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
}

@mixin ease-out-cubic(){
	transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
}

@mixin ease-in-out-cubic(){
	transition-timing-function: cubic-bezier(0.645, 0.045, 0.355, 1);
}

@mixin ease-in-quart(){
	transition-timing-function: cubic-bezier(0.895, 0.03, 0.685, 0.22);
}

@mixin ease-out-quart(){
	transition-timing-function: cubic-bezier(0.165, 0.84, 0.44, 1);
}

@mixin ease-in-out-quart(){
	transition-timing-function: cubic-bezier(0.77, 0, 0.175, 1);
}

@mixin ease-in-quint(){
	transition-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
}

@mixin ease-out-quint(){
	transition-timing-function: cubic-bezier(0.23, 1, 0.32, 1);
}

@mixin ease-in-out-quint(){
	transition-timing-function: cubic-bezier(0.86, 0, 0.07, 1);
}

@mixin ease-in-expo(){
	transition-timing-function: cubic-bezier(0.95, 0.05, 0.795, 0.035);
}

@mixin ease-out-expo(){
	transition-timing-function: cubic-bezier(0.19, 1, 0.22, 1);
}

@mixin ease-in-out-expo(){
	transition-timing-function: cubic-bezier(1, 0, 0, 1);
}

@mixin ease-in-circ(){
	transition-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.335);
}

@mixin ease-out-circ(){
	transition-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1);
}

@mixin ease-in-out-circ(){
	transition-timing-function: cubic-bezier(0.785, 0.135, 0.15, 0.86);
}

@mixin ease-in-back(){
	transition-timing-function: cubic-bezier(0.6, -0.28, 0.735, 0.045);
}

@mixin ease-out-back(){
	transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
}

@mixin ease-in-out-back(){
	transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
}

つかいかた

・transition-base(プロパティ, 時間, ディレイ)
・イージング(ease-out-sineとか)

の2つを別々に指定します。
時間とディレイは省略可能です。
まとめて一気にmixinとして指定するよりも、transition-timing-function のみをmixinにした方が柔軟性があったのでそちらにしました。

@import 'easing.scss';
.fade-enter-active{
    @include transition-base(all, 1s);
    @include ease-out-quint;
}
.fade-leave-active{
    @include transition-base(all, 1s, 0);
    @include ease-out-quart;
    padding-right:500px;
    opacity:0;
}
.fade-enter{
    opacity:0;
    padding-left:500px;
}

いまVue.jsでアニメーションさせたかったんですが、変数の方だとコンポーネントを読み込むたびに同じscssが埋め込まれちゃいそうだったので、mixinにしてみました。

>> Transition Effects (Vue.js)

いわゆるFlashっぽい感じの画面がエフェクトできりかわるコンテンツをJSのライブラリで作りたくて。
自前でHnadlebars, Backbone, jQueryを使ってTypeScriptで書いたりしてたんだけど、やっぱり最近のライブラリ(フレームワーク?)でやろうと思ってまして。
それでVue, React, Angular2 とお仕事でいろいろとデモを作ったりする機会もあり試してみたのですが、Vueがトランジションエフェクトをやるのに一番柔軟性がある感じでした。CSSだけでなくて、JavaScriptも組み合わせられるのがいいのかもしれない。

他のライブラリは、それぞれ適した用途があると感じたのですが、書くと長くなりそうなんで個人的な比較記事は今度書こうと思います。

あと上のは.vueファイルの中でこんな感じにstyleタグの中に書かれています。sassだとimportするのに、ファイル名の先頭に _ をつけて拡張子なしでやると思いますが、.vueファイルの中でやっているのでこうなりました。

<style lang="sass">
@import 'scss/easing.scss';
....
</style>

という感じです。

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

LINEスタンプ作りました!
毎日使える。とぼけたウサギ。LINEスタンプ販売中! 毎日使える。とぼけたウサギ

ページトップへ戻る