セグメンテッドコントロール

UI コンポーネント Easy #css #toggle #segment

「日・週・月」のように複数の選択肢から1つを選ぶ、iOS風のセグメンテッドコントロールです。注目したいのは、これがJavaScriptを一切使わずCSSだけで成り立っている点です。同じ name のラジオボタンを隠し、 input:checked+label のセレクタで選ばれたラベルにだけ白い背景と影を付けて、押…

▶ プレビュー

解説

「日・週・月」のように複数の選択肢から1つを選ぶ、iOS風のセグメンテッドコントロールです。注目したいのは、これがJavaScriptを一切使わずCSSだけで成り立っている点です。同じnameのラジオボタンを隠し、input:checked+labelのセレクタで選ばれたラベルにだけ白い背景と影を付けて、押されている状態を表現しています。ラジオボタンの仕組みを使うので、常にどれか1つだけが選ばれます。

向いている用途

  • グラフやレポートの期間切り替え(日/週/月)
  • 表示の並び替えや表示形式の選択タブ
  • 2〜4個程度の排他的な切り替えスイッチ

選択肢を増やすには、ラジオとラベルの組をもう1セット同じ形で追加するだけです。transitionを付けているので切り替わりがなめらかに見えます。表示の見た目を切り替えるだけならこのままで十分ですが、選んだ値で実際にデータを出し分けたい場合は、各ラジオのchangeを拾うJSを別途足します。フォーム部品なのでキーボードの矢印キーでも移動でき、アクセシビリティ面でも素直な作りです。

使用例・適したシーン

  • お問い合わせフォームの送信ボタン
  • 資料ダウンロードの CTA
  • ヒーローセクションの主要 CTA
  • サブスク・申込ボタン

よくある質問

選択肢を4個以上に増やせますか。
増やせます。input(ラジオ)と label の組を、既存と同じ形でもう1セット追加するだけです。name を同じにしておけば、常にどれか1つだけが選ばれる状態が保たれます。
選んだ内容で表示を切り替えるにはJSが必要ですか。
見た目の選択状態の切り替えはCSSだけで動きます。ただし選んだ値に応じて実際のグラフやデータを出し分けたい場合は、ラジオの change を拾うJavaScriptを別途追加します。
追加日:2026-05-18
← すべてのスニペットへ戻る