開閉アイコンが90度回転するアコーディオンを作る方法【HTML/CSS/JavaScript・サンプルコード付き】

アコーディオン
無料ツール
アコーディオンを自由に作成

見出し・内容・開閉方法・色・サイズ・アイコンなどを設定して、HTML・CSS・JavaScriptを自動生成できます。

アコーディオン作成ツールを使う
新しいタブで開きます

開閉アイコンが90度回転するアコーディオンを作る方法

開閉アイコンが90度回転するアコーディオンを作る方法を紹介します。このサンプルでは、HTML・CSS・JavaScriptを使用し、見出しをクリックすると右側の開閉アイコンが右向きから下向きへ90度回転しながら、対応する内容を表示・非表示に切り替えます。アイコンは文字記号を使用せずCSSの2本の線で作成するため、フォントによる位置のずれを抑えながら見出しの右側へ配置できます。

閉じている状態では開閉アイコンが右向きになり、項目を開くと90度回転して下向きになります。再度クリックすると元の右向きへ戻り、内容も閉じます。それぞれの項目は個別に開閉できるため、FAQ、商品説明、お問い合わせページ、会員サイトのヘルプ、管理画面の設定項目など、必要な情報だけを展開して見せたい場面で利用できます。

HTMLではタイトル、説明文、各見出し、開閉する本文を変更できます。CSSではアコーディオンの横幅や余白、背景色、角丸のほか、開閉アイコンの大きさ、線の太さ、色、90度回転するアニメーション時間を調整できます。JavaScriptではクリックした項目の開閉状態を切り替えます。レスポンシブにも対応しているため、スマートフォン・タブレット・PCで利用できるアコーディオンとして活用できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

開閉アイコンが90度回転するアコーディオン

見出しをクリックすると、右側の開閉アイコンが90度回転します。

クリックした項目の内容を表示・非表示に切り替えられるUIです。

FAQ、商品説明、お問い合わせページ、管理画面などで利用できます。

CSSで作った開閉アイコンが、項目の開閉に合わせて右向きから下向きへ90度回転します。

各見出しをクリックすると内容が開閉し、右側の開閉アイコンが90度回転する動きを確認できます。

コードをコピーして使おう!

<!DOCTYPE html>
<html lang="ja">
<head>

  <!-- 文字コード -->
  <meta charset="UTF-8">

  <!-- スマートフォン表示対応 -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- ページタイトル -->
  <title>開閉アイコンが90度回転するアコーディオン</title>

  <!-- CSSファイルを読み込み -->
  <link rel="stylesheet" href="style.css">

</head>
<body>

  <!-- アコーディオン全体 -->
  <div class="rotate-90-icon-accordion_wrap">

    <!-- タイトル -->
    <div class="rotate-90-icon-accordion_title">
      開閉アイコンが90度回転するアコーディオン
    </div>

    <!-- 説明文 -->
    <p class="rotate-90-icon-accordion_text">
      見出しをクリックすると、右側の開閉アイコンが90度回転します。
    </p>

    <!-- 1つ目の項目 -->
    <div class="rotate-90-icon-accordion_item">

      <!-- 開閉ボタン -->
      <button
        class="rotate-90-icon-accordion_button"
        type="button"
        aria-expanded="false">

        <span>アコーディオンとは?</span>

        <!-- 開閉アイコン -->
        <span
          class="rotate-90-icon-accordion_icon"
          aria-hidden="true">
        </span>

      </button>

      <!-- 開閉する内容 -->
      <div class="rotate-90-icon-accordion_content">

        <div class="rotate-90-icon-accordion_content-inner">

          <p class="rotate-90-icon-accordion_content-text">
            クリックした項目の内容を表示・非表示に切り替えられるUIです。
          </p>

        </div>

      </div>

    </div>

    <!-- 2つ目の項目 -->
    <div class="rotate-90-icon-accordion_item">

      <!-- 開閉ボタン -->
      <button
        class="rotate-90-icon-accordion_button"
        type="button"
        aria-expanded="false">

        <span>どんな場面で使う?</span>

        <!-- 開閉アイコン -->
        <span
          class="rotate-90-icon-accordion_icon"
          aria-hidden="true">
        </span>

      </button>

      <!-- 開閉する内容 -->
      <div class="rotate-90-icon-accordion_content">

        <div class="rotate-90-icon-accordion_content-inner">

          <p class="rotate-90-icon-accordion_content-text">
            FAQ、商品説明、お問い合わせページ、管理画面などで利用できます。
          </p>

        </div>

      </div>

    </div>

    <!-- 3つ目の項目 -->
    <div class="rotate-90-icon-accordion_item">

      <!-- 開閉ボタン -->
      <button
        class="rotate-90-icon-accordion_button"
        type="button"
        aria-expanded="false">

        <span>アイコンの特徴は?</span>

        <!-- 開閉アイコン -->
        <span
          class="rotate-90-icon-accordion_icon"
          aria-hidden="true">
        </span>

      </button>

      <!-- 開閉する内容 -->
      <div class="rotate-90-icon-accordion_content">

        <div class="rotate-90-icon-accordion_content-inner">

          <p class="rotate-90-icon-accordion_content-text">
            CSSで作った開閉アイコンが、項目の開閉に合わせて右向きから下向きへ90度回転します。
          </p>

        </div>

      </div>

    </div>

  </div>

  <!-- JavaScriptファイルを読み込み -->
  <script src="script.js"></script>

