TECH BLOG

マークリープス技術ブログ

open

details、summaryタグ+jQueryでスムーズに開閉するアコーディオンの実装

以前の記事で、detailsとsummaryタグを使ったアコーディオン(開閉)の作り方を紹介しました。
その際に、htmlとcssだけではアニメーションの処理が不完全だった為、jQueryを追加してスムーズに開閉するアコーディオンをご紹介します。
※jQueryが効かない環境でも、details と summary の元々の開閉機能が動作する仕様となっています。

html

css

 

CSSの補足説明

●初期状態

  • ・summary(.toggle-header(質問部分))に、 display: list-item; 以外を指定してデフォルトの三角形アイコンを消します。
  • ・.toggle-content(回答部分)は opacity: 0 を指定し、初期状態では非表示にします。
  • ・transform: translateY(-10px) により、少し上にずれた状態で待機します。

●開いたときのアニメーション

  • ・details 要素(.toggle-box)に open属性が付与されると、その中の .toggle-content が opacity: 1 になり、表示されます。
  • ・transform も none に戻るため、上からスライドしてくるような視覚効果になります。
  • ・transition: transform .5s, opacity .5s; により、opacity と transform の変化が 0.5秒かけてアニメーションします。

jQuery

 

jQuery 側の役割

  • ・summary(.toggle-header(質問部分))をクリックすると、デフォルトの <details>/<summary> の開閉動作を event.preventDefault() で無効化し、独自の開閉処理を行います。
  • ・open 属性の有無によって現在の状態を判定しています。
  • ・閉じる場合は .toggle-content を slideUp(300) し、アニメーション完了後に open 属性を削除します。
  • ・開く場合は open 属性を追加したうえで、.toggle-content を slideDown(300) で表示します。
  • ・この open 属性の追加・削除によって、CSS のアニメーションが開始・終了する仕組みになっています。

DEMO

See the Pen
details、summaryタグ+jQueryでスムーズに開閉するアコーディオンの実装
by mkl may (@mkl-may)
on CodePen.

よく読まれている関連記事

関連最新記事