• TOP
  • NOTES
  • 【サンプル10選】コピペで実装できるアコーディオンメニュー

NOTES

【サンプル10選】コピペで実装できるアコーディオンメニュー

detailsタグ・summaryタグを使用したコピペOKなアコーディオンメニューの実装サンプルを10種類紹介します。

【サンプル10選】コピペで実装できるアコーディオンメニュー

このエントリーをはてなブックマークに追加

Webサイトのナビゲーションやコンテンツを表示するための「アコーディオンメニュー」。表示スペースに制約があるケースや、複数のカテゴリーアイテムをきれいに見せたいときによく使用されるUIです。しかし、実際に実装しようとすると、開閉の調整やアクセシビリティの配慮など何かと手間がかかりますよね。

本記事では、コピペOKなアコーディオンメニューの実装サンプルを10種類紹介します。detailsタグ・summaryタグを使用したHTMLだけで作成するシンプルなアコーディオンメニューから、CSS・jQueryなどを使用した見た目や動きにこだわったアコーディオンメニューまで、さまざまなサンプルを紹介するのでぜひご活用ください。

< アコーディオンのサンプル10選 >

【HTML】シンプルなアコーディオンを実装する

detailsタグ・summaryタグを使用すると、HTMLのみだけでアコーディオンの開閉を実現することができます。
タグについての詳細は< htmlのdetailsタグとsummaryタグでアコーディオンメニューを実装するメリット >をご覧ください。

detailsタグにopen属性を指定することで、はじめから開いた状態のアコーディオンを作成することも可能です。

【HTML/CSS】ホバー時・タブフォーカス時のスタイルを変える

ホバーやタブフォーカス時のスタイルを変えることで、アコーディオンメニューの開閉状態をより明示的に示すことができます。
ホバー時は「:hover」、タブフォーカス時は「:focus-visible」擬似クラスを使用して、スタイルを変更しました。タブフォーカスはクリック時に動作させたくないので、今回は「:focus-visible」を使用しています。

【HTML/CSS】アコーディオンの矢印をカスタマイズする

detailsタグ・summaryタグを使用すると、デフォルトで矢印が表示されます。この矢印はCSSを使用して、削除したり、アイコンや画像を設定したりすることができます。
矢印をカスタマイズすることで、アコーディオンのデザイン性が上がり、よりご自身のWebサイトにマッチするようになるでしょう。

今回は、以下の3パターンでデフォルトの矢印アイコンをカスタマイズしました。
1つ目のアコーディオンのタイトルは、CSSのみでアイコンをカスタマイズしています。
2つ目のアコーディオンのタイトルは、画像を使用してカスタマイズしています。
※画像は、SVGの文字データを設定しています。imageフォルダにjpeg、pngの画像を格納し、パスを指定することで表示することも可能です。その際はご自身の環境に併せてファイルパスを設定してください。 例:background: url( ../image/XXXX.png );
3つ目のアコーディオンのタイトルは、Webフォントアイコンを使用してカスタマイズしています。

【HTML/CSS】アコーディオンの開閉をスムーズにする

アコーディオンの開閉がスムーズにみえるよう、JavaScriptを使用せずにCSSのみで調整しました。デフォルトのカクカクした挙動が気になる方、よりアコーディオンの見栄えを良くしたい方は、参考にしてみてください。
今回は2つのパターンで実装してみましたが、どちらも一長一短なので状況に合わせてご利用ください。

open前とopen後の状態をtransitionを利用し0.3秒で遷移させることで、アコーディオンのスムーズな動きを実装しています。
open前のアコーディオン(「.details」)にネガティブマージンをつけ、アコーディオンタイトル(「.details-summary」)にtransformYで下に移動させておきます。これによりアコーディオンのコンテンツ(「.details-content」)が、アコーディオンタイトル(「.details-summary」)の下に入り込みます。open後のアコーディオン(「.details」)よりネガティブマージン、アコーディオンタイトル(「.details-summary」)のtransformYの設定を削除し位置も戻します。
ネガティブマージンを使用しており、余白調整などがあまり間隔的ではありませんので注意してください。

アコーディオン(「.details」)をopenする前の高さとopen後の高さを指定し、transitionでスムーズに動くようにしました。
アコーディオン(「.details」)の高さをを固定しているため、テキスト量が増えた場合は表示崩れをしてしまいます。その防止策としてアコーディオンの中身(「.details-content」)にも高さを指定し「overflow: hidden;」と「overflow-y: auto;」を設定しました。テキスト量が指定した高さを越した場合はスクロールするようにしています。また、アコーディオン(「.details」)の開閉に合わせて、アコーディオンの中身(「.details-content」)を表示するようにするため、animationでフェードインさせています。
ただし、detailsタグ内のコンテンツ(今回でいうと「.details-summary」)へanimationやtrainsitionの設定は少し不安定になります。

【HTML/CSS/jQuery】アコーディオンの開閉をスムーズにする

アコーディオンの開閉がスムーズになるよう、jQueryを使用して調整しました。CSSのみで調整していた時と比べ、より安定した動作を実現することができます。

【HTML/CSS/jQuery】1つ開くと、他は閉じるアコーディオンを実装する

1つ開くと、他のコンテンツは閉じるアコーディオンです。自動で他のコンテンツをクローズすることで、コンテンツを閉じる手間が減ります。

【HTML/CSS/jQuery】アコーディオンの閉じるボタンを複数設置する

アコーディオンのコンテンツ内にも閉じるボタンを設置しました。アコーディオンのコンテンツが長い場合に実装すると、閉じる時にコンテンツ上までスクロールせず済みます。

