SEARCH

CATEGORY

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

以前の記事で、detailsとsummaryタグを使ったアコーディオン(開閉)の作り方を紹介しました。

今回は、その方法に jQuery を追加し、HTML+CSS だけでは不完全だったアニメーションをスムーズに実装する手法を紹介します。
※jQuery が無効な環境でも、details / summary 本来の開閉機能は動作する仕様です。

html

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; により、表示時のアニメーションが 0.5秒かけて再生される

jQuery

    •  jQuery の役割
      • summary(.toggle-header)クリック時に、デフォルトの <details>/<summary> の開閉動作を event.preventDefault() で無効化し、独自の開閉制御を行う
      • open 属性の有無によって現在の状態を判定する
    •  閉じる処理
      • .toggle-content を slideUp(300) で閉じ、アニメーション完了後に open 属性を削除
    •  開く処理
      • open 属性を追加したうえで、.toggle-content を slideDown(300) で表示

    CSS のアニメーションは、この open 属性の付与・削除によって開始・終了する仕組みになっています。

    DEMO

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