画像クリックで選択できるチェックボックスを作る方法
画像クリックで選択できるチェックボックスをHTMLとCSSだけで作る方法を紹介します。通常のチェックボックスではなく、画像全体をクリックして複数の項目を選択できるUIです。選択した画像には青い枠線とチェックマークが表示されるため、現在の選択状態をひと目で確認できます。
このサンプルでは、画像の取得先としてPicsum Photosを使用し、6枚の画像をカード状に並べています。各画像とチェックボックスをlabel要素で関連付けているため、画像のどこをクリックしても選択状態を切り替えられます。JavaScriptや外部ライブラリを使用せず、HTMLとCSSだけで複数選択に対応しています。
ECサイトの商品画像選択、会員サイトの興味カテゴリー設定、アンケートフォーム、管理画面の画像分類など、文字だけでは内容を判断しにくい選択項目に利用できます。HTMLでは画像URLや選択肢の数、初期選択を変更でき、CSSではカードの大きさ、列数、余白、角丸、選択色を調整できます。画面幅に応じて3列、2列、1列へ切り替わるため、スマートフォン・タブレット・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>
<!-- 同じsampleフォルダ内に配置したstyle.cssを読み込む -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 画像クリックで選択できるラジオボタン全体 -->
<div class="image-select-radio-button_wrap">
<!-- 選択エリアのタイトル。用途に合わせて文章を変更可能 -->
<div class="image-select-radio-button_title">
好きな画像を選択
</div>
<!-- 操作方法を案内する説明文。用途に合わせて文章を変更可能 -->
<p class="image-select-radio-button_text">
画像をクリックすると選択状態が切り替わります。
</p>
<!-- 6つの画像選択ラジオボタン一覧 -->
<div class="image-select-radio-button_list">
<!-- 画像1の選択項目 -->
<div class="image-select-radio-button_item">
<!--
画像1を選択するラジオボタン
id:
このラジオボタン専用の重複しないIDを指定する。
下にあるlabelのfor属性にも同じ文字列を指定する。
name:
6個すべてに同じ名前を指定することで、1つだけ選択できる。
別のラジオボタングループと分けたい場合は、この6個すべてを同じ別名へ変更する。
value:
フォーム送信時に送信する値を指定する。
image1の部分は、用途に合った半角英数字へ変更する。
-->
<input
class="image-select-radio-button_input"
id="image-select-radio-button_1"
type="radio"
name="selected-image"
value="image1">
<!--
画像1をクリック可能にするラベル
for:
上のinputに指定したidと同じ文字列を入力する。
値が一致していない場合、画像をクリックしても選択されない。
-->
<label
class="image-select-radio-button_label"
for="image-select-radio-button_1">
<!--
画像1を表示するimg要素
src:
表示したい画像ファイルの場所を入力する。
sample/images/image1.jpgへ画像を置く場合は、
src="images/image1.jpg"
と入力する。
外部サイトの画像URLを使う場合は、
src="https://example.com/images/image1.jpg"
のように画像の完全なURLを入力する。
alt:
画像の内容を説明する文章を入力する。
画像が表示できない場合や、音声読み上げ時に使用される。
「画像1」ではなく、「山と湖の風景」のように具体的に入力する。
-->
<img
class="image-select-radio-button_image"
src="images/image1.jpg"
alt="画像1の内容を説明する文章">
<!-- 画像1の下に表示する項目名。用途に合わせて変更可能 -->
<span class="image-select-radio-button_name">
画像1
</span>
</label>
</div>
<!-- 画像2の選択項目 -->
<div class="image-select-radio-button_item">
<!--
画像2を選択するラジオボタン
idとlabelのforは同じ文字列にする。
valueはフォーム送信時に使用する値へ変更する。
-->
<input
class="image-select-radio-button_input"
id="image-select-radio-button_2"
type="radio"
name="selected-image"
value="image2">
<!-- forには上のinputと同じidを指定する -->
<label
class="image-select-radio-button_label"
for="image-select-radio-button_2">
<!--
srcには画像2の保存場所または画像URLを入力する。
sample/images/image2.jpgを使う場合は、
src="images/image2.jpg"
と入力する。
altには画像2の内容が分かる具体的な説明を入力する。
-->
<img
class="image-select-radio-button_image"
src="images/image2.jpg"
alt="画像2の内容を説明する文章">
<!-- 画像2の下に表示する項目名 -->
<span class="image-select-radio-button_name">
画像2
</span>
</label>
</div>
<!-- 画像3の選択項目 -->
<div class="image-select-radio-button_item">
<!--
画像3を選択するラジオボタン
初期選択は設定していないため、ページ表示時はどれも未選択になる。
-->
<input
class="image-select-radio-button_input"
id="image-select-radio-button_3"
type="radio"
name="selected-image"
value="image3">
<!-- forには上のinputと同じidを指定する -->
<label
class="image-select-radio-button_label"
for="image-select-radio-button_3">
<!--
srcには画像3の保存場所または画像URLを入力する。
sample/images/image3.jpgを使う場合は、
src="images/image3.jpg"
と入力する。
altには画像3の内容が分かる具体的な説明を入力する。
-->
<img
class="image-select-radio-button_image"
src="images/image3.jpg"
alt="画像3の内容を説明する文章">
<!-- 画像3の下に表示する項目名 -->
<span class="image-select-radio-button_name">
画像3
</span>
</label>
</div>
<!-- 画像4の選択項目 -->
<div class="image-select-radio-button_item">
<!--
画像4を選択するラジオボタン
idとlabelのforは同じ文字列にする。
valueはフォーム送信時に使用する値へ変更する。
-->
<input
class="image-select-radio-button_input"
id="image-select-radio-button_4"
type="radio"
name="selected-image"
value="image4">
<!-- forには上のinputと同じidを指定する -->
<label
class="image-select-radio-button_label"
for="image-select-radio-button_4">
<!--
srcには画像4の保存場所または画像URLを入力する。
sample/images/image4.jpgを使う場合は、
src="images/image4.jpg"
と入力する。
altには画像4の内容が分かる具体的な説明を入力する。
-->
<img
class="image-select-radio-button_image"
src="images/image4.jpg"
alt="画像4の内容を説明する文章">
<!-- 画像4の下に表示する項目名 -->
<span class="image-select-radio-button_name">
画像4
</span>
</label>
</div>
<!-- 画像5の選択項目 -->
<div class="image-select-radio-button_item">
<!--
画像5を選択するラジオボタン
idとlabelのforは同じ文字列にする。
valueはフォーム送信時に使用する値へ変更する。
-->
<input
class="image-select-radio-button_input"
id="image-select-radio-button_5"
type="radio"
name="selected-image"
value="image5">
<!-- forには上のinputと同じidを指定する -->
<label
class="image-select-radio-button_label"
for="image-select-radio-button_5">
<!--
srcには画像5の保存場所または画像URLを入力する。
sample/images/image5.jpgを使う場合は、
src="images/image5.jpg"
と入力する。
altには画像5の内容が分かる具体的な説明を入力する。
-->
<img
class="image-select-radio-button_image"
src="images/image5.jpg"
alt="画像5の内容を説明する文章">
<!-- 画像5の下に表示する項目名 -->
<span class="image-select-radio-button_name">
画像5
</span>
</label>
</div>
<!-- 画像6の選択項目 -->
<div class="image-select-radio-button_item">
<!--
画像6を選択するラジオボタン
idとlabelのforは同じ文字列にする。
valueはフォーム送信時に使用する値へ変更する。
-->
<input
class="image-select-radio-button_input"
id="image-select-radio-button_6"
type="radio"
name="selected-image"
value="image6">
<!-- forには上のinputと同じidを指定する -->
<label
class="image-select-radio-button_label"
for="image-select-radio-button_6">
<!--
srcには画像6の保存場所または画像URLを入力する。
sample/images/image6.jpgを使う場合は、
src="images/image6.jpg"
と入力する。
altには画像6の内容が分かる具体的な説明を入力する。
-->
<img
class="image-select-radio-button_image"
src="images/image6.jpg"
alt="画像6の内容を説明する文章">
<!-- 画像6の下に表示する項目名 -->
<span class="image-select-radio-button_name">
画像6
</span>
</label>
</div>
</div>
<!-- 選択状態を案内する補足文。用途に合わせて文章を変更可能 -->
<p class="image-select-radio-button_note">
選択中の画像カードだけ枠線と背景色が変わり、常に1つだけ選択できます。
</p>
</div>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTMLとCSSの2ファイルで構成されており、画像をクリックして選択できるラジオボタンを作成できます。画像ファイルはsample/imagesフォルダへ配置して利用する構成です。HTMLでは画像や選択肢を管理し、CSSではカードデザインや選択時の装飾、レスポンシブ表示を設定しています。JavaScriptを使用しないため、シンプルな構成で導入やカスタマイズが行えます。
sample/
├── index.html
├── style.css
└── images/
├── image1.jpg
├── image2.jpg
├── image3.jpg
├── image4.jpg
├── image5.jpg
└── image6.jpg
各ファイルの役割
index.htmlは画像付きラジオボタンの構造を管理します。画像ファイルのパス(src)、画像説明(alt)、表示するタイトル、ラジオボタンのvalueなどを編集できます。
style.cssはカードデザイン、画像サイズ、枠線、背景色、文字サイズ、余白、選択時の装飾、レスポンシブ表示など見た目を管理します。
imagesフォルダには表示したい画像ファイルを保存します。HTMLのsrc属性へ指定した画像ファイル名と一致させることで表示できます。
設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを配置し、imagesフォルダを作成して画像ファイルを保存します。HTML内のsrc属性へ保存した画像ファイル名を指定したら、sample/index.htmlをブラウザで開くだけで利用できます。画像をクリックすると対応するラジオボタンが選択され、常に1つだけ選択できます。
カスタマイズできる内容
index.htmlでは画像ファイル、画像URL、alt属性、項目名、タイトル、説明文、選択肢の追加・削除、value属性を変更できます。style.cssではカードサイズ、画像サイズ、背景色、枠線、文字色、角丸、余白、カード間隔、選択時の色などを自由に調整できます。
数値調整
style.cssのmax-widthは全体の最大横幅です。値を変更すると全体の表示幅が変わります。
gapはカード同士の間隔です。値を変更するとカード間の余白が変わります。
paddingはカード内側の余白です。値を変更すると画像や文字との余白が変わります。
border-radiusはカードや画像の角丸です。値を変更すると丸みが変わります。
transform: translateY()は選択時にカードが浮き上がる距離です。値を変更すると移動量が変わります。
transition:0.3s;はアニメーション時間です。0.3秒で切り替わり、値を大きくするとゆっくり、小さくすると速く切り替わります。
レスポンシブ対応
style.cssではmedia queryを使用し、画面幅に応じてカードの列数やレイアウトを自動調整します。また、画像はwidth:100%で表示されるため、スマートフォン・タブレット・PCでもレイアウトが崩れず利用できます。
コメント