CSSでアコーディオンメニューを作る方法:クリックで開閉

HTML/CSS

今回は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タグから読み込みが必要です。詳しくは以下。


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

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

2020年5月14日HTML/CSSCSS,HTML,WEB

Posted by KT