画像クリックで選択できるラジオボタンを作る方法【HTML/CSS・サンプルコード付き】

ラジオボタン

画像クリックで選択できるチェックボックスを作る方法

画像クリックで選択できるチェックボックスをHTMLとCSSだけで作る方法を紹介します。通常のチェックボックスではなく、画像全体をクリックして複数の項目を選択できるUIです。選択した画像には青い枠線とチェックマークが表示されるため、現在の選択状態をひと目で確認できます。

このサンプルでは、画像の取得先としてPicsum Photosを使用し、6枚の画像をカード状に並べています。各画像とチェックボックスをlabel要素で関連付けているため、画像のどこをクリックしても選択状態を切り替えられます。JavaScriptや外部ライブラリを使用せず、HTMLとCSSだけで複数選択に対応しています。

ECサイトの商品画像選択、会員サイトの興味カテゴリー設定、アンケートフォーム、管理画面の画像分類など、文字だけでは内容を判断しにくい選択項目に利用できます。HTMLでは画像URLや選択肢の数、初期選択を変更でき、CSSではカードの大きさ、列数、余白、角丸、選択色を調整できます。画面幅に応じて3列、2列、1列へ切り替わるため、スマートフォン・タブレット・PCで利用できます。

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

デモ

好きな画像を選択

画像をクリックすると選択状態が切り替わります。

選択中の画像カードだけ枠線と背景色が変わり、常に1つだけ選択できます。

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

<!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でもレイアウトが崩れず利用できます。


こちらもおすすめ


コメント