選択肢をゆっくり表示するセレクトボックスを作る方法【HTML/CSS/JavaScript・サンプルコード付き】

セレクトボックス

選択肢をゆっくり表示するセレクトボックスを作る方法

選択肢をゆっくり表示するセレクトボックスを作る方法を紹介します。ボタンをクリックすると、配送方法の選択肢が上からふんわりと現れ、選択すると一覧がゆっくり閉じるカスタムセレクトボックスです。通常のselect要素では開いた選択肢へ自由なアニメーションを設定できないため、HTML・CSS・JavaScriptを使って独自の選択UIを実装します。

サンプルでは「宅配便」「メール便」「店頭受取」の3項目を用意し、選択した内容をボタン部分へ反映します。お問い合わせ画面、ECサイトの注文画面、会員サイトの設定画面、管理画面の絞り込みフォームなど、選択肢を急に表示せず、落ち着いた動きで案内したい場面に利用できます。

選択肢が開閉する時間、移動距離、背景色、枠線、角丸、表示項目はコードから変更できます。右側の矢印には画像を使用しており、一覧を開くと上下方向が切り替わります。画面幅に合わせて横幅が縮小するため、スマートフォン・タブレット・PCでも利用しやすい構成です。

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

デモ

配送方法を選択

セレクトボックスをクリックすると、選択肢がゆっくり表示されます。

選択中:未選択

「選択してください」をクリックすると、配送方法の選択肢がゆっくり表示されます。項目を選択すると、選択した内容がボタンと結果欄へ反映されます。

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

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

  <!-- 文字コードをUTF-8へ設定 -->
  <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="slow-options-selectbox">

    <!-- セレクトボックスエリアのタイトル -->
    <div class="slow-options-selectbox_title">
      配送方法を選択
    </div>

    <!-- 動作を案内する説明文 -->
    <p class="slow-options-selectbox_text">
      セレクトボックスをクリックすると、選択肢がゆっくり表示されます。
    </p>

    <!-- セレクトボックスのラベル -->
    <div
      class="slow-options-selectbox_label"
      id="slow-options-selectbox-label">
      配送方法
    </div>

    <!-- ボタン・選択肢・送信用データをまとめる要素 -->
    <div class="slow-options-selectbox_control">

      <!-- 選択肢一覧を開閉するボタン -->
      <button
        class="slow-options-selectbox_button"
        id="slow-options-selectbox-button"
        type="button"
        aria-labelledby="slow-options-selectbox-label slow-options-selectbox-value"
        aria-haspopup="listbox"
        aria-expanded="false"
        aria-controls="slow-options-selectbox-options">

        <!-- 現在の選択内容 -->
        <span id="slow-options-selectbox-value">
          選択してください
        </span>

        <!--
          右側の下向き矢印画像

          width="18" height="12"
          数値を大きくすると矢印画像が大きくなる
        -->
        <img
          class="slow-options-selectbox_arrow"
          src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='12' viewBox='0 0 18 12'%3E%3Cpath d='M1 1.5L9 10.5L17 1.5Z' fill='%230f172a'/%3E%3C/svg%3E"
          alt=""
          aria-hidden="true">

      </button>

      <!-- ゆっくり表示する選択肢一覧 -->
      <ul
        class="slow-options-selectbox_options"
        id="slow-options-selectbox-options"
        role="listbox"
        aria-labelledby="slow-options-selectbox-label">

        <!-- 宅配便 -->
        <li role="none">
          <button
            class="slow-options-selectbox_option"
            type="button"
            role="option"
            data-value="宅配便"
            aria-selected="false">
            宅配便
          </button>
        </li>

        <!-- メール便 -->
        <li role="none">
          <button
            class="slow-options-selectbox_option"
            type="button"
            role="option"
            data-value="メール便"
            aria-selected="false">
            メール便
          </button>
        </li>

        <!-- 店頭受取 -->
        <li role="none">
          <button
            class="slow-options-selectbox_option"
            type="button"
            role="option"
            data-value="店頭受取"
            aria-selected="false">
            店頭受取
          </button>
        </li>

      </ul>

      <!-- フォーム送信時に選択内容を渡す隠し入力欄 -->
      <input
        id="slow-options-selectbox-input"
        type="hidden"
        name="delivery"
        value="">

    </div>

    <!-- 現在の選択内容を表示する結果欄 -->
    <p
      class="slow-options-selectbox_result"
      id="slow-options-selectbox-result"
      aria-live="polite">
      選択中:未選択
    </p>

  </div>

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

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

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。JavaScriptでセレクトボックスをクリックした際に選択肢一覧をふんわり表示し、CSSでアニメーションやデザインを設定しています。HTMLは画面構成のみを担当しているため、それぞれの役割が分かれており、初心者でも編集しやすい構成です。

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

各ファイルの役割
index.htmlはセレクトボックスと画面全体のレイアウトを記述しています。表示する項目や説明文を変更したい場合はこのファイルを編集します。

style.cssはカードデザインやセレクトボックスの見た目、選択肢一覧のアニメーションを管理しています。色・サイズ・余白・角丸・影・アニメーション速度などを変更できます。

script.jsはセレクトボックスを開閉する処理や、選択した内容を表示する処理を担当しています。動作を変更したい場合はこのファイルを編集します。

設置方法・使い方
sampleフォルダをそのまま保存し、sample/index.htmlをブラウザで開くだけで利用できます。追加のライブラリやサーバー設定は不要で、HTML・CSS・JavaScriptのみで動作します。

カスタマイズできる内容
index.htmlでは選択肢の追加・削除・変更ができます。
style.cssでは背景色・文字色・枠線・角丸・余白・横幅・影・選択肢一覧の表示デザインを変更できます。
script.jsでは表示・非表示のタイミングや開閉処理を変更できます。

数値調整
style.css
transition: opacity 0.35s ease;
→ 0.35は選択肢一覧が表示・非表示になる時間です。0.7へ変更すると約0.7秒かけてゆっくり表示され、0.15へ変更すると素早く表示されます。

style.css
transform: translateY(10px);
→ 10pxは表示開始位置です。20pxへ変更すると少し下から表示され、5pxへ変更すると移動量が小さくなります。

style.css
border-radius:16px;
→ 16pxは角丸の大きさです。24pxへ変更すると丸みが強くなり、8pxへ変更すると角が少し四角くなります。

style.css
padding:16px 18px;
→ 16px・18pxはセレクトボックス内の余白です。数値を大きくすると高さや余白が広くなります。

レスポンシブ対応
このサンプルはレスポンシブ対応しています。style.cssでwidth:100%、max-width、paddingを利用しており、画面幅に合わせてレイアウトが自動調整されます。PC・タブレット・スマートフォンでも見やすいサイズで利用できます。


こちらもおすすめ


コメント