アコーディオンメニューをクリックした時の開け閉めを作る方法

Programming

今回はHTMLとCSSのみで下記の様なレスポンシブに対応したクリックで開き閉め出来るアコーディオンメニューを作成する方法を紹介します。

この様にクリック(マウスオーバー)したら隠れていたコンテンツが表示されるデザインをアコーディオンと言います。
そのアコーディオン内にリスト(li)タグなどで囲った要素を入れてメニュー風に見せているものをアコーディオン式メニューと言われています。

アコーディオンメニューは、グローバルナビゲーションやQ&A、その他コンテンツ内の小メニューなどで使われているイメージです。

企業系サイトでは、情報量の多いコンテンツをアコーディオン内にしまってスマートに見せるのが良いでしょう。ブログ記事では、当ブログの様にソースコードを載せる際などにアコーディオンにしまうとコンパクトで見易くなるかと思います。

それでは実際の書き方について紹介します。

アコーディオンメニューを作る方法

アコーディオンの作り方は「input」タグの「type=”checkbox”」を使用してチェックが付いたら中身が開くといった書き方をします。中身のメニューは何か特別な書き方は無くulタグとilタグでリストメニューを作成します。
これをCSSの「display: none;」で見た目を調整する事でラベルをクリックする事=チェックとなりアコーディオンメニュー風になります。

実際の書き方は以下の通りです。

HTML

<!--アコーディオンメニュー開始-->
<div class="acmenu">
<!--アコーディオンメニュー1-->
    <label for="acmenu_bar01" class="acmenu_bar" >アコーディオン1<div class="acicon"></div></label>
    <input type="checkbox" id="acmenu_bar01" class="accordion" /> <!--チェックボックス(重要)-->
<!--アコーディオンメニュー中身1-->
    <ul id="links01">
        <li><a href="">リンク01</a></li>
        <li><a href="">リンク02</a></li>
        <li><a href="">リンク03</a></li>
        <li><a href="">リンク04</a></li>
    </ul>
<!--アコーディオンメニュー2-->
    <label for="acmenu_bar02" class="acmenu_bar" >アコーディオン2(クリックで開く)<div class="acicon"></div></label>
    <input type="checkbox" id="acmenu_bar02" class="accordion" />  <!--チェックボックス(重要)-->
<!--アコーディオンメニュー中身1-->
    <ul id="links02">
        <li><a href="">Link01</a></li>
        <li><a href="">Link02</a></li>
        <li><a href="">Link03</a></li>
        <li><a href="">Link04</a></li>
    </ul>
</div>
<!--アコーディオンメニュー終了-->

CSS

.acmenu {
    max-width: 500px;
}
.acmenu a {
    display: block;
    padding: 15px;
    text-decoration: none;
    color: #000;
}
.acmenu_bar {
    display: block;
    margin: 0 0 4px 0;
    padding : 15px;
    line-height: 1;
    color :#fff;
    background : #e17b34;
    cursor :pointer;
    display: flex;
}
.accordion {
    display: none;
}
.acmenu ul {
    margin: 0;
    padding: 0;
    background :#eee;
    list-style: none;
}
.acmenu li {
    height: 0;
    overflow: hidden;
    -webkit-transition: all 0.5s;
    -moz-transition: all 0.5s;
    -ms-transition: all 0.5s;
    -o-transition: all 0.5s;
    transition: all 0.5s;
}
.acicon {
    padding:0 15px;
    border-left:1px solid #fff;
}
/*右側のアイコン*/
.acicon:before {
    font-family: 'Font Awesome 5 Free';
    font-weight: 900;
    content: '\f078';
}
/*チェックボックスをクリックした時に見える要素*/
#acmenu_bar01:checked ~ #links01 li,
#acmenu_bar02:checked ~ #links02 li {
    height: 54px;
    opacity: 1;
}

「#acmenu_bar01:checked ~ #links01 li」でクリック(チェックが付くと)すると「.acmenu li」部分の「height: 0;」が「height: 54px;」に変わるといった指定でアコーディオンメニュー風になっています。

注意すべき点は下記です。

  • 当たり前ですがクラス名が多いので一致してるかを確認。
  • CSSの59行目、60行目の「#acmenu_bar01:checked ~ #links01 li」の部分の指定をしっかりと開きたいLiのクラス名になっているか確認。
  • liタグのheightを0にする。
  • 「input」に「display: none;」を指定しないとチェックボックスが表示されてしまう。

「max-width」を500pxにしてるのでスマホ時でも綺麗に表示されるかと思います。
アイコンフォントに関してはFont Awesomeを使用してるので別途headタグから読み込みが必要です。詳しくは以下。


以上が「アコーディオンメニューをクリックした時の開け閉めを作る方法」でした。

WEB制作でよく使われるパターンなので覚えておきましょう。またブログサイトでもコンテンツ量が膨大になってきた時や、タグ、カテゴリーなどのリンクをスマートに見せる時などに使えるかと思います。

またBootstrapのクラスを使用すればより簡単にアコーディオンの作成が出来ます。
(Bootstrapの理解は必要になりますが…)

この記事を書いた人
KEITO

AI × IT × WEB3|関東在住。本職はディレクター 。AIを活用してビジネス開拓。仕事の依頼はTwitterからお願いします。YouTube、Twitter、Instagramもお願い致します。

Programming
この記事を共有する
スポンサーリンク
スポンサーリンク
KT LIFE
スポンサーリンク

暗号資産投資するなら以下

Bybit

国内人気No.1!屈強なサーバー/信頼性抜群!トレーダー御用達の取引所。

通貨数338種以上
レバレッジ最大100倍
現物取引手数料Maker:0%〜0.1%
Taker:0.02%〜0.1%
先物取引手数料Maker:0%〜0.01%
Taker:0.03%〜0.06%
操作性スマホでも取引・入金できる
口座開設簡単に口座開設できる
日本語対応日本語対応あり・JPY利用可
特典下記から登録で初回ボーナスあり
登録リンクBybitへの登録は こちら
招待コード22295
レビュー記事レビュー記事は こちら
BigBoss&CRYPTOS

最大レバレッジ1111倍・日本円換金ルート

通貨数BigBoss:15種以上
CRYPTOS:15種以上
レバレッジ最大1111倍
スポット手数料Maker:0.02%〜0.18%
Taker:0.05〜0.20%
先物取引手数料
操作性スマホでも取引・入金できる
口座開設少し敷居が高い
日本語対応日本語対応あり
特典下記から登録で初回ボーナスあり
登録リンクBigBossへの登録は こちら
招待コード6690951
レビュー記事レビュー記事は こちら
Nexo

高APYでのステーキング&レンディング

通貨数60種以上
レバレッジ
スポット手数料Maker:0.04%〜0.20%
Taker:0.03%〜0.20%
先物取引手数料
操作性スマホでも取引・入金できる
口座開設簡単に口座開設できる
日本語対応日本語対応あり
特典下記から登録で初回ボーナスあり
登録リンクNexoへの登録は こちら
招待コード
レビュー記事レビュー記事は こちら

他おすすめ取引所はこちら

タイトルとURLをコピーしました