ZeroPlus Gateについて

\ シェア /

FacBook
Twitter
LINE
はてブ
PPocket
ZeroPlus Media > Web制作 > HTML/CSS > 【JavaScript不要】CSSだけでアコーディオンメニューを作る方法

【JavaScript不要】CSSだけでアコーディオンメニューを作る方法

HTML/CSS

2022/02/15

2023/04/20

CSS アコーディオン記事サムネイル

アコーディオンメニューはクリック時に項目を表示させる機能です。必要な情報をすぐに得られるためユーザーに優しい設計となります。

アコーディオンメニューの作成はjQueryを使う場合が多いですが、HTMLとCSSのみでも実装可能です。JavaScriptが苦手な方も簡単に作成できます。

この記事ではJavaScriptが苦手な方でもアコーディオンメニューを作成できるよう、HTMLとCSSのみを用いる方法を解説します。

この記事で身につく内容
  • CSSでアコーディオンメニューを作成する方法
  • CSSでアコーディオンメニューを作成する時の応用
  • CSSでアコーディオンメニューを作成するメリット・デメリット

ZeroPlus Gateについて

プログラミング学習でこのような経験はありませんか?

  1. 目標に向けて何を学べば良いかわからない
  2. 調べても解決策が見つからない
  3. 現場レベルのスキルが身につくのか不安

これらの悩みは、学習環境を整えることで全て解決することができます。

ZeroPlus Gateでは、30日間無料で最適な学習環境を提供しています。

  1. なんでも相談できる専属メンター
  2. いつでも技術相談ができるプロ講師
  3. 元IT企業CTO監修のカリキュラム

条件なしでこのレベルの環境を無料で提供しているのはZeroPlus Gateだけです。
ただし、無料サービスの提供には参加者の数に制限があります。

少しでも興味がある方は、以下のリンクからサービスの詳細をご覧ください。

今すぐZeroPlus Gateの詳細を見る

CSSでアコーディオンメニューを作成する方法

デモ

クリック時に項目を開くアコーディオンメニューです。こちらを例として解説していきます。

See the Pen cssアコーディオン by ZeroPlus (@zeroplus-programming) on CodePen.

HTMLとCSSをそれぞれ以下で解説します。

HTML

<input id="check-a" type="checkbox" class="check">
<label class="label "for="check-a">テキストが入ります。</label>
<p class="text">テキストが入ります。</p>
<input id="check-b" type="checkbox" class="check">
<label class="label "for="check-b">テキストが入ります。</label>
<p class="text">テキストが入ります。</p>
<input id="check-c" type="checkbox" class="check">
<label class="label "for="check-c">テキストが入ります。</label>
<p class="text">テキストが入ります。</p>
<input id="check-d" type="checkbox" class="check">
<label class="label "for="check-d">テキストが入ります。</label>
<p class="text">テキストが入ります。</p>

ポイントは以下の2つです。

  • <input>タグのtype属性の値を"checkbox"にする
  • <input>タグのid属性の値と<label>タグのfor属性の値を合わせる

<input>タグのtype属性の値を"checkbox"にする

アコーディオンメニューはクリックで項目を開く機能です。このとき、クリックされたかどうかを判定する機能が重要となります。

本来JavaScriptを使用して実装しますが、HTMLとCSSのみで実装する場合はcheckboxの機能を利用します。

checkboxにはクリックされたかどうか判定する機能が備わっています。この機能を利用するため各項目にcheckboxの記述をします。

<input>タグのid属性の値と<label>タグのfor属性の値と合わせる

<input>タグのid属性の値と<label>タグのfor属性の値を同じ名前にすることでお互いを結びつけます。表示している項目にcheckboxの機能を追加するためです。

アコーディオンメニューにcheckboxが表示されていると見栄えも使い勝手も悪くなります。そのためcheckboxはCSSで非表示にします。checkboxの機能は表示している項目に結びついているので、非表示にしてもクリックの判定は可能です。

このようにして各項目をクリックしたかどうかを判定する機能を追加します。

CSS

CSSを用いて、通常時とクリックされた時の表示分けをします。

.check{
   display: none;
}

.label{
   background: rgb(9, 9, 94);
   color: #fff;
   display: flex;
   align-items: center;
   margin-bottom: 10px;
   height: 50px;
   padding: 20px;
}

.text{
   background: orange;
   display: flex;
   align-items: center;
   height: 0;
   overflow: hidden;
   margin-bottom: 10px;
   transition: 0.5s;
}

.check:checked + .label + .text{
   height: 60px;
   padding: 20px;
}

CSSでは項目の表示・非表示を切り替えるスタイルとアニメーションを追加します。隣接クラスタを使用してクリック時にスタイルを付与します。

