ページを移動しても開閉状態を記憶するアコーディオンの作り方

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

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

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

開閉状態を記憶するアコーディオンは、見出しをクリックして開いた項目や閉じた項目の状態を保存し、ページを再読み込みしても同じ状態を復元できる仕組みです。通常のアコーディオンとは異なり、再読み込みによってすべての項目が閉じることなく、最後に操作した状態がそのまま表示されます。

それぞれの見出しをクリックすると、対応する内容が表示・非表示に切り替わります。複数の項目を同時に開くことができ、1つの項目を閉じてもほかの項目には影響しません。開いている項目と閉じている項目は個別に記憶されるため、ページを再読み込みしたあとも、それぞれの開閉状態が維持されます。

今回のデモでは、3つの項目を自由に開閉できます。見出しを操作したあとに「再読み込み」ボタンをクリックすると、アコーディオン全体がフェードアウトし、保存された開閉状態でフェードインします。再表示後も操作前と同じ項目が開いていることを確認してみてください。

デモ

開閉状態を記憶するアコーディオン

各見出しをクリックすると開閉状態がlocalStorageへ保存されます。

アコーディオンは、見出しをクリックして内容の表示・非表示を切り替えられるUIです。
FAQ、商品説明、設定項目、お問い合わせページなど、情報を整理して表示したい場面で利用できます。
HTML、CSS、JavaScriptの3ファイルで作成できます。開閉状態の保存にはlocalStorageを使用します。

好きな項目を開閉したあと、「再読み込み」をクリックしてください。 アコーディオンが一度消え、保存された開閉状態のまま再表示されます。 ページ全体は再読み込みされません。

Q 他のアイコンを使いたい場合はどうするの?
A

無料のSVGアイコン作成ツールを使って、用途に合ったアイコンを作成できます。

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

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

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

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

  <!-- ページタイトル -->
  <title>ページを移動しても開閉状態を記憶するアコーディオン</title>

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

</head>
<body>

  <!-- アコーディオン全体 -->
  <div class="remember-accordion-state_wrap">

    <!-- タイトル -->
    <div class="remember-accordion-state_title">
      開閉状態を記憶するアコーディオン
    </div>

    <!-- 説明文 -->
    <p class="remember-accordion-state_text">
      各見出しをクリックすると開閉状態がlocalStorageへ保存されます。
    </p>

    <!-- アコーディオン項目1 -->
    <div class="remember-accordion-state_item" data-accordion-key="item1">

      <!-- 見出しボタン -->
      <button class="remember-accordion-state_button" type="button">
        アコーディオンとは?
      </button>

      <!-- 開閉する内容 -->
      <div class="remember-accordion-state_content">
        アコーディオンは、見出しをクリックして内容の表示・非表示を切り替えられるUIです。
      </div>

    </div>

    <!-- アコーディオン項目2 -->
    <div class="remember-accordion-state_item" data-accordion-key="item2">

      <!-- 見出しボタン -->
      <button class="remember-accordion-state_button" type="button">
        どんな場面で使う?
      </button>

      <!-- 開閉する内容 -->
      <div class="remember-accordion-state_content">
        FAQ、商品説明、設定項目、お問い合わせページなど、情報を整理して表示したい場面で利用できます。
      </div>

    </div>

    <!-- アコーディオン項目3 -->
    <div class="remember-accordion-state_item" data-accordion-key="item3">

      <!-- 見出しボタン -->
      <button class="remember-accordion-state_button" type="button">
        必要なファイルは?
      </button>

      <!-- 開閉する内容 -->
      <div class="remember-accordion-state_content">
        HTML、CSS、JavaScriptの3ファイルで作成できます。開閉状態の保存にはlocalStorageを使用します。
      </div>

    </div>

  </div>

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

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

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

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

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

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは3つのアコーディオン項目と見出しボタン、開閉する内容を作成します。CSSではアコーディオン全体の横幅や余白、枠線、角丸、開閉記号などを設定します。JavaScriptでは各項目を個別に開閉し、その状態をlocalStorageへ保存します。ページを移動したあとに戻った場合や再読み込みした場合でも、保存されている開閉状態を読み込んで復元します。

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

各ファイルの役割
index.htmlはアコーディオン全体を構成するファイルです。タイトル、説明文、各項目の見出し、開閉する内容を変更できます。各アコーディオン項目にはdata-accordion-keyを設定し、項目ごとに異なる保存キーを使用できるようにしています。

style.cssはアコーディオンのデザインを設定するファイルです。全体の横幅、余白、背景色、枠線、角丸、見出しボタンの文字サイズ、開閉記号の色やサイズ、内容部分の余白などを変更できます。is-openクラスが付いた項目だけ内容を表示し、開閉記号も「+」から「-」へ切り替えます。

script.jsはアコーディオンの開閉と状態保存を行うファイルです。ページ表示時にlocalStorageから各項目の保存状態を読み込み、openが保存されている項目へis-openクラスを追加します。見出しボタンをクリックすると開閉状態を切り替え、その結果をopenまたはclosedとしてlocalStorageへ保存します。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。各見出しをクリックすると対応する内容が個別に開閉し、その状態がブラウザのlocalStorageへ保存されます。項目を開閉したあとにページを再読み込みしたり、別ページへ移動してから戻ったりすると、最後に保存された開閉状態が復元されます。

カスタマイズできる内容
index.htmlでは「開閉状態を記憶するアコーディオン」のタイトル、説明文、各見出し、開閉する文章を変更できます。アコーディオン項目を追加する場合は、既存項目と同じ構造で追加し、data-accordion-keyへ他の項目と重複しない値を指定してください。

style.cssではアコーディオン全体の最大横幅、余白、背景色、枠線、角丸、見出しボタンの文字サイズ、開閉記号の色や大きさ、内容部分の文字色や行間などを変更できます。JavaScriptではlocalStorageへ保存するキーの接頭辞rememberAccordionState-を変更することで、他の保存データと区別する名前へ変更できます。

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

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

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

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

font-size:22px;
タイトルの文字サイズです。値を大きくするとタイトルが大きく表示されます。

margin:0 0 24px;
説明文の下側余白です。24pxを大きくすると最初のアコーディオン項目との間隔が広がります。

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

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

padding:16px 18px;
見出しボタンの内側余白です。16pxは上下、18pxは左右の余白です。値を大きくするとボタンが大きくなります。

font-size:16px;
見出しボタンの文字サイズです。値を大きくすると見出し文字が大きくなります。

margin-left:16px;
見出し文字と開閉記号の間隔です。値を大きくすると両者の間隔が広がります。

font-size:22px;
「+」「-」の開閉記号の文字サイズです。値を大きくすると記号が大きくなります。

padding:0 18px 18px;
開閉する内容部分の内側余白です。左右18px、下側18pxを設定しています。値を大きくすると文章と枠線の間隔が広がります。

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


こちらもおすすめ


コメント