カード型ラジオボタンを作る方法【HTML/CSS・サンプルコード付き】

ラジオボタン
無料ツール
ラジオボタンを自由に作成

選択肢・並び方・ボタンの形・サイズ・色・余白・角丸などを設定して、HTML・CSSを自動生成できます。

ラジオボタン作成ツールを使う
新しいタブで開きます

カード型ラジオボタンを作る方法

カード型のラジオボタンをHTMLとCSSで作る方法を紹介します。このサンプルでは、「HTML」「CSS」「JavaScript」「PHP」「Python」「SQL」の6つの選択肢をカードとして表示し、複数のカードから1つだけを選択できるようにします。通常の丸いラジオボタンではなく、選択肢全体をカードとしてクリックできるため、項目名だけでなく簡単な説明も一緒に表示できます。

カード型にすると選択できる範囲を大きくでき、プラン選択、商品オプション、サービス選択、アンケート、設定画面など、選択肢ごとに補足情報を見せたい場面で利用できます。選択中のカードは背景色と文字色が変化するため、現在どの項目を選択しているのかを視覚的に確認できます。すべてのradio要素へ同じname属性を指定しているため、常に1つだけが選択されます。

HTMLではradio要素とlabel要素を組み合わせ、CSS Gridを使って6つのカードを3列で配置します。選択状態は:checkedを利用してカードのデザインを変更するため、JavaScriptは必要ありません。画面幅768px以下では2列、480px以下では1列へ切り替わるレスポンシブ対応も行い、スマートフォン・タブレット・PCで利用できます。

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

デモ

好きな言語を選択

カードをクリックすると選択状態が切り替わります。

選択中のカードだけ色が変化し、常に1つだけ選択できます。

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

<!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="card-radio-button_demo_wrap">

    <!-- タイトル -->
    <div class="card-radio-button_demo_title">
      好きな言語を選択
    </div>

    <!-- 説明文 -->
    <p class="card-radio-button_demo_text">
      カードをクリックすると選択状態が切り替わります。
    </p>

    <!-- カード一覧 -->
    <div class="card-radio-button_demo_list">

      <!-- HTML -->
      <div>
        <input class="card-radio-button_demo_input" id="card-radio-html" type="radio" name="card-language" value="html" checked>

        <label class="card-radio-button_demo_label" for="card-radio-html">
          <div class="card-radio-button_demo_name">HTML</div>
          <div class="card-radio-button_demo_desc">マークアップ</div>
        </label>
      </div>

      <!-- CSS -->
      <div>
        <input class="card-radio-button_demo_input" id="card-radio-css" type="radio" name="card-language" value="css">

        <label class="card-radio-button_demo_label" for="card-radio-css">
          <div class="card-radio-button_demo_name">CSS</div>
          <div class="card-radio-button_demo_desc">デザイン</div>
        </label>
      </div>

      <!-- JavaScript -->
      <div>
        <input class="card-radio-button_demo_input" id="card-radio-javascript" type="radio" name="card-language" value="javascript">

        <label class="card-radio-button_demo_label" for="card-radio-javascript">
          <div class="card-radio-button_demo_name">JavaScript</div>
          <div class="card-radio-button_demo_desc">動きを追加</div>
        </label>
      </div>

      <!-- PHP -->
      <div>
        <input class="card-radio-button_demo_input" id="card-radio-php" type="radio" name="card-language" value="php">

        <label class="card-radio-button_demo_label" for="card-radio-php">
          <div class="card-radio-button_demo_name">PHP</div>
          <div class="card-radio-button_demo_desc">サーバー処理</div>
        </label>
      </div>

      <!-- Python -->
      <div>
        <input class="card-radio-button_demo_input" id="card-radio-python" type="radio" name="card-language" value="python">

        <label class="card-radio-button_demo_label" for="card-radio-python">
          <div class="card-radio-button_demo_name">Python</div>
          <div class="card-radio-button_demo_desc">データ処理</div>
        </label>
      </div>

      <!-- SQL -->
      <div>
        <input class="card-radio-button_demo_input" id="card-radio-sql" type="radio" name="card-language" value="sql">

        <label class="card-radio-button_demo_label" for="card-radio-sql">
          <div class="card-radio-button_demo_name">SQL</div>
          <div class="card-radio-button_demo_desc">データベース</div>
        </label>
      </div>

    </div>

    <!-- 選択状態の説明 -->
    <p class="card-radio-button_demo_note">
      選択中のカードだけ色が変化し、常に1つだけ選択できます。
    </p>

  </div>

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

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

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

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

