覚えると便利!アコーディオンをcssのみで作る方法

覚えると便利!アコーディオンをcssのみで作る方法
まずは次の動画をご覧ください。


↑こちらのアコーディオンですが、JavaScriptの介在は全くなく、「cssのみ」で実装されています。

今回は、この「cssのみ」で実装するアコーディオンの制作方法について
記事を書いていきたいと思います。

cssのみで実装するアコーディオン。まずはhtml

では早速、cssのみで実装するアコーディオンを制作する方法です。
まずはhtml構造から書いていきます。

<div class="accordion-container">
  <div class="accordion-parent-thumbnail">
    <img class="accordion-parent-thumbnail-item" src=“./thumbnail.png” alt="サムネイル">
  </div>
  <p>このような本文があります。詳しくは次の通り。</p>
  <input class="accordion-input" type="checkbox" id="toggleAccordion" />
  <label class="accordion-label" for="toggleAccordion">
    <span class="accordion-label-text">アコーディオンを開く</span>
  </label>
  <div class="accordion-body">
    <h2>見出し</h2>
    <p class="accordion-text">アコーディオン、実はcssだけで作れます。</p>
    <p class="accordion-text">アコーディオン、実はcssだけで作れます。</p>
    <p class="accordion-text">アコーディオン、実はcssだけで作れます。</p>
    <p class="accordion-text">アコーディオン、実はcssだけで作れます。</p>
    <p class="accordion-text">アコーディオン、実はcssだけで作れます。</p>
  </div>
 </div>

↑見てわかる通り、html側はいたってシンプルな構造です。
1行目が全体を包括する親要素。
2~4行目はカード型レイアウト内のサムネイル要素。なくても構いません。
5行目はカード型レイアウト内の本文。これもお好みで。

重要なのが6~9行目
このinput要素とlabel要素の関係性により、アコーディオンを操作します。
具体的な方法はcssの部分にて。

10行目~18行目が、アコーディオンを開いた際に表示される中身です。

htmlの構造自体は何か特別難しいものではない、という事がわかったところで、
続いてはcssについて書いていきます。

cssのみで実装するアコーディオン。cssについて

重要なのがこちら。
どのようにcssを書けば、冒頭の動画のような
「cssのみ」で実装するアコーディオン
を制作することができるのか。

早速、cssのコードを見てみましょう。

tedate Premiumとは?

「tedate Premium」 とは、tedate.jp 閲覧時に掲示される
広告を非表示にする事ができたり、会員限定記事が閲覧可能になる、
月額制の会員機能です。

こちらを閲覧するには、tedate Premiumにご登録ください。
登録済みの方のログインページはこちら
tedate Premiumのご説明・新規ご登録は次のリンクよりお進みください。
tedate Premium のご紹介


↑まず、1行目~3行目。これは単純にcssリセットです。
サイト制作の際、cssリセットは大抵済んでいると思いますので
この部分はお好みで。

続く4〜20行目までは、カード型レイアウトのスタイリングです。
こちらも好きなようにスタイリングをアレンジできる部分です。

そして21〜85行目まで。この .accordion-input から始まる部分。
inputタグとlabelタグに関する記述から始まる、この部分が本題です。

ここで登場するセレクタで重要なのが
+ 隣接セレクタ(隣接兄弟結合子とも)
そして
~ 一般兄弟セレクタ(一般兄弟結合子とも)
↑この2つです。

具体的には、
type=”checkbox” である要素、 .accordion-input の制御と、
それと連動するラベルの挙動、

そして、それを押した時に開く
アコーディオンの中身の表示のさせ方の定義

などをおこなっています。

それでは順に見ていきましょう。

tedate Premiumとは?

「tedate Premium」 とは、tedate.jp 閲覧時に掲示される
広告を非表示にする事ができたり、会員限定記事が閲覧可能になる、
月額制の会員機能です。

こちらを閲覧するには、tedate Premiumにご登録ください。
登録済みの方のログインページはこちら
tedate Premiumのご説明・新規ご登録は次のリンクよりお進みください。
tedate Premium のご紹介

…と、いう事です。
この様に、checked属性になった際に
+ (隣接セレクタ)
そして
~ (一般兄弟セレクタ)
この2つを上手に利用する事で、冒頭の動画のような
「cssのみ」で実装するアコーディオン
を実現することができるというわけです。

「+ (隣接セレクタ)」 と「~ (一般兄弟セレクタ)」に関する解説

Web制作界隈でおなじみ、
mozillaが運営する優れたオンラインリファレンス、MDNでの

+ (隣接セレクタ)
~ (一般兄弟セレクタ)

についての解説ページは次のリンクになります。

隣接兄弟結合子 – CSS: カスケーディングスタイルシート | MDN

一般兄弟結合子 – CSS: カスケーディングスタイルシート | MDN

↑こちらのMDNによる解説は、具体例付きでとてもわかりやすいと思います。
熟読すると特に、
+ (隣接セレクタ)
~ (一般兄弟セレクタ)
「どういった条件の時に使えるのか」「どういう挙動をするのか」
といった点についての理解が深まるかと思います。

この記事のまとめ

今回は、冒頭の動画のような
「cssのみ」で実装するアコーディオンの制作方法について、記事を書きました。

記事内でも書いていますが、
今回ご紹介した
+ (隣接セレクタ)
~ (一般兄弟セレクタ)
↑これらの挙動をよく理解して、その使い方を熟達することで、
JavaScriptにおける、 true か false の条件によるUIの変更
の様なことが、
「cssのみでほぼ実現できてしまう」
ということをご自身でも実感できるかと思います。

私自身、この方法に気がついた後で、過去担当した案件について思い出し
JavaScript で実装していたアコーディオンに関して、
全然cssだけでいけたじゃん!あの工数ほんともったいない!!

と感じたケースが結構ありますので、
覚えておくと、様々な実際のWeb制作の場面で役に立つことと思います。

この記事が皆さんのより良いWeb制作体験につながれば、嬉しく思います。

※この記事は内容の品質向上を目的に、随時更新を行う場合があります。

この記事をシェアする: