🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

Q&A

解決済

2回答

3809閲覧

Vue.jsで下からフェードインして表示されるようなアニメーションを付けたい。

F_Yohei

総合スコア14

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Vue CLI

Vue CLIは、Vue.jsでアプリケーション開発を行うためのコマンドラインインタフェース(CLI)に基づいた開発ツールです。インタラクティブなプロジェクトの雛形や設定なしで使用できるプロトタイプの作成など、さまざまな機能が用意されています。

0グッド

1クリップ

投稿2020/12/22 03:11

編集2020/12/24 10:17

前提・実現したいこと

Vue CLIでアンケート画面の作成をしています。

今回、実装したいことは一つ目の設問のラジオボタン「はい」もしくは「いいえ」が選択された時に
二つ目の設問が下からフェードインするような形で表示させたいです。

イメージ説明

発生している問題・エラーメッセージ

アニメーションさせたい部分をtransitionタグで囲みCSSを設定したのですが、
ラジオボタンをクリックすると、ただ表示されるだけの状態になってしまいます(フェードインされない)

該当のソースコード

HTML

1<template> 2 <div> 3 <div class="questionnaire-box"> 4 <div class="questionnaire-box-header"> 5 <span>STEP2</span> 6 <h4>以下にお答えください</h4> 7 </div> 8 9 <form class="question-box"> 10 <p>現在、生命保険に加入されていますか?</p> 11 <input type="radio" name="question" value="ok" id="a" v-on:click="change"/> 12 <label for="a">はい</label> 13 <input type="radio" name="question" value="no" id="b" v-on:click="change"/> 14 <label for="b">いいえ</label> 15 </form> 16 17    //フェードインで表示させたい部分 18 <transition name="fade"> 19 <form class="question-box" v-if="show"> 20 <p>現在、入院中ですか。または、最近3ヶ月以内に医師の診察・検査の結果、入院・手術をすすめられたことはありますか?</p> 21 <input type="radio" name="question" value="ok" id="c" /> 22 <label for="c">はい</label> 23 <input type="radio" name="question" value="no" id="d" /> 24 <label for="d">いいえ</label> 25 </form> 26 </transition> 27 28 <form class="question-box"> 29 <p>過去5年以内に、病気やけがで、手術をうけたことまたは、継続して7日以上の入院をしたことがありますか?</p> 30 <input type="radio" name="question" value="ok" id="e" /> 31 <label for="e">はい</label> 32 <input type="radio" name="question" value="no" id="f" /> 33 <label for="f">いいえ</label> 34 </form> 35 </div> 36 37 <div class="page-transition-button"> 38 <button id="back-btn" class="back-btn">前へ戻る</button> 39 <button id="next-btn" class="next-btn">次へ進む</button> 40 </div> 41 42 </div> 43</template>

CSS

1<style scoped> 2//フェードインのCSS 3.fade-enter { 4 opacity:0; 5 transform: translateY(20px); 6} 7 8.fade-enter-active { 9 transition:0.5s; 10} 11 12.fade-enter-to { 13 transform:translateY(0); 14} 15 16.questionnaire-box { 17 width: 50%; 18 margin: 50px auto; 19 border: 1px solid #00ffc0; 20 border-radius: 3px; 21} 22 23.question-box:nth-child(4) { 24 margin-bottom: 20px; 25} 26 27.questionnaire-box-header { 28 display: flex; 29 background-color: rgba(0, 255, 186, 0.3); 30} 31 32.questionnaire-box-header > span { 33 width: 11%; 34 height: 22px; 35 line-height: 22px; 36 text-align: center; 37 color: #fff; 38 font-size: 12px; 39 background-color: #1798da; 40 border-radius: 3px; 41} 42 43.questionnaire-box-header > h4 { 44 width: 37%; 45 margin: 0 auto; 46 padding: 10px; 47 color: #565f5f; 48 font-weight: normal; 49} 50 51.question-box { 52 padding: 0 10px; 53} 54 55.question-box > p { 56 display: flex; 57 align-items: center; 58 font-size: 14px; 59 color: #4eaee0; 60} 61 62.next-btn, 63.back-btn { 64 position: relative; 65 display: block; 66 text-align: center; 67 margin-right: 25px; 68 padding: 10px; 69 width: 150px; 70 color: #fff; 71 background-color: #0fe7a2; 72 border: none; 73 border-radius: 3px; 74 letter-spacing: 1px; 75} 76 77.next-btn::after, 78.back-btn::after { 79 content: ""; 80 border-top: 2px solid #fff; 81 border-right: 2px solid #fff; 82 margin-top: -3.5px; 83 height: 7px; 84 width: 7px; 85 position: absolute; 86 top: 19px; 87 left: 125px; 88 transform: rotate(45deg); 89} 90 91.page-transition-button { 92 display: flex; 93 justify-content: center; 94} 95</style> 96

