上から下に徐々に開いていくQ&Aの部分を作成したいと思っています。JavaScriptでクラスの付け外しをしてCSSでアニメーションさせたいと思っています。
JavaScriptは問題なく動作しています。ドロップダウンするアニメーション自体も出来ています。現状の問題点は以下の点です。
・開閉した際に、パディングもアニメーションしてしまい、テキストの位置が左右でアニメーションしてしまう。
テキストが徐々に改行されていくような状況です。今はスマホ用のページを作っている(最終的にはレスポンシブ対応にしたい)ので、画面幅が狭く、特に目立ちます。
こちらを解消しようと、パディングをアニメーションしないようにすると、閉じるときにパディングが一気に消えておかしい。
最初からパディングをつけておくと、2つの質問事項の間に余計な余白ができてしまう。
見た目の調整でパディングはつけておきたいですが、パディング以外の方法で代用できるならそれでも構いません。
なにか良い解決方法がありましたらご教授いただけると幸いです。
よろしくお願いいたします。
HTMLはこちら
<div class="question__ttl">明日の天気は晴れか?</div> <div class="question__answer"> <p question__txt>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. </p> </div> <div class="question__ttl">明日は木曜日か?</div> <div class="question__answer"> <p question__txt>Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. </p> </div>
CSSはこちら
.question__ttl { display:inline-block; background-color:yellow; margin-bottom:30px; cursor:pointer; } .question__answer { height: 0; padding:0; overflow:hidden; opacity:0; transition:0.5s; visibility:hidden; /* padding: 10px 20px 20px; */ /* ここにパディングをつけると上下に余計な余白がつく */ } .question__answer.is-open { height:154px; padding: 10px 20px 20px; opacity:1; visibility:visible; }
JavaScriptはこちら
document.addEventListener("DOMContentLoaded",() => { const title = document.querySelectorAll('.question__ttl'); for(let i = 0 ;i < title.length;i++) { let titleEach = title[i] ; let content = titleEach.nextElementSibling; titleEach.addEventListener('click',() => { content.classList.toggle('is-open'); }); } });
回答1件
あなたの回答
tips
プレビュー