ポイントは以下の2つです。

  • display: none;でcheckboxを非表示にする
  • 隣接クラスタの指定でクリック時にスタイルを付与する

display: none;でcheckboxを非表示にする

checkboxの表示は不要なのでdisplay: none;で非表示にします。

.check{
   display: none;
}

隣接クラスタの指定でクリック時にスタイルを付与する

クリックした状態は擬似クラスの:chekedで指定できます。加えて隣接クラスタでチェックされている項目の隣の要素を取得します。

擬似クラスの使い方とセレクタの指定方法はそれぞれ以下の記事で詳しく解説しています。ぜひ学習にお役立てください。

擬似クラスの解説記事

セレクタの指定方法の解説記事

隣接クラスタは隣の要素を取得する指定方法です。checkから2つ隣のtextにスタイルを指定するには以下のように記述します。

.check:checked + .label + .text{
   height: 80px;
   padding: 20px;
}

クラスタの+が2つあることがポイントです。このような書き方で、チェックされた項目(check)の隣の要素(label)の隣の要素(text)にスタイルを指定できます。

ZeroPlusgate50教材の動画

CSSでアコーディオンメニューを作成する時の応用

この記事で紹介したサンプルではtransitonプロパティを使用しています。項目を開く時のアニメーションを追加するためです。このようにtransitionを使用すると要素にアニメーションを追加できます。アコーディオンメニューにも有効なので学習してみましょう。

transitionの使い方はこちらの記事で詳しく解説しています。

CSSでアコーディオンメニューを作成するメリット・デメリット

HTMLとCSSのみでアコーディオンメニューを作成するメリットはJavaScriptの記述が不要な点です。JavaScriptが苦手な方でも簡単に作成することができます。

しかしHTMLとCSSのみだと実装できる動きに限りがあります。例えば1つの項目を開く時に他の項目を閉じる動きは実装できません。

JavaScriptでアコーディオンメニューを作成すれば実装できる動きの幅が広がります。苦手意識のある方でも一度チャレンジしてみてはいかがでしょう。

下記記事ではJavaScript(jQuery)を用いたアコーディオンメニューの実装方法を解説しています。

まとめ

アコーディオンメニューはFAQやQ&Aでよく使われる機能です。HTMLとCSSだけで簡単に実装することができるのでぜひ試してみてください。

CSSでアコーディオンメニューを作成する方法まとめ

  • HTMLのcheckboxを使用してクリック判定機能をつける
  • <label>タグをcheckboxと結びつける
  • checkbox自体は非表示にする
  • 隣接クラスタでクリック時にスタイルを付与する
ZeroPlus Gateについて

プログラミング学習でこのような経験はありませんか?

  1. 目標に向けて何を学べば良いかわからない
  2. 調べても解決策が見つからない
  3. 現場レベルのスキルが身につくのか不安

これらの悩みは、学習環境を整えることで全て解決することができます。

ZeroPlus Gateでは、30日間無料で最適な学習環境を提供しています。

  1. なんでも相談できる専属メンター
  2. いつでも技術相談ができるプロ講師
  3. 元IT企業CTO監修のカリキュラム

条件なしでこのレベルの環境を無料で提供しているのはZeroPlus Gateだけです。
ただし、無料サービスの提供には参加者の数に制限があります。

少しでも興味がある方は、以下のリンクからサービスの詳細をご覧ください。

今すぐZeroPlus Gateの詳細を見る

\ 学んだことをSNSでシェアしよう /

この記事の執筆者

ZeroPlus Media変種部

ZeroPlus Media編集部

ZeroPlusは、「フリーランス特化型プログラミングスクール」です。ZeroPlus Mediaでは、フリーランスとして活躍する際に役立つ有益なプログラミングやWeb制作に関する情報を発信しています。

質問について

ZeroPlus Media読者限定で質問対応をおこなっています。以下の2つの方法で質問を受け付けています。

選べる2つの質問方法

1

Google Foam(テキスト)で質問

mail

フォーム送信

メールで解答

formで質問
2

Google meet(オンラインmtg)で質問

meet

日時選択

メールを受け取る

メールからmtgに参加

meetで質問
ZeroPlus Gateについて

あなたの目的に合わせた2つのサービス

あなたの目的に合わせたZeroPlusの2つのサービス
基礎からフリーランスレベルまで本質的な学びを提供しています

完全無料!30日間で学びきれる
プログラミンスクールZeroPlus Gate

  • お金をかけずに、学習を進めたい
  • Webサイトを作れるようになりたい
  • メンターや講師に質問しながら学習したい

詳しくはこちらから

フリーランス特化型
プログラミングスクール ZeroPlus

  • プログラミング学習で悩んでいる
  • 仲間と一緒に学習したい
  • フリーランスとしての総合的な力を養いたい

詳しくはこちらから