カード型ラジオボタンを作る方法
カード型のラジオボタンを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で利用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
コードをコピーして使おう!
<!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 ダウンロードしたけど、これをネット上で動かすにはどうするの?
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を指定しているため、画面幅に合わせて縮小されます。
コメント