アコーディオンメニュー詰め合わせ

最近のウェブ制作では(ウェブ開発でも)定番のアコーディオンメニューですが、未だに十分な機能を有した専用の要素(タグ)がある訳ではありません(※<details>に関しては後述します)。

つまり、多機能なアコーディオンメニューを実現するためには、何らかの手段によって自分で実装する必要があります。

当サイトでは、幾つかあるアコーディオンメニューの実装方法を紹介しています。

ということで、恒例の「同じような見た目・機能を色々な手法で実装してみようシリーズその3」です(その1-Aその1-B)/その2

排他処理アコーディオン<input type="radio">

1つの項目しか開けないアコーディオンメニューです。

ページを開いた時点で、項目が1つだけ開いていおり、他の項目を選択すると開いていた項目が閉じて、選択した項目だけが開きます。

実装にはHTMLの<input type="radio">を使います。<input type="radio">に隣接した<label>に表示したいコンテンツを格納し、ボタンが押されたら隣接したコンテンツを表示するように HTML と CSS を使って制御します。

複数の<input type="radio">をグループ化し、どれか一つが開いている時に他のコンテンツを排他的に処理して、択一選択を実現します。

通常アコーディオン(input版)<input type="checkbox">

複数の項目を同時に開くことができるアコーディオンメニューです。

ユーザーが必要な項目だけ選択して開けるように最初はすべて閉じているパターンが多いです。ヘルプページやQ&Aコーナーなどで多様されているイメージです。
挙動の制御にはオーソドックスな<input type="checkbox">を使用しています。こちらも HTML と CSS で表示を制御します。

通常アコーディオン(details版)<details> + <summary>

複数の項目を同時に開くことができるアコーディオンメニューです。

基本的な仕様はtype-2と同様ですが、挙動の制御に<input type="checkbox">ではなく<details><summary>を使用しています。この2つはあまり聞き慣れないタグですが、アコーディオンメニューを実現する為に実装されたようなタグなので活用しています。

ただ、比較的新しいタグなので、IE11では使用できない、シンプルな挙動の制御はできるが、他の条件と組み合わせるには、やはり後述する JavaScript を使いたくなるなど、「アコーディオンメニューを実装するならコレ!」といった感じではなく、いまいち普及していない印象です。

表示の制御に関しては、HTML のみで動作する点が特徴です。

1つ目
1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。
2つ目
2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。
3つ目
3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。

通常アコーディオン(JavaScript版)JavaScript

複数の項目を同時に開くことができるアコーディオンメニューです。

type-2, type-3 と同様の挙動を、JavaScript で実装しています。他のタイプは表示や装飾を制御する為に、構造や属性などが複雑になりがちでした。このタイプでは、それらに比べて HTML の構造が最もシンプルになっています。また、JavaScript を使うことで、より細かい挙動の制御が可能となります。

1つ目
1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。
2つ目
2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。
3つ目
3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。

通常アコーディオン(jQuery版)jQuery

複数の項目を同時に開くことができるアコーディオンメニューです。

type-4 と同様の挙動を、jQuery で実装しています。jQuery なら簡単にアニメーション演出が可能となります。

toggleClass()メソッドを使ってスタイルを簡単に入れ替えたり、slideToggle()メソッドを使ってアニメーション付きでコンテンツを表示できます。jQuery を使用すると、アニメーションの速度なども簡単に設定できるので、非常に便利です。

1つ目
1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。1つ目の項目のコンテンツ。
2つ目
2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。2つ目の項目のコンテンツ。
3つ目
3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。3つ目の項目のコンテンツ。