ファイル構成と設置方法

このサンプルはHTMLとCSSの2ファイルで構成されています。HTMLでは「HTML」「CSS」「JavaScript」「PHP」「Python」「SQL」の6つのradio要素とカードを配置し、CSS Gridを使って3列で表示します。標準のラジオボタンは視覚的に隠し、カード全体を選択肢として操作できるようにしています。

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

各ファイルの役割
index.htmlはカード型ラジオボタンを構成するファイルです。6つのradio要素には共通のname="card-language"を指定しているため、常に1つだけを選択できます。各radio要素のidとlabel要素のfor属性を対応させることで、カードをクリックして選択できるようにしています。HTMLにはcheckedを指定しているため、ページを開いた時点ではHTMLのカードが選択されています。

style.cssはカードのデザインと選択状態を設定するファイルです。通常は6つのカードを3列で表示し、:checkedを使って選択中のカードだけ背景色と文字色を変更します。また、:focus-visibleによってキーボード操作時にも現在のフォーカス位置を確認できます。

設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを配置します。2つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssを読み込む構成になっているため、JavaScriptや外部ライブラリは必要ありません。カードをクリックすると選択状態が切り替わり、選択中のカードだけ青色で表示されます。

カスタマイズできる内容
index.htmlではカードの項目名と説明文を変更できます。選択肢を追加する場合はradio要素と対応するlabel要素を追加し、同じグループとして扱うradio要素には共通のname属性を指定します。初期選択を変更する場合は、HTMLに付けているcheckedを別のradio要素へ移動します。

style.cssではカードの列数、間隔、内側余白、枠線、角丸、文字サイズ、選択中の背景色などを変更できます。grid-template-columnsで列数を設定し、:checkedのスタイルで選択中のカードデザインを調整できます。

数値調整
style.css
max-width:900px;
カード型ラジオボタン全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。

padding:32px;
全体の内側余白です。値を大きくするとカードと外枠との間隔が広がります。

font-size:30px;
タイトルの文字サイズです。値を大きくするとタイトルが大きくなり、小さくすると小さくなります。

grid-template-columns:repeat(3,1fr);
通常表示の列数です。3によって1行に3枚のカードを配置します。

gap:20px;
カード同士の縦横の間隔です。値を大きくするとカード同士が離れ、小さくすると近くなります。

padding:22px;
カード内の余白です。値を大きくするとカード内部の余白が広がります。

border:2px solid #d9e2ef;
カードの枠線です。2pxを大きくすると枠線が太くなります。

border-radius:16px;
カードの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。

font-size:20px;
カードの項目名の文字サイズです。値を大きくすると文字が大きくなります。

margin-top:8px;
項目名と説明文の間隔です。値を大きくすると上下の間隔が広がります。

transition:.3s
選択状態が変化するときの時間です。値を大きくするとゆっくり変化し、小さくすると素早く変化します。

レスポンシブ対応
このサンプルはレスポンシブ対応です。通常はgrid-template-columns:repeat(3,1fr);で3列に配置し、画面幅768px以下ではrepeat(2,1fr)へ変更して2列で表示します。さらに480px以下では1frへ変更して1列で表示します。全体にはwidth:100%とmax-width:900pxを指定しているため、画面幅に合わせて縮小されます。


こちらもおすすめ


コメント