JavaScript

1<script> 2export default { 3 data() { 4 return { 5 show:false 6 }; 7 }, 8 methods: { 9 change:function() { 10 this.show = true; 11 } 12 } 13}; 14</script>

試したこと

試しにtransitionタグにappearを付けてみたのですが、特に変化はありませんでした。

原因がわからず先に進めない状況となっております。
ご教授いただけると幸いです????‍♂️

デベロッパーツールで確認したところ

css

1.fade-enter-active { 2 transition:0.5s; 3} 4 5.fade-enter-to { 6 transform:translateY(0); 7}

は適用されてるみたいなのですが、

css

1.fade-enter { 2 opacity:0; 3 transform: translateY(20px); 4}

は適用されてないみたいです。

--追記--
script直接組み込み挙動を確認したところ下からフェードインする形で表示されました。
現在VueCLIでの開発をしているのですが、VueCLIだと何故フェードインする形で表示されないのかが疑問なので、もし分かる方がいらっしゃったらご教授いただければと思います????‍♂️

--追記--
Vue2で新しくプロジェクトを作成して同じようにコンポーネントを作って実装してみたところしたからフェードインする形で表示されました。

ただ、Vue3だと同じようにはならないのは何故なのか?分かる方がいれば教えていただきたいです????‍♂️

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

こちらの問題解決しました。

バージョンによってv-enterの表記の仕方が違うみたいです。

Vue2
v-enter

Vue3
v-enter-from

↑バージョンでこのように変わります。

投稿2020/12/24 14:54

F_Yohei

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんばんは。

CSSのコメントは/* */です。

css

1<style scoped> 2//フェードインのCSS /* ←ここで文法エラー */ 3.fade-enter {

コメント - CSS: カスケーディングスタイルシート | MDN

投稿2020/12/23 08:17

Lhankor_Mhy

総合スコア36946

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

F_Yohei

2020/12/23 08:26

こんばんは! 回答いただきありがとうございます????‍♂️ 今、コメントを外して実行してみたのですが状況変わらずでした。。。
Lhankor_Mhy

2020/12/23 08:42

そうでしたか。 ご提示のコードで試したところ、その修正で当方では動作したので、ご提示いただいていない部分のコードが原因かもしれませんね。
F_Yohei

2020/12/23 09:14

コードは間違っていないということですね。。。 下からフェードインするような動きになっているでしょうか?
F_Yohei

2020/12/23 13:47

わかりました! ありがとうございます????‍♂️ もう少し探ってみます!
F_Yohei

2020/12/24 02:10

確認したところVueCLIですと上手くいかないみたいです。 script直接組み込みでやってみたところ思っていた通りの挙動になりました。 ですが、VueCLIだと何故フェードインするような動きにならないのかが疑問です。 もし、ご存知でしたらご教授いただければ幸いです????‍♂️
F_Yohei

2020/12/24 14:53

こちら解決しました! Vue2ではv-enterでいいそうですが、Vue3以降はv-enter-fromが正しいみたいです。
Lhankor_Mhy

2020/12/25 02:31

ご解決されて何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問