VuejsとNuxtjsのCSSトランジション
公開: 2022-03-10トランジションはCSSのモジュールであり、特定のCSSプロパティの値の間で段階的なトランジションを作成できます。 これらの遷移の動作は、タイミング関数、期間、およびその他の属性を指定することで制御できます。 アプリケーションやWebサイトでこれらのトランジションを使用すると、視覚的なエクスペリエンスが向上し、情報が画面に表示されたり画面から離れたりするときに、ユーザーの注意を引き付けて保持することがあります。 Can I Useによると、移行はほとんどのブラウザでサポートされていますが、InternetExplorerとSafariにはいくつかの小さな問題があります。
Vue.jsは、クライアント向けのWebアプリケーションとシングルページアプリケーション(SPA)を構築するためのオープンソースのJavaScriptフレームワークです。 このフレームワークの機能の1つは、アプリにシームレスにトランジションを追加し、ページまたはコンポーネントを切り替える機能です。このチュートリアルでは、その方法を説明します。
Nuxt.jsはJavaScriptフレームワークでもあり、Vue.js(およびフレームワークのフレームワークと呼ばれることもあります)の上に構築され、サーバー側のWebアプリケーション、静的に生成されたWebサイト、およびSPAを構築します。 これはVue.jsと同じように機能するため、Vue.jsを知っていれば、Nuxt.jsの使用を開始する際に多くの問題が発生することはありません。 Nuxt.jsには、アプリにトランジションを追加するための2つのプロパティが付属しています。このチュートリアルでは、それらについても説明します。
このチュートリアルには、Vue.jsまたはNuxt.jsの基本的な知識が必要です。 このチュートリアルのすべてのコードスニペットは、GitHubにあります。
移行とは何ですか?
オックスフォード辞書によると、遷移は次のように定義できます。
「2つのトピックまたはセクションを互いにスムーズに接続する文章の一節。
ある状態または状態から別の状態に変化するプロセスまたは期間。」
物理学の観点から、遷移は次のように定義されます。
「放射線の放出または吸収を伴う、ある量子状態から別の量子状態への原子、原子核、電子などの変化。」
これらの定義から、遷移とは何かについてのアイデアが得られます。 定義はすべて、2つの異なるものまたは状態を含みます。 コードに関しては、遷移はそれほど違いはありません。
CSSトランジションとは何ですか?
MozillaのWebドキュメントによると:
「CSSトランジションはCSSのモジュールであり、特定のCSSプロパティの値の間で段階的なトランジションを作成できます。 これらの遷移の動作は、タイミング関数、期間、およびその他の属性を指定することで制御できます。」
これは、CSS遷移を次のように定義できることを意味します。1つ以上の要素のCSSプロパティのある値から別の値への変更。
CSS transition
プロパティを使用すると、有効な要素にトランジション効果を追加できます。 これは、個別に使用することも、省略形として組み合わせて使用することもできる、最大4つの他のプロパティ( transition
プロパティ自体を数えると5つ)で構成されます。 各プロパティには異なる機能があります。
transition-property
transition-property
は、変更を監視するCSSプロパティの名前と、移行する変更プロセスの名前を受け入れます。 次のようになります。
.btn { width: 200px; height: 50px; transition-property: width; background-color: red; color: #fff; border: 0; }
しかし、このプロパティは次のプロパティなしでは何もしません。
transition-duration
transition-duration
プロパティは、 transition-property
の要素の変更が継続する時間を指定します。 このプロパティは、移行が機能するために必要です。 設定されていない場合(値が0s
より大きい場合)、デフォルト値の0s
は、実行されないことを意味します。 それでは、この移行の期間を設定しましょう。
.btn { width: 200px; transition-property: width; transition-duration: 2s; background-color: red; color: #fff; border: 0; }
ここでは、幅が200px
のクラス名がbtn
の要素があります。 ここでは、 transition-property
とtransition-duration
プロパティの両方を使用しています。 これが意味するのは、「CSSさん、 width
プロパティが変更されたときに注意してください。変更された場合は、効果が2s
かかるようにしてください。」
したがって、クラス名がbtn
のボタンがある場合、 index.html
ファイルは次のようになります。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS Transitions</title> <link rel="stylesheet" href="./assets/styles.css"> </head> <body> <Section> <h1>Hi CSS Transitions</h1> <button class="btn">Hover on me to see a cool transition</button> </Section> </body> </html>
ここに、要素の幅の変更を監視するtransition-property
とtransition-duration
プロパティを持つクラスを持つボタンを含むHTMLファイルがあります。
注意すべき点の1つは、ボタンのトランジションを機能させるには、CSS疑似のいずれかを使用して、ブラウザーの開発者ツールで幅を手動で調整することにより、実際にその要素の幅を変更する必要があることです。 -クラス、またはJavaScriptを使用します。 このチュートリアルでは、CSS疑似クラス:hover
を使用してボタンの幅を変更します。
// existing styles .btn:hover { width: 300px; }
ここで、このボタンにカーソルを合わせると、ボタンの幅が設定時間( 2s
)にわたって徐々に増加するのがわかります。
CodePenのTimiOmoyeni(@timibadass)によるペンの遷移プロパティと遷移期間を参照してください。
transition-timing-function
transition-timing-function
プロパティは、遷移効果が発生する速度を決定します。 このプロパティには、次の5つの値を使用できます。
-
ease
これ(デフォルト)は、ゆっくりと始まり、速くなり、ゆっくりと終わる遷移効果を指定します。 -
linear
これは、開始から終了まで同じ速度の遷移効果を指定します。 -
ease-in
これは、スロースタートでの遷移効果を指定します。 -
ease-out
これは、スローエンドの遷移効果を指定します。 -
ease-in-out
これは、開始と終了が遅い遷移効果を指定します。 -
cubic-bezier(n,n,n,n)
これにより、3次ベジェ関数で独自の値を定義できます。
したがって、ボタンにease-in
を追加すると、ボタンが通常の状態に戻る速度と比較して、 width
とheight
が変化する速度に注意する必要があります。 更新されたstyles.css
シートは次のとおりです。
.btn { width: 200px; height: 50px; transition-property: width; transition-duration: 2s; transition-timing-function: ease-in; background-color: red; color: #fff; border: 0; }
より劇的な速度効果または特定の速度効果を設定する自由が必要な場合は、 cubic-bezier(n,n,n,n)
を使用できます。
btn { width: 200px; height: 50px; transition-property: width; transition-duration: 2s; transition-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1); background-color: red; color: #fff; border: 0; }
CodePenのTimiOmoyeni(@timibadass)によるペン遷移タイミング関数を参照してください。
この値の興味深い点の1つは、開発者ツールを使用してブラウザーで直接編集できることです。
開発者ツールの強調表示された部分をクリックすると、 cubic-bezier
オプションを変更するためのインターフェイスが表示されます。
2つのポイントを移動すると、 (n,n,n,n)
の値が変化し、速度効果がどのように表示されるかを示します(赤で強調表示されます)。 これは、特定の速度効果を念頭に置いている場合に非常に役立ちます。
transition-delay
transition-delay
プロパティは、効果が発生し始めるまでに遷移が待機する必要がある時間(秒単位)を設定します。 この時間は、遷移効果が発生する期間を指定するtransition-duration
プロパティとは異なります。
.btn { width: 200px; height: 50px; transition-property: width; transition-duration: 2s; transition-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1); transition-delay: 5s; background-color: red; color: #fff; border: 0; }
ブラウザでこれを試してみると、要素のwidth
が変化し始めるまでに遅延が見られます。 これは、 transition-delay
プロパティと設定した値が原因です。
CodePenのTimiOmoyeni(@timibadass)によるペン遷移遅延を参照してください。
速記プロパティ
個々の遷移プロパティを使用するのは面倒な場合があります。 このため、 transition
という省略形のプロパティがあります。 定義された順序ですべてのプロパティを受け入れます。
{ transition: abcd; }
ここで、文字は次のように対応しています。
- a:
transition-property
- b:
transition-duration
- c:
transition-timing-function
- d:
transition-delay
この省略形のプロパティを使用して、既存の遷移をリファクタリングして機能させることができます。
// from .btn { width: 200px; height: 50px; transition-property: width; transition-duration: 2s; transition-timing-function: cubic-bezier(0.075, 0.82, 0.165, 1); transition-delay: 1s; background-color: red; color: #fff; border: 0; } // to .btn { width: 200px; height: 50px; transition: width 2s cubic-bezier(0.075, 0.82, 0.165, 1) 1s; background-color: red; color: #fff; border: 0; }
このコードをブラウザで試してみると、個々のプロパティを使用したときと同じ遷移効果が得られます。
CodePenのTimiOmoyeni(@timibadass)による略記プロパティを使用したペンを参照してください。
Vue.jsのトランジション
Vue.jsには、アプリケーションにトランジションを追加する2つの異なる方法があります。 これは、CSSの方法でトランジションを使用できないという意味ではありません。 これは、Vue.jsの開発者がCSSの上に構築して、トランジションを使いやすくしたことを意味します。 それらを一つずつ見ていきましょう。
個々の要素とコンポーネントの移行
Vue.jsでトランジションを使用する1つの方法は、次のいずれかを使用して、 transition
コンポーネントを要素またはコンポーネントの周りにラップすることです。
- 条件付きレンダリング(
v-if
を使用)、 - 条件付き表示(
v-show
を使用)、 - 動的コンポーネント、
- コンポーネントルートノード。
アプリケーションを開発しているときに、値(ブール値など)に応じてユーザーにデータを表示したい場合があります。 index.vue
ファイルから取得した、これがどのように機能するかの例を次に示します。
<template> <div> <p v-if="show">Now you see me!</p> <p v-else>Now you don't!</p> <button @click="show = !show">click me</button> </div> </template> <script> export default { data() { return { show: true } } } </script> <style> </style>
このページに、 show
の値に応じて表示される2つの段落を追加しました。 クリックするとshow
の値を変更するボタンもあります。 このページを次のようにインポートして、 App.vue
ファイルに追加します。
<template> <div> <Index /> </div> </template> <script> import Index from "./components/index.vue"; export default { name: 'App', components: { Index } } </script>
ブラウザを開くと、段落とボタンが表示されます。
現在、ボタンをクリックすると、 show
の値のみが変更され、表示されるテキストが変更されます。
この段落にトランジションを追加するには、 transition
コンポーネントで両方の段落をラップします。 このコンポーネントは、 name
の小道具を受け入れます。これは、移行が機能するために非常に重要です。
<template> <div> <transition name="fade"> <p v-if="show">Now you see me!</p> <p v-else>Now you don't!</p> </transition> <button @click="show = !show">click me</button> </div> </template>
この名前は、このtransition
コンポーネント内の要素またはコンポーネントに適用する遷移をVue.jsに指示します。 この時点で、ボタンをクリックしても、CSSクラスの形式で遷移の構成をまだ追加していないため、遷移に気付くことはありません。
注意すべき点の1つは、同じタグの2つの要素間の遷移を使用する場合、遷移を発生させるには、各要素にキー属性を指定する必要があるということです。
<template> <div> <transition name="fade"> <p v-if="show" key="visible">Now you see me!</p> <p v-else key="notVisible">Now you don't!</p> </transition> <button @click="show = !show">click me</button> </div> </template>
Vue.jsには、 transition
コンポーネント内の要素またはコンポーネントに適用される6つの遷移クラスがあり、これらの各クラスは、遷移プロセスの状態を表します。 そのうちのいくつかだけを見ていきます。
v-enter
v-enter
クラスは、「enterの開始状態」を表します。 これは、条件( v-if
またはv-else
)が満たされ、要素が表示されようとしているポイントです。 この時点で、クラスは要素に追加されており、要素が追加されると削除されます。 transition
コンポーネントに付けられたname
prop(この場合はfade
)は、このクラス名の前に付けられますが、 v
はありません。 name
が指定されていない場合、このv
はデフォルトで使用できます。 したがって、このクラスをindex.vue
ファイルに追加できます。
<style> p { color: green; } .fade-enter{ color: red; transform: translateY(20px); } </style>
まず、ページgreen
color
追加します。 次に、最初の遷移クラスであるfade-name
を追加します。 このクラス内で、 color
を赤に変更し、 transform
およびtranslateY
プロパティを使用して、段落をy軸に沿って(垂直方向に) 20px
移動します。 ボタンをもう一度クリックしようとすると、次のクラスを追加する必要があるため、切り替え中に遷移がほとんどまたはまったく発生しないことがわかります。
v-enter-active
v-enter-active
クラスは、遷移要素の「完全に入る」状態を表します。 これは、このクラスが要素が挿入されるか表示される直前に追加され、遷移が終了すると削除されることを意味します。 このクラスは、 v-enter
が機能するために重要です。これは、CSS transition
プロパティをそのプロパティ( transition-property
、 transition-duration
、 transition-timing-function
、 transition-delay
)とともにクラスに追加するために使用できるためです。遷移効果が機能するために必要なものもあります。 このクラスをアプリに追加して、何が起こるか見てみましょう。
.fade-enter-active { transition: transform .3s cubic-bezier(1.0, 0.5, 0.8, 1.0), color .5s cubic-bezier(1.0, 0.5, 0.8, 1.0); }
CodePenのTimiOmoyeni(@timibadass)によるペンビュー遷移の状態への移行を参照してください。
ここで、ボタンをクリックすると、各テキストが表示されたときの色と位置の変化に気付くでしょう。 しかし、遷移が発生していないため、表示からhidden
visible
への遷移は十分にスムーズではありません。
v-leave-active
v-leave-active
クラスは、要素がvisible
からhidden
表示に変わる状態全体を表します。 つまり、このクラスは、要素がページを離れ始めた瞬間から適用され、遷移が終了すると削除されます。 このクラスは、他の遷移プロパティも取り込むCSS transition
プロパティを取り込むため、 leave
遷移を適用するために重要です。 これをアプリに追加して、何が起こるか見てみましょう。
.fade-leave-active { transition: transform 1s cubic-bezier(1.0, 0.5, 0.8, 1.0), color 1s cubic-bezier(1.0, 0.5, 0.8, 1.0); }
CodePenでTimiOmoyeni(@timibadass)によるPenvue遷移がアクティブ状態のままになるを参照してください。
ここでボタンをクリックすると、離れるはずの要素が約2秒待ってから消えることに気付くでしょう。 これは、Vue.jsが、この遷移を有効にするために、この遷移を持つ次のクラスが追加されることを期待しているためです。
v-leave-to
v-leave-to
遷移は、「脱退」状態を表します。これは、要素が脱退を開始し、その遷移がトリガーされるポイントを意味します。 終了トランジションがトリガーされてから1フレーム後に追加され、トランジションまたはアニメーションが終了すると削除されます。 このクラスをアプリに追加して、何が起こるか見てみましょう。
.fade-leave-to { transform: translateX(100px); color: cyan; }
ボタンをクリックすると、色が変化するにつれて、残っている各要素が右にスライドしていることがわかります。
CodePenのTimiOmoyeni(@timibadass)によるペンビューの状態への移行を参照してください。
Vue.jsでトランジションがどのように機能するかを理解したので、次の画像ですべてをまとめます。
最後に、遷移している要素の開始状態と終了状態の間に発生するそれほどスムーズではない遷移に注意してください。 これは、Vue.jsの遷移が同時に発生するためです。 Vue.jsには、非常にスムーズな移行プロセスを実現するのに役立つmode
プロップがあります。 この小道具は、次のいずれかの値を受け入れます。
-
in-out
新しい要素が最初に遷移し、それが完了すると、現在の要素が遷移します。 -
out-in
現在の要素が最初に遷移し、完了すると、新しい要素がで遷移します。
このmode
をindex.vue
ファイルに追加して再試行すると、より適切な遷移が表示されるはずです。
<template> <div> <transition name="fade" appear mode="out-in"> <p v-if="show" key="visible">Now you see me!</p> <p v-else key="notVisible">Now you don't!</p> </transition> <button @click="transitionMe">click me</button> </div> </template>
ここで、ボタンをクリックすると、ある要素が別の要素に入る前に離れることに気付くでしょう。 これは、この遷移用に選択したmode
の結果です。 他のモードを試すと、異なる動作が発生します。
CodePenのTimiOmoyeni(@timibadass)によるモード付きのペンビュー遷移を参照してください。
トランジションのリスト
transition
コンポーネントを使用して一度に複数の要素にトランジションを追加しようとすると、コンソールにエラーが出力されます。
これは、 transition
コンポーネントが一度に複数の要素をレンダリングすることを意図していないためです。 一度に2つ以上の要素を遷移させたい場合、またはリストをレンダリングしたい場合( v-for
を使用)、 transition-group
コンポーネントを使用します。 このコンポーネントはname
propも受け入れますが、次のようなtransition
コンポーネントとはいくつかの違いがあります。
- このコンポーネント内の各要素には、キー属性が必要です。
- 一度に複数の要素がレンダリングされるため、
mode
プロップは必要ありません。 -
span
要素はデフォルトでレンダリングされますが、transition-group
コンポーネントを定義するときにtag
propを指定することで変更できます。 例を見てみましょう(listTransition.vue
ファイル内):
<template> <div> <h1>List/Group Transition</h1> <ul> <li v-for="user in users" :key="user.id"> {{user.name}} <button>Remove</button> </li> </ul> </div> </template> <script> export default { data() { return { users: [ { name: "Vuejs", id: 1 }, { name: "Vuex", id: 2 }, { name: "Router", id: 3 } ] }; } }; </script> <style> </style>
ここでは、 users
の配列があり、 v-for
を使用してループし、テンプレートセクションに名前を表示します。 このリストを表示できるようにするには、このコンポーネントをApp.vue
ページにインポートする必要があります。
<template> <div> <Index /> <listTransition /> </div> </template> <script> import Index from "./components/index.vue"; import listTransition from "./components/listTransition.vue"; export default { name: "App", components: { Index, listTransition } }; </script>
transition-group
コンポーネントを使用する場合、リストをul
タグ(または念頭に置いているタグ)でラップする代わりに、遷移transition-group
コンポーネントをラップして、タグをtag
プロップに次のように追加することに注意してください。
<template> <div> <h1>List/Group Transition</h1> <transition-group name="slide-fade" tag='ul'> <li v-for="user in users" :key="user.id"> {{user.name}} <button>Remove</button> </li> </transition-group> </div> </template> <script> export default { data() { return { users: [ { name: "Vuejs", id: 1 }, { name: "Vuex", id: 2 }, { name: "Router", id: 3 } ] }; } }; </script> <style> .slide-fade-enter-active { transition: transform 0.3s cubic-bezier(1, 0.5, 0.8, 1), color 0.5s cubic-bezier(1, 0.5, 0.8, 1); } .slide-fade-leave-active { transition: transform 1s cubic-bezier(1, 0.5, 0.8, 1), color 1s cubic-bezier(1, 0.5, 0.8, 1); } .slide-fade-enter { color: mediumblue; transform: translateY(20px); } .slide-fade-leave-to { transform: translateX(100px); color: cyan; } </style>
ここでは、 ul
タグをtransition-group
コンポーネントに置き換え、 tag
prop値としてul
を追加しました。 開発ツールで更新されたページを調べると、リストがtag
propで指定した要素(つまり、 ul
)でラップされていることがわかります。
また、 slide-fade
の値を持つトランジションname
propをこのコンポーネントに追加しました。以下のstyle
セクションには、この命名規則に従ったスタイルルールがあります。 これを機能させるには、ファイルに次のコード行を追加する必要があります。
<template> <div> <h1>List/Group Transition</h1> <transition-group name="slide-fade" tag="ul"> <li v-for="user in users" :key="user.id"> {{user.name}} <button @click="removeUser(user.id)">Remove</button> </li> </transition-group> </div> </template> <script> export default { // ... methods: { removeUser(id) { let users = this.users.filter(user => user.id !== id); this.users = users; } } }; </script>
テンプレートセクションでは、ループ内の各ボタンにクリックイベントを追加し、 user.id
をこのクリックイベントに関連付けられたremoveUser
メソッドに渡します。 次に、ファイルのscript
セクションにこの関数を作成します。 この関数は、引数としてid
を受け入れます。 次に、既存のユーザーを調べて、この関数に渡されたid
を持つユーザーを除外します。 これが完了すると、新しいユーザーの配列がページのデータに保存されます。
この時点で、ユーザーのいずれかのボタンをクリックすると、ユーザーがリストから削除されるときに遷移効果が適用されます。
CodePenのTimiOmoyeni(@timibadass)によるPenVueリストの移行を参照してください。
Nuxt.jsのトランジション:
Nuxt.jsアプリケーションにトランジションを追加することは、Vue.jsで慣れている方法とはまったく異なります。 Nuxt.jsでは、 transition
コンポーネントがアプリケーションに自動的に追加されます。 あなたがする必要があるのは次の1つです。
個々のページコンポーネントに追加する
Nuxt.jsを使用すると、個々のページコンポーネントにシームレスにトランジションを追加できます。 この遷移は、ユーザーがこのページに移動しているときに適用されます。 コンポーネントのscript
セクションにtransition
プロパティを追加するだけです。 このプロパティは、文字列、関数、またはオブジェクトにすることができます。 受け入れるプロパティのいくつかは次のとおりです。
-
name
、 -
mode
、 -
css
。
Vue.jsと同様に、Nuxt.jsにはデフォルトのname
があり、 name
が指定されていない場合は遷移クラスに割り当てられ、 page
と呼ばれます。 transition.vue
でアプリケーションに追加すると、これがどのように機能するかを見てみましょう。
<template> <div> <p> Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore libero odio, asperiores debitis harum ipsa neque cum nulla incidunt explicabo ut eaque placeat qui, quis voluptas. Aut necessitatibus aliquam veritatis. </p> <nuxt-link to="/">home</nuxt-link> </div> </template> <script> export default { transition: { name: "fade", mode: "out-in" }, data() { return { show: true }; } }; </script> <style> p { color: green; } .fade-enter-active { transition: transform 0.3s cubic-bezier(1, 0.5, 0.8, 1), color 0.5s cubic-bezier(1, 0.5, 0.8, 1); } .fade-leave-active { transition: transform 1s cubic-bezier(1, 0.5, 0.8, 1), color 1s cubic-bezier(1, 0.5, 0.8, 1); } .fade-enter { color: mediumblue; transform: translateY(20px); } .fade-leave-to { transform: translateX(100px); color: cyan; } </style>
このページでは、テンプレートセクションに「loremipsum」を表示しています。 また、 transition
プロパティを追加しました。このプロパティには、 name
がfade
に設定され、 mode
がout-in
設定されているオブジェクトが渡されています。 最後に、 style
セクションに、ユーザーがこのページと別のページの間を移動するときの遷移を制御するいくつかのスタイルを追加しました。
このトランジションを機能させるには、 /transition
に移動する必要がありますが、ブラウザにこのルートを手動で入力しても、トランジションに気付くことはありません。 それでは、 index.vue
ページにこのページへのリンクを追加しましょう。
<template> <div class="container"> <div> // .. <nuxt-link to="/transition">next page</nuxt-link> </div> </div> </template>
ここで、2つのページのいずれかのリンクをクリックすると、ブラウザが/ transitionルートに移動したり/transition
ルートから移動したりするときにスライドするトランジションに気付くでしょう。
pageTransition
アプリケーションのすべてのページにトランジションを追加する場合、個々のページにトランジションを追加するのは難しい場合があります。 そこで、 pageTransition
が登場します。このプロパティを使用すると、 nuxt.config.js
ファイルにすべてのページの一般的な構成を追加できます。 このプロパティは、オプションとして文字列とオブジェクトの両方を受け入れます。 それがnuxt.config.js
でどのように機能するか見てみましょう:
export default { // ... /* ** Global CSS */ css: [ '~/assets/transition.css' ], pageTransition: { name: "fade", mode: "out-in" }, }
ここに、CSSファイルへのリンクを追加しました。これはまもなく作成します。 また、ファイルにpageTransition
プロパティとその構成を追加しました。 それでは、CSSファイルtransition.css
を作成し、それに次のスタイルを追加しましょう。
.fade-enter-active { transition: transform 0.3s cubic-bezier(1, 0.5, 0.8, 1), color 0.5s cubic-bezier(1, 0.5, 0.8, 1); } .fade-leave-active { transition: transform 1s cubic-bezier(1, 1, 1, 1), color 1s cubic-bezier(1, 0.5, 0.8, 1); } .fade-enter { color: mediumblue; transform: translateY(20px); } .fade-leave-to { transform: translate3d(-500px, -300px 400px); color: cyan; }
あるルートと別のルートの間の移行に適用されるクラスとスタイルを追加しました。 transition.vue
ページからトランジション構成を削除し、2つのページ間を移動しようとすると、トランジション効果が得られます。
layoutTransition
layoutTransition
プロパティを使用すると、ページが存在するレイアウトに基づいてトランジションを適用できます。 layout
に基づいて機能することを除いて、 pageTranslation
と同じように機能します。 デフォルトのトランジション名はlayout
です。 nuxt.config.js
での動作例を次に示します。
export default { // ... /* ** Global CSS */ css: [ '~/assets/transition.css' ], layoutTransition: { name: "fade", mode: "out-in" }, }
トランジションがレイアウトで機能するためには、 fade
をレイアウトの名前にする必要があることに注意してください。 newLayout.vue
でこの新しいレイアウトを作成して、意味を確認しましょう。
<template> <!-- Your template --> <div> <h1>new layout</h1> </div> </template> <script> export default { layout: "blog" // page component definitions }; </script>
結論
CSSトランジションと、トランジションプロパティ( transition-property
、 transition-duration
、 transition-timing-function
、 transition-delay
)を使用してCSSトランジションを作成する方法と、短縮形のtransition
プロパティを使用する方法について学習しました。 また、Vue.jsとNuxt.jsの両方でこれらのトランジションを適用する方法についても説明しました。 しかし、それだけではありません。 Vue.jsには、アプリケーションにトランジションを適用するためのより多くの方法があります。
- 「CSSアニメーション」、Vue.js
- 「コンポーネント間の移行」、Vue.js
- 「状態遷移」、Vue.js
関連リソース
- 「CSSトランジション」、MDN Web Docs
- 「トランジション」(定義)、Lexico
- 「CSSトランジション」、W3Schools
- 「Enter / Leave and List Transitions」、Vue.js
- グラフィックの入力/終了、Vue.js
- 「API:ページ
transition
プロパティ」、Nuxt.js - 「API:トランジションプロパティ」、Nuxt.js
- 「Nuxt.jsのページとレイアウトの遷移」、Debbie O'Brien、DEV