</body>
</html>
コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
A

Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。

InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではアコーディオンのタイトル、説明文、各見出し、開閉する本文、右側の開閉アイコンを配置します。CSSではアコーディオン全体のデザインと、2本の線で作成した開閉アイコンの形や90度回転するアニメーションを設定します。JavaScriptでは見出しをクリックした項目へis-openクラスを付け外しし、本文の開閉とaria-expandedの状態を切り替えます。

sample/
├── index.html
├── style.css
└── script.js

各ファイルの役割
index.htmlはアコーディオン全体を構成するファイルです。タイトル、説明文、「アコーディオンとは?」「どんな場面で使う?」「アイコンの特徴は?」の各見出しと、開いたときに表示する本文を変更できます。開閉アイコンは文字記号を使用せず、空のspan要素を配置してCSSから表示します。

style.cssはアコーディオン全体と開閉アイコンのデザインを設定するファイルです。全体の横幅、余白、背景色、枠線、角丸、見出しの高さ、本文の表示速度などを変更できます。開閉アイコンは疑似要素の2本の線で作成し、閉じている状態では右向き、開いた状態では90度回転して下向きになるよう設定しています。

script.jsはアコーディオンの開閉処理を行うファイルです。見出しをクリックすると、その項目のis-openクラスを切り替えます。同時にaria-expandedへ現在の開閉状態を反映します。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。3つのファイルを保存したあと、sample/index.htmlをブラウザで開いてください。各見出しをクリックすると対応する本文が開閉し、右側の開閉アイコンが右向きから下向きへ90度回転します。再度同じ見出しをクリックすると本文が閉じ、アイコンも元の右向きへ戻ります。それぞれの項目は個別に開閉できます。

カスタマイズできる内容
index.htmlではタイトル、説明文、各見出し、開閉後に表示する本文を変更できます。アコーディオン項目を増やしたい場合は、rotate-90-icon-accordion_itemのまとまりを同じ構成で追加できます。

style.cssではアコーディオン全体の最大横幅、余白、背景色、枠線、角丸、見出しの高さや文字サイズを変更できます。開閉アイコンについては、領域の大きさ、見出し文字との間隔、2本の線の長さや太さ、色、回転時間を調整できます。本文の開閉時間やスマートフォン用の余白も変更できます。

script.jsでは、クリックした項目ごとにis-openクラスを切り替える処理を行っています。現在のコードでは複数の項目を同時に開くことができます。

数値調整
style.css
max-width:700px;
アコーディオン全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。

margin:40px auto;
アコーディオン全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。

padding:32px;
アコーディオン全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。

border-radius:18px;
アコーディオン全体の角丸です。値を大きくすると丸みが強くなります。

margin:0 0 12px;
各アコーディオン項目の下側余白です。12pxを大きくすると項目同士の間隔が広がります。

min-height:56px;
見出しボタンの最小高さです。値を大きくすると各見出しが高くなります。

padding:16px 18px;
見出しボタンの内側余白です。上下16px、左右18pxを変更すると見出し内の余白を調整できます。

width:22px;・height:22px;
開閉アイコンを配置する領域の大きさです。値を大きくするとアイコンを配置できる範囲が広がります。

margin-left:16px;
見出し文字と開閉アイコンの間隔です。値を大きくするとアイコンが文字から離れます。

transform:rotate(-90deg);
閉じている状態の開閉アイコンを右向きにする設定です。CSSで作成した下向きの形を-90度回転させています。

transition:transform .35s ease;
開閉アイコンが回転するアニメーション時間です。0.35秒で変化します。値を大きくするとゆっくり、小さくすると速く回転します。

width:12px;
開閉アイコンを構成する2本の線の長さです。値を大きくするとアイコンが大きく見えます。

height:3px;
開閉アイコンを構成する線の太さです。値を大きくすると線が太くなります。

transform:rotate(45deg);とtransform:rotate(-45deg);
2本の線を斜めに配置してシェブロン形状を作る角度です。

transform:rotate(0deg);
項目を開いたときの開閉アイコンの角度です。閉じた状態の-90度から0度へ変化するため、右向きから下向きへ90度回転します。

transition:grid-template-rows .4s ease;
本文を開閉するアニメーション時間です。0.4秒で変化します。値を大きくするとゆっくり、小さくすると速く開閉します。

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:700pxによって、画面幅に合わせてアコーディオン全体が縮小します。また、640px以下では全体のpaddingを24px 18px、見出しボタンのpaddingを14px、本文の左右余白を14pxへ変更しています。スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント