前提・実現したいこと
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だと同じようにはならないのは何故なのか?分かる方がいれば教えていただきたいです????♂️
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。