立体的なくぼみがあるラジオボタンを作る方法
HTMLとCSSを使って、内側へくぼんで見える立体的なラジオボタンを作る方法を紹介します。通常のラジオボタンはブラウザ標準のデザインで表示されますが、CSSで標準の見た目を解除することで、選択部分の形や影、色などを自由に変更できます。本記事では、複数の選択肢から1つだけ選択できるラジオボタン本来の動作を保ちながら、立体感のあるデザインへ変更します。
サンプルでは、ラジオボタンの外側に内向きの影を設定し、表面から内側へくぼんでいるような見た目にしています。項目を選択すると、くぼみの中央へ青色の丸が表示されます。JavaScriptは使用せず、HTMLのradio要素とCSSの:checkedを利用して選択状態に応じた表示を切り替えます。
アンケートや設定画面、申込みフォームなど、複数の候補から1つを選択する場面で利用できます。ラジオボタンの基本的な操作方法はそのままなので、別の項目を選択すると現在の選択が解除され、新しく選んだ項目だけが選択状態になります。影の大きさや色、中央に表示する丸のサイズなどをCSSで変更すれば、サイトのデザインに合わせて調整できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
ラジオボタンを選択すると、くぼみの中央に青色の丸が表示されます。別の項目をクリックすると選択が切り替わる動作を確認できます。
コードをコピーして使おう!
<!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="three-dimensional-recessed-radio-button_wrap">
<!-- タイトル -->
<div class="three-dimensional-recessed-radio-button_title">
好きな言語を選択
</div>
<!-- 説明文 -->
<p class="three-dimensional-recessed-radio-button_text">
立体的なくぼみがあるラジオボタンから1つ選択できます。
</p>
<!-- HTMLの選択肢 -->
<label class="three-dimensional-recessed-radio-button_label">
<input class="three-dimensional-recessed-radio-button_input" type="radio" name="language" checked>
<span class="three-dimensional-recessed-radio-button_name">HTML</span>
</label>
<!-- CSSの選択肢 -->
<label class="three-dimensional-recessed-radio-button_label">
<input class="three-dimensional-recessed-radio-button_input" type="radio" name="language">
<span class="three-dimensional-recessed-radio-button_name">CSS</span>
</label>
<!-- JavaScriptの選択肢 -->
<label class="three-dimensional-recessed-radio-button_label">
<input class="three-dimensional-recessed-radio-button_input" type="radio" name="language">
<span class="three-dimensional-recessed-radio-button_name">JavaScript</span>
</label>
<!-- PHPの選択肢 -->
<label class="three-dimensional-recessed-radio-button_label">
<input class="three-dimensional-recessed-radio-button_input" type="radio" name="language">
<span class="three-dimensional-recessed-radio-button_name">PHP</span>
</label>
</div>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTMLとCSSの2ファイルで構成されています。HTMLでは「HTML」「CSS」「JavaScript」「PHP」の4つの選択肢を持つラジオボタンを作成し、CSSではブラウザ標準のラジオボタンデザインを変更して、内側へくぼんで見える立体的なデザインを作ります。JavaScriptは使用せず、HTMLのradio要素とCSSの:checkedを利用して選択状態を表示します。
sample/
├── index.html
└── style.css
各ファイルの役割
index.htmlはラジオボタン全体を構成するファイルです。タイトル、説明文、「HTML」「CSS」「JavaScript」「PHP」の4つの選択肢を配置しています。すべてのradio要素へ同じname="language"を指定しているため、4つの選択肢から1つだけを選択できます。最初のHTMLにはcheckedを指定しているため、ページを開いた時点ではHTMLが選択された状態になります。
style.cssはラジオボタン全体、各選択肢、ラジオボタン本体のデザインを設定するファイルです。appearance:none;でブラウザ標準のラジオボタンデザインを解除し、box-shadowへinsetを指定して内側へくぼんだ見た目を作ります。選択時は:checked::afterによって中央の青い丸を表示します。
設置方法・使い方
sampleフォルダへindex.htmlとstyle.cssを配置します。2つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssを読み込む構成になっているため、JavaScriptや外部ライブラリを用意する必要はありません。
ページを開くと4つのラジオボタンが表示されます。選択したい項目をクリックすると、その項目だけが選択状態になり、ラジオボタンの中央へ青い丸が表示されます。別の項目をクリックすると、それまでの選択が解除され、新しくクリックした項目へ選択状態が切り替わります。
カスタマイズできる内容
index.htmlでは「好きな言語を選択」のタイトル、説明文、「HTML」「CSS」「JavaScript」「PHP」の選択肢を変更できます。選択肢を追加する場合は同じ構造のlabel要素を追加し、radio要素へ同じname="language"を指定することで、追加した項目も同じグループから1つだけ選択できるようになります。
style.cssでは全体の横幅や余白、選択肢の間隔、枠線、角丸、ラジオボタンの大きさ、くぼみを作る影、選択時に表示する中央の丸の大きさや色を変更できます。特にラジオボタンのbox-shadowを変更すると、内側の影の位置や広がりを調整できます。
数値調整
style.css
max-width:640px;
ラジオボタン全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
ラジオボタン全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
ラジオボタン全体の内側余白です。値を大きくすると内容と外枠の間隔が広がり、小さくすると詰まった表示になります。
border-radius:18px;
ラジオボタン全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
タイトルの文字サイズです。値を大きくすると文字が大きくなり、小さくすると控えめになります。
margin:0 0 24px;
説明文の下側余白です。24pxを大きくすると説明文と最初の選択肢との間隔が広がり、小さくすると狭くなります。
gap:12px;
ラジオボタンと選択肢の文字との間隔です。値を大きくすると間隔が広がり、小さくすると近くなります。
padding:14px 16px;
各選択肢の内側余白です。上下の14pxを大きくすると選択肢が高くなり、左右の16pxを大きくするとラジオボタンや文字と外枠との間隔が広がります。
margin-bottom:14px;
各選択肢の下側余白です。14pxを大きくすると選択肢同士の間隔が広がり、小さくすると狭くなります。
border-radius:10px;
各選択肢の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
width:20px;・height:20px;
ラジオボタン本体の大きさです。値を大きくするとラジオボタンが大きくなり、小さくすると小さくなります。
inset 3px 3px 5px
ラジオボタンのくぼみを作る内側の影です。最初の3pxは横方向、次の3pxは縦方向の位置、5pxはぼかしの大きさです。横・縦方向の値を大きくすると影の位置が変わり、ぼかしの値を大きくすると影が広がります。
width:10px;・height:10px;
選択時にラジオボタン中央へ表示する青い丸の大きさです。値を大きくすると丸が大きくなり、小さくすると小さくなります。
box-shadow:0 2px 4px rgba(30,64,175,.35);
選択状態を表す青い丸の影です。2pxを大きくすると影が下方向へ移動し、4pxを大きくすると影のぼかしが広がります。
font-size:16px;
選択肢の文字サイズです。値を大きくすると文字が大きくなり、小さくすると文字が小さくなります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:640pxによって、画面幅に合わせてラジオボタン全体が縮小されます。また、640px以下ではメディアクエリによって内側余白をpadding:20px;へ変更しています。画面幅が狭いスマートフォンでは余白を抑え、タブレットやPCでは通常の余白で表示される構成です。
コメント