CSSのheightプロパティをautoにしつつ、transitionプロパティを使う方法を探しています。
まずは、こちらをご覧ください。
HTML
1<body> 2 <section> 3 <div class="section_head"> 4 <h2>ハンバーグの作り方</h2> 5 </div> 6 <div class="section_body"> 7 <p>ハンバーグの作り方は以下の通りです。</p> 8 <p>材料は... 9 : 10 : 11 : 12 ...以上で完成となります。</p> 13 </div> 14 </section> 15</body>
CSS
1*{ 2 display: flex; 3} 4html{ 5 display: block; 6} 7head{ 8 display: none; 9} 10body, 11section{ 12 flex-flow: column nowrap; 13} 14.section_body{ 15 flex-flow: column nowrap; 16 over-flow: hidden; 17 transition: all 1s 0s ease; 18}
JavaScript
1onload = () => { 2 const section = document.querySelectorAll("section"); 3 const section_head = document.querySelectorAll("section_head"); 4 const section_body = document.querySelectorAll("section_body"); 5 for(let i = 0; i < section.length; i++){ 6 section_body[i].style.maxHeight = "0px"; 7 section_head[i].addEventListener("click", () => { 8 if(section_body[i].style.maxHeight === "0px"){ 9 section_body[i].style.maxHeight = "none"; 10 let rect = section_body[i].getBoundingClientRect(); 11 section_body[i].style.maxHeight = "0px"; 12 section_body[i].style.maxHeight = rect.height + "px"; 13 section_body[i].style.maxHeight = "none"; 14 }else{ 15 section_body[i].style.maxHeight = "0px"; 16 } 17 }); 18 } 19}
HTMLの<div class="section_head">タグが見出し、<div class="section_body">タグが本文です。
ページ読み込み時には本文部分が見えなくなっており、見出し部分をクリックするたびにシュッ!シュッ!と上下方向にアニメーションさせたいのです。
JavaScriptは――
- ページを開こうとするとmax-heightをnoneにして全文を表示する
- 本文部分の高さを取得し、すかさずmax-heightを0pxにすることで何事も無かったかのように
- 先ほど取得した高さの分だけ本文部分を縦方向に伸ばす
- 最後にmax-heightをnoneにすることで、ブラウザのウィンドウサイズが弄られても本部部分がそれに対応して伸び縮みする
――という処理をするべく書いてみたのですが上手に動かず難儀しています。
開いた常態から閉じる分には問題ないのですが開いたときはパッ!と表示されてしまうので何とかしたいと思っています。
長くなりましたが、ご回答のほど、よろしくお願い申し上げます。

回答1件
あなたの回答
tips
プレビュー