【HTML/CSS/jQuery】多階層なアコーディオンを実装する

大量の情報を扱う場合に便利な多階層のアコーディオンです。jQueryの設定は【HTML/CSS/jQuery】アコーディオンの開閉をスムーズにすると同じです。

【HTML/CSS/jQuery】ホバーで開閉するアコーディオンを実装する

ホバーで開閉することで、必要な情報に、より迅速にアクセスできるようになります。アコーディオンをホバーで開閉するために、mouseenter・mouseleaveを使用して調整しています。

【HTML/CSS/jQuery】画像をホバーして開閉するアコーディオンを実装する

画像をホバー後、画像中央にコンテンツが表示されるアコーディオンです。狭いスペースでも画像を目立たせたい時におすすめです。summaryタグに画像を配置し、CSSでホバーしたら横に伸びるように、jQueryでコンテンツを時間差で開くよう設定して、動きを実現しています。

< htmlのdetailsタグとsummaryタグでアコーディオンメニューを実装するメリット >

今回の実装サンプルは、detailsタグとsummaryタグを使用して作成しました。
この2つのタグを使用することで、アクセシビリティ面でも最適化されたアコーディオンメニューを簡単に実装することができます。detailsタグとsummaryタグはHTML5より登場した比較的新しいタグで、基本的にセットで使用します。この2つのタグを使用することで、アクセシビリティ面でも最適化されたアコーディオンメニューを簡単に実装することができます。

detailsタグは、コンテンツの詳細な説明や補足情報を格納するために使用します。
このタグは、開閉できるセクションを作成し、必要に応じてユーザーが詳細な情報を表示したり非表示にしたりすることができます。

summaryタグは、開閉できるセクションのタイトルを定義するために使用します。
このタグは、detailsタグの内部に配置され、開閉アイコンとともにセクションのタイトルが表示されます。ユーザーは、このタイトルをクリックして、詳細情報を表示または非表示に切り替えることができます。

具体的なコードは「【HTML】シンプルなアコーディオンを実装する」をご確認ください。
detailsタグ・summaryタグを使用してアコーディオンメニューを作成すると、次のようなメリットがあります。

■簡単にアコーディオンの挙動を実装することができる

detailsタグとsummaryタグを使用することで、JavaScriptを使用せずにHTMLのみで開閉の挙動を実装できます。

■アクセシビリティ面で最適化されている

detailsタグとsummaryタグを使うことで、特別な対応をすることなく以下の点が保証されています。
・タブフォーカスとエンターキー・スペースキーでの開閉操作ができる
・サイト内で単語検索を行うと、検索した単語の含まれるアコーディオンが開き、中身の単語に直接移動することができる
・スクリーンリーダーが開閉状態について適切に読み上げてくれる

■セマンティックなマークアップができる

detailsタグとsummaryタグを使用することで、コンテンツの意味や役割を明示的に表現することが可能です。コンテンツの意味や役割を明示的に表現することで、SEO対策にも役立ちます。

< detailsタグとsummaryタグを使用する際の注意点 >

detailsタグとsummaryタグを利用することで簡単にアコーディオンメニューを実装できますが、detailsタグとsummaryタグを使う際に注意しておきたい点があります。
以下ではdetailsタグとsummaryタグを使う際の注意点を紹介します。

■CSSアニメーションは一部不安定な面ある

detailsタグでは問題ありませんが、detailsタグ内のコンテンツへanimationやtrainsitionを設定すると、動きが少し不安定になります(2023年4月時点)。動きにこだわりたい人はJavaScript(jQuery)を使用して調整することをおすすめします。

■JavaScript(jQuery)でのopen属性操作する場合はデフォルトの挙動を無効化する

JavaScript(jQuery)でopen属性を付けたり外したりする場合は、detailsタグ・summaryタグのデフォルトの挙動を無効化する必要があります。詳細な記述は、HTML/CSS/jQueryを使用したサンプルコードを確認してください。

< アコーディオンメニューは、SEOに悪影響がある? >

アコーディオンメニューのように初期状態で隠れている非表示コンテンツは、SEO観点で問題がないものなのでしょうか?
結論として、アコーディオンメニューがSEOに悪影響を与えることはないと思われます。

検索エンジンは、ウェブサイト上のすべてのコンテンツをクロールすることができ、アコーディオンメニュー内のコンテンツも正常にクロールします。
また、Googleは「ユーザーがストレスを感じずに使えるウェブサイトであること」を重要視しており、正しいアコーディオンの実装は使いやすいウェブサイトの構築にもつながります。

ただし過去には、非表示コンテンツはインデックスされなかったり、評価が下がったりすることがありました。これは、Googleが「見えていないということは、それほど重要ではないだろう」と判断していたためです。
今後もGoogleの判断によっては影響が出ることも考えられるので、気になる人は注視しておきましょう。

< まとめ >

detailsタグとsummaryタグを使用して、HTMLのみで実装できるシンプルなものからCSSやjQueryを使用して見た目や動きにもこだわるアコーディオンを、合計10種実装しました。
ご自身の状況や環境を加味して使ってみてください。

DXO株式会社では一緒に働く
仲間を募集しています!

DXO株式会社ではWeb開発エンジニア、Webディレクター、Webデザイナーなど様々な職種で一緒に働く仲間を募集しています。
募集要項・福利厚生など、詳しくはDXO株式会社採用サイトをご覧ください。

最大50万円のお祝い金を進呈中!

詳しくはこちら

関連記事