デフォルトのラジオボタンのスタイルはブラウザによって差異があり、スタイルを統一させるにはCSSでカスタマイズする必要があります。
今回はその方法をご紹介します。
前回チェックボックスのスタイリング方法を紹介したのですが、ほぼ同じ方法です!
サンプル【コピペOK】
See the Pen CSS Radio Button by POSIPAN (@posipan) on CodePen.
解説
HTML
ラジオボタン1つ分のHTMLです。
ラジオボタンとラベルは下記のように隣接させてください。
ラジオボタンはチェックボックスと違い、グループ内で複数選択ができないので、グループ内ラジオボタンのname
属性の値は統一してください。
<div class="radio_item">
<input type="radio" name="radio" class="radio" id="radio01" checked>
<label for="radio01">Item1</label>
</div>
input
タグのid
属性、label
タグのfor
属性には同じ値を設定します。
これによりラベルとラジオボタンがリンクされ、ラベルをクリックした際にラジオボタンも反応するようになります。
SCSS
以下はラジオボタンに関連する全体のCSSになります。SCSSで記述しています。
.radio {
display: none; // ラジオボタンを非表示
&:checked {
+ label {
&:after {
opacity: 1;
}
}
}
}
label {
position: relative;
padding-left: 45px;
font-family: 'Lato', sans-serif;
font-size: 28px;
cursor: pointer;
color: #121212;
&:before,
&:after {
content: "";
position: absolute;
display: block;
}
// ラジオボタンの枠
&:before {
top: 50%;
left: 0;
transform: translate(0, -50%);
width: 30px;
height: 30px;
border-radius: 50%;
border: 3px solid #30475E;
}
// チェックサイン
&:after {
top: 6px;
left: 8px;
width: 20px;
height: 20px;
border-radius: 50%;
background: #30475E;
opacity: 0;
}
}
ラジオボタンはdisplay: none;
で非表示にします。
.radio {
display: none; // ラジオボタンを非表示
&:checked {
+ label {
&:after {
opacity: 1;
}
}
}
}
label
要素に対して疑似要素を割り当てます。疑似要素before
でラジオボタンの枠、同じく疑似要素のafter
でチェックサインを作成します。
チェックサインはopacity: 0;
で非表示にします。
label {
position: relative;
padding-left: 45px;
font-family: 'Lato', sans-serif;
font-size: 28px;
cursor: pointer;
color: #121212;
&:before,
&:after {
content: "";
position: absolute;
display: block;
}
// ラジオボタンの枠
&:before {
top: 50%;
left: 0;
transform: translate(0, -50%);
width: 30px;
height: 30px;
border-radius: 50%;
border: 3px solid #30475E;
}
// チェックサイン
&:after {
top: 6px;
left: 8px;
width: 20px;
height: 20px;
border-radius: 50%;
background: #30475E;
opacity: 0;
}
}
以下はラジオボタンを非表示にする説明で記載したコードと同じです。
label要素で擬似的に作成したラジオボタンにチェックが入ると、display: none;
で非表示にした本来のラジオボタン(input
要素)にもチェックが入るようになります。
.radio {
display: none; // ラジオボタンを非表示
&:checked {
+ label {
&:after {
opacity: 1;
}
}
}
}
おわりに
ちなみにラジオボタンは、画像のようなラジオのプッシュボタンと同じように動作することからラジオボタンと呼ばれているそうです。
他のボタンを押すと、ONになっていたボタンはOFFになるんですね。
ではまた✋