クリックすると枠線を強調するドロップダウンメニューの作り方
ドロップダウンメニューを開いたときに、現在操作している項目を分かりやすく強調したい場合があります。枠線や背景色を変化させることで、どのドロップダウンを操作しているのか視覚的に伝えやすくなります。
このサンプルでは、ボタンをクリックしてドロップダウンメニューを開くと、枠線・背景色・外側のリング・影を使って操作中の項目を強調します。別のドロップダウンを開いた場合は、強調表示も新しく開いた項目へ移動します。
HTMLでボタンと選択肢を作成し、CSSで強調表示やメニューのデザインを設定します。JavaScriptではメニューの開閉、選択した項目の表示、選択状態の切り替え、外側をクリックしたときに閉じる処理を実装します。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
各ドロップダウンをクリックすると、操作中の項目だけが強く表示されます。
ドロップダウンを開くと、枠線・背景色・外側のリング・影によって操作中の項目が強調表示されます。
3つのドロップダウンを順番にクリックし、現在開いている項目だけが強調表示される動作を確認できます。
コードをコピーして使おう!
<!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="focus-border-dropdown">
<!-- タイトル -->
<div class="focus-border-dropdown_title">
注文内容を選択
</div>
<!-- 説明文 -->
<p class="focus-border-dropdown_text">
各ドロップダウンをクリックすると、操作中の項目だけが強く表示されます。
</p>
<!-- ドロップダウン一覧 -->
<div class="focus-border-dropdown_list">
<!-- 都道府県 -->
<div class="focus-border-dropdown_item">
<div class="focus-border-dropdown_label">
都道府県
</div>
<div class="focus-border-dropdown_wrap">
<!-- 開閉ボタン -->
<button
class="focus-border-dropdown_button"
type="button"
aria-expanded="false">
選択してください
</button>
<!-- 選択肢 -->
<ul class="focus-border-dropdown_menu">
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
北海道
</button>
</li>
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
東京都
</button>
</li>
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
大阪府
</button>
</li>
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
福岡県
</button>
</li>
</ul>
</div>
</div>
<!-- 配送方法 -->
<div class="focus-border-dropdown_item">
<div class="focus-border-dropdown_label">
配送方法
</div>
<div class="focus-border-dropdown_wrap">
<!-- 開閉ボタン -->
<button
class="focus-border-dropdown_button"
type="button"
aria-expanded="false">
選択してください
</button>
<!-- 選択肢 -->
<ul class="focus-border-dropdown_menu">
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
通常配送
</button>
</li>
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
お急ぎ便
</button>
</li>
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
日時指定便
</button>
</li>
</ul>
</div>
</div>
<!-- 支払い方法 -->
<div class="focus-border-dropdown_item">
<div class="focus-border-dropdown_label">
支払い方法
</div>
<div class="focus-border-dropdown_wrap">
<!-- 開閉ボタン -->
<button
class="focus-border-dropdown_button"
type="button"
aria-expanded="false">
選択してください
</button>
<!-- 選択肢 -->
<ul class="focus-border-dropdown_menu">
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
クレジットカード
</button>
</li>
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
銀行振込
</button>
</li>
<li class="focus-border-dropdown_option">
<button
class="focus-border-dropdown_option-button"
type="button">
代金引換
</button>
</li>
</ul>
</div>
</div>
</div>
<!-- 補足文 -->
<p class="focus-border-dropdown_note">
ドロップダウンを開くと、枠線・背景色・外側のリング・影によって操作中の項目が強調表示されます。
</p>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは「都道府県」「配送方法」「支払い方法」の3つのドロップダウンを作成し、CSSでは通常時のデザインと、メニューを開いたときに枠線・背景色・外側のリング・影を使って操作中の項目を強調するデザインを設定します。JavaScriptでは、ドロップダウンの開閉、選択内容の反映、選択状態の切り替え、外側をクリックしたときに閉じる処理を行います。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはドロップダウン全体を構成するファイルです。「注文内容を選択」のタイトル、説明文、「都道府県」「配送方法」「支払い方法」の項目名、それぞれの選択肢、補足文を変更できます。各ドロップダウンは開閉用のbutton要素と、選択肢を並べるul・li要素で構成されています。
style.cssはドロップダウンのデザインを設定するファイルです。全体の横幅や余白、背景色、枠線、角丸のほか、開閉ボタン、矢印、ドロップダウンメニュー、選択肢のデザインを変更できます。メニューが開いているときは.is-openが付いた要素を対象に、開閉ボタンの枠線・背景色・外側のリング・影を変更して操作中の項目を強調します。
script.jsはドロップダウンの動作を設定するファイルです。開閉ボタンをクリックすると.is-openを付け外ししてメニューを開閉します。選択肢をクリックすると、その項目へ.is-selectedを付け、選択した文字を開閉ボタンへ反映してメニューを閉じます。また、別のドロップダウンを開いた場合は先に開いていたメニューを閉じ、ドロップダウンの外側をクリックした場合もすべてのメニューを閉じます。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。index.htmlからstyle.cssとscript.jsを読み込む構成になっているため、3つのファイルを保存したあと、sample/index.htmlをブラウザで開いてください。外部サービスや外部ライブラリは使用していないため、追加の設定は必要ありません。
表示された開閉ボタンをクリックすると、そのドロップダウンのメニューがボタンの下へ表示され、操作中のボタンが青い枠線・背景色・外側のリング・影で強調されます。選択肢をクリックすると選択した文字が開閉ボタンへ表示され、選択した項目の背景色と文字色も変化します。
カスタマイズできる内容
index.htmlでは、タイトル、説明文、項目名、選択肢、補足文を変更できます。たとえば「都道府県」の選択肢を変更したり、「配送方法」「支払い方法」を用途に合わせた別の項目へ変更したりできます。選択肢を増やす場合は、同じ.focus-border-dropdown_optionと.focus-border-dropdown_option-buttonの構造を追加します。
style.cssでは、ドロップダウン全体や各項目の横幅、余白、背景色、枠線、角丸、文字サイズを変更できます。.focus-border-dropdown_wrap.is-open .focus-border-dropdown_buttonでは、メニューを開いたときの枠線色、背景色、外側のリング、影を変更できます。また、選択肢のホバー時や選択中の背景色・文字色も調整できます。
数値調整
style.css
max-width:720px;
ドロップダウン全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
ドロップダウン全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:36px;
ドロップダウン全体の内側余白です。値を大きくすると内容と外枠の間隔が広がり、小さくすると狭くなります。
border-radius:18px;
ドロップダウン全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:30px;
タイトルの文字サイズです。値を大きくするとタイトルが大きくなり、小さくすると控えめになります。
gap:24px;
3つのドロップダウン項目の間隔です。値を大きくすると項目同士が離れ、小さくすると間隔が狭くなります。
padding:20px;
各ドロップダウン項目の内側余白です。値を大きくするとラベルや開閉ボタンと外枠の間隔が広がります。
min-height:58px;
開閉ボタンの最小高さです。値を大きくするとボタンが高くなり、小さくすると低くなります。
border:2px solid #cbd5e1;
開閉ボタンの通常時の枠線です。2pxを大きくすると枠線が太くなり、小さくすると細くなります。
border-radius:12px;
開閉ボタンの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
right:20px;
開閉ボタン内に表示する矢印の右端からの距離です。値を大きくすると矢印が左へ移動し、小さくすると右端へ近づきます。
width:10px;・height:10px;
開閉ボタンに表示する矢印の大きさです。値を大きくすると矢印が大きくなり、小さくすると小さくなります。
transition:.2s;
強調表示や矢印、ドロップダウンメニューが切り替わる時間です。0.2秒で変化します。値を大きくするとゆっくり、小さくすると速く切り替わります。
box-shadow:0 0 0 5px ...
メニューを開いたときに表示する外側のリングです。5pxを大きくするとリングの広がりが大きくなり、小さくすると控えめになります。
outline:3px solid #60a5fa;
メニューを開いたときに表示する外側の線です。3pxを大きくすると線が太くなり、小さくすると細くなります。
outline-offset:4px;
開閉ボタンと外側の線との間隔です。値を大きくすると線がボタンから離れ、小さくすると近づきます。
top:calc(100% + 12px);
開閉ボタンとドロップダウンメニューの間隔です。12pxを大きくするとメニューが下へ離れ、小さくするとボタンへ近づきます。
transform:translateY(-8px);
メニューが閉じている状態で上方向へ移動させる距離です。8pxを大きくすると表示時の移動量が大きくなり、小さくすると動きが控えめになります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:720pxにより、画面幅に合わせてドロップダウン全体が縮小されます。また、640px以下ではメディアクエリによってページ全体の余白を24px 12px、ドロップダウン全体の余白を24px 18pxへ変更し、タイトルを24pxへ縮小します。各項目や開閉ボタン、矢印の余白も小さい画面向けに調整しているため、スマートフォン・タブレット・PCで利用できます。
コメント