1つだけ開ける縦長アコーディオンを左方向に開く方法
1つだけ開ける縦長アコーディオンを左方向に開く方法を紹介します。このサンプルでは、HTML・CSS・JavaScriptを使用し、縦長の見出しボタンをクリックすると、その左側へ対応する内容が表示されるアコーディオンを作成します。別の項目をクリックすると、開いていた項目は自動で閉じて新しく選択した項目が開くため、常に1つの内容だけを表示できます。
サービス内容、料金プラン、お問い合わせ情報など、複数の項目を横方向へ並べながら詳細を左側へ展開したい場面に利用できます。複数の内容が同時に開かないため、表示領域が必要以上に広がりにくく、現在確認している項目も分かりやすくなります。開いている縦長ボタンをもう一度クリックすると、その項目を閉じてすべて閉じた状態へ戻すこともできます。
HTMLではタイトル、説明文、縦長ボタンの文字、左側へ表示する見出しや本文を変更できます。CSSでは全体の横幅、余白、背景色、枠線、角丸、縦長ボタンの幅や高さ、左側へ開く内容の横幅などを調整できます。JavaScriptではクリックした項目以外を閉じてから選択した項目を開閉する処理を行い、表示領域を超えた場合はアコーディオン部分を横方向へスクロールして確認できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
縦長のボタンをクリックすると左側へ内容が開きます。別の項目を開くと、開いていた項目は自動で閉じます。
縦長のボタンをクリックすると左側へ内容が開きます。別の項目をクリックすると現在の項目が閉じ、選択した項目だけが開きます。横幅を超えた場合は横方向へスクロールして確認できます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コードを指定 -->
<meta charset="UTF-8">
<!-- 画面幅に合わせて表示 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>1つだけ開ける縦長アコーディオンを左方向に開く</title>
<!-- CSSファイルを読み込み -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- アコーディオン全体 -->
<div class="single-vertical-accordion-open-left_wrap">
<!-- タイトル -->
<div class="single-vertical-accordion-open-left_title">
1つだけ開ける縦長アコーディオンを左方向に開く
</div>
<!-- 説明文 -->
<p class="single-vertical-accordion-open-left_text">
縦長のボタンをクリックすると左側へ内容が開きます。別の項目を開くと、開いていた項目は自動で閉じます。
</p>
<!-- 横スクロールエリア -->
<div class="single-vertical-accordion-open-left_area">
<div class="single-vertical-accordion-open-left_buttons">
<!-- サービス -->
<div class="single-vertical-accordion-open-left_item">
<button class="single-vertical-accordion-open-left_button" type="button">
サービス
</button>
<div class="single-vertical-accordion-open-left_content">
<h3>サービス</h3>
<p>
サービスの詳細情報をボタンの左側へ表示できます。
</p>
</div>
</div>
<!-- 料金 -->
<div class="single-vertical-accordion-open-left_item">
<button class="single-vertical-accordion-open-left_button" type="button">
料金
</button>
<div class="single-vertical-accordion-open-left_content">
<h3>料金</h3>
<p>
料金やプランの補足情報を左方向へ表示できます。
</p>
</div>
</div>
<!-- お問い合わせ -->
<div class="single-vertical-accordion-open-left_item">
<button class="single-vertical-accordion-open-left_button" type="button">
問合せ
</button>
<div class="single-vertical-accordion-open-left_content">
<h3>お問い合わせ</h3>
<p>
お問い合わせに関する情報を左側へ表示できます。
</p>
</div>
</div>
</div>
</div>
</div>
<!-- JavaScriptファイルを読み込み -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは「サービス」「料金」「問合せ」の縦長ボタンと、それぞれの左側へ表示する内容を作成します。CSSでは縦書きボタン、横並びのレイアウト、左方向へ開く内容、横スクロールなどを設定し、JavaScriptでは常に1つのアコーディオンだけが開くように制御します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはアコーディオン全体を構成するファイルです。タイトル、説明文、「サービス」「料金」「問合せ」のボタン文字、左側へ表示する見出しと本文を変更できます。各項目は縦長ボタンと内容部分を1つのまとまりとして配置しています。
style.cssはアコーディオンのレイアウトとデザインを設定するファイルです。全体の最大横幅、余白、背景色、枠線、角丸、縦長ボタンの横幅と高さ、左側へ表示する内容の横幅などを変更できます。flex-direction:row-reverse;によって内容をボタンの左側へ配置し、writing-mode:vertical-rl;でボタン文字を縦書きにしています。また、overflow-x:auto;によって表示幅を超えた場合はアコーディオン部分を横スクロールできます。
script.jsは1つだけ開ける動作を制御するファイルです。縦長ボタンをクリックすると、最初にすべての項目からis-openクラスを削除し、そのあとクリックした項目だけを開きます。すでに開いている項目をもう一度クリックした場合は、その項目も閉じるため、すべて閉じた状態へ戻すこともできます。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。3つのファイルを保存したあと、sample/index.htmlをブラウザで開いてください。「サービス」「料金」「問合せ」の縦長ボタンをクリックすると、選択した項目の内容がボタンの左側へ表示されます。
別の縦長ボタンをクリックすると、現在開いている項目が自動で閉じ、新しくクリックした項目だけが開きます。開いているボタンをもう一度クリックすると内容が閉じます。表示領域を超えた場合は、アコーディオン部分を横方向へスクロールして確認できます。
カスタマイズできる内容
index.htmlでは全体のタイトル、説明文、各縦長ボタンの文字、左側へ表示する見出しと本文を変更できます。「サービス」「料金」「問合せ」を用途に合わせた項目名へ変更したり、各項目の説明文章を書き換えたりできます。
style.cssでは全体の最大横幅、余白、背景色、枠線、角丸、項目同士の間隔、縦長ボタンの横幅と高さ、内容部分の横幅や余白、文字色、行間などを変更できます。JavaScriptではクリックした項目以外を閉じてから対象項目を開く処理によって、同時に複数の内容が表示されないようにしています。
数値調整
style.css
max-width:700px;
アコーディオン全体の最大横幅です。値を大きくすると表示領域が横に広がり、小さくするとコンパクトになります。
margin:40px auto;
アコーディオン全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
アコーディオン全体の内側余白です。値を大きくすると内容と外枠の間隔が広がり、小さくすると狭くなります。
border-radius:18px;
アコーディオン全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
タイトルの文字サイズです。値を大きくするとタイトルが大きくなり、小さくすると控えめになります。
margin:0 0 24px;
説明文の下側余白です。24pxを大きくするとアコーディオンとの間隔が広がり、小さくすると狭くなります。
min-height:260px;
横スクロール表示エリアと縦長ボタンの最小高さです。値を大きくすると縦方向に長くなり、小さくすると低くなります。
gap:12px;
各アコーディオン項目の間隔です。値を大きくすると項目同士の間隔が広がり、小さくすると近くなります。
width:64px;
縦長ボタンの横幅です。値を大きくするとボタンが太くなり、小さくすると細くなります。
padding:16px 10px;
縦長ボタンの内側余白です。上下の16pxと左右の10pxを変更すると、文字や記号とボタン端との間隔が変わります。
margin-top:10px;
ボタン内の文字と「+」「-」記号の間隔です。値を大きくすると間隔が広がり、小さくすると近くなります。
width:260px;
左側へ表示する内容部分の横幅です。値を大きくすると左方向へ広く開き、小さくするとコンパクトになります。
padding:18px;
内容部分の内側余白です。値を大きくすると文章と枠線の間隔が広がり、小さくすると狭くなります。
font-size:18px;
内容部分の見出し文字サイズです。値を大きくすると見出しが大きくなり、小さくすると小さくなります。
margin:0 0 10px;
内容部分の見出し下側の余白です。10pxを大きくすると本文との間隔が広がります。
line-height:1.8;
内容部分の本文の行間です。値を大きくすると行間が広がり、小さくすると詰まった表示になります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:700pxによって、アコーディオン全体が画面幅に合わせて縮小されます。アコーディオン部分にはoverflow-x:auto;を設定しているため、表示領域を超えた場合でもページ全体ではなくアコーディオン部分だけを横スクロールできます。
また、画面幅640px以下ではpadding:24px 18px;へ変更して内側余白を小さくしています。スマートフォン・タブレット・PCで利用でき、狭い画面でも横スクロールを使って左方向へ開いた内容を確認できます。
コメント