コーディングをしているとサイトのデザインに合わせてチェックボックスやラジオボタンのデザインを変更してほしいという依頼をもらうことがあると思います。
デフォルトのチェックボックスやラジオボタンだとブラウザによって見た目が変わってきてしまいます。
そんなときにはcssでチェックボックスやラジオボタンのデザインを変更しましょう。
CSSでチェックボックスやラジオボタンを変更する
チェックボックスやラジオボタンのデザインを変更するのは大変そうと思う人もいるかもしれません。
そんなことはありません。
cssを使えばデザインを変更することができます。
チェックボックスやラジオボタンのデザインを変更するときにはlabelタグや疑似要素を使用します。
サイトのデザインに合わせてチェックボックスやラジオボタンの「デザインを自由に変えたい」、「ブラウザによるデフォルトのデザインに依存させたくない」ときにはcssでデザインを変えるメリットは大きいと思います。
デフォルトのチェックボックスとラジオボタン
まずはデフォルトのチェックボックスとラジオボタンを見てみましょう。
ブラウザによって見た目が違うと思います。
html
<p><label><input type="checkbox" value="テキストボックス"><span>テキストボックス</span></label></p>
<p><label><input type="radio" value="ラジオボタン"><span>ラジオボタン</span></label></p>
チェックボックスとラジオボタンの変更例1
html
<div class="checktype1">
<p>
<input name="checkbox1" type="checkbox" id="checkbox1" value="チェックボックス1">
<label class="checkbox" for="checkbox1">チェックボックス1</label>
</p>
<p>
<input name="radio1" type="radio" id="radio1" value="ラジオボタン">
<label class="radio" for="radio1">ラジオボタン</label>
</p>
</div>
css
.checktype1 input[type="checkbox"],
.checktype1 input[type="radio"]{display: none;}
/* checkbox */
.checktype1 input[type=checkbox] + label{
display: block;
padding-left: 35px;
position: relative;
font-size: 14px;
margin-bottom: 10px;
}
.checktype1 input[type=checkbox] + label::before{
content: "";
display: block;
position: absolute;
top: 2px;
left: 0;
width: 22px;
height: 22px;
border-radius: 5px;
border: 1px solid #ccc;
background: #fff;
}
.checktype1 input[type=checkbox]:checked + label::before{background: #c9678b;}
.checktype1 input[type=checkbox]:checked + label::after{
content: "";
display: block;
position: absolute;
top: 7px;
left: 8px;
width: 6px;
height: 10px;
border-bottom: solid 3px #fff;
border-right: solid 3px #fff;
transform: rotate(45deg);
}
/* radio */
.checktype1 input[type=radio] + label{
display: block;
margin-bottom: 10px;
padding-left: 35px;
position: relative;
font-size: 14px;
}
.checktype1 input[type=radio] + label::before{
content: "";
display: block;
position: absolute;
top: 2px;
left: 0;
width: 20px;
height: 20px;
border-radius: 50%;
border: 1px solid #ccc;
background: #fff;
}
.checktype1 input[type=radio]:checked + label::before{border: 1px solid #c9678b;}
.checktype1 input[type=radio]:checked + label::after{
content: "";
display: block;
position: absolute;
top: 8px;
left: 6px;
width: 10px;
height: 10px;
background: #c9678b;
border-radius: 50%;
}
チェックボックスとラジオボタンの変更例2
<div class="checktype2">
<label><input type="checkbox" value="テキストボックス2"><span>テキストボックス2</span></label>
<label><input type="radio" value="ラジオボタン2"><span>ラジオボタン2</span></label>
</div>
css
.checktype2 label{display: block;}
.checktype2{position: relative;}
.checktype2 input[type=radio],
.checktype2 input[type=checkbox] {
position: absolute;
left: 0;
top: 0.4em;
}
.checktype2 input[type='checkbox'] {
position: absolute;
left: 0;
top: 0.4em;
appearance: none;
box-sizing: border-box;
width: 20px;
height: 20px;
background: #f3f4f5;
box-shadow: none;
border: 1px solid #d8d8d8;
border-radius: 3px;
position: relative;
vertical-align: -6px;
transition: all 0.2s ease-in-out 0s;
cursor: pointer;
}
.checktype2 label span {
display: inline-block;
vertical-align: middle;
word-break: break-all;
}
.checktype2 input[type="radio"] {
appearance: none;
width: 18px;
height: 18px;
margin: 0 5px 3px 0;
background: #ffffff;
border: 1px solid #CCCCCC;
border-radius: 10px / 10px;
position: relative;
}
.checktype2 input[type="checkbox"]:checked:before {
position: absolute;
left: 1px;
top: 12px;
display: block;
content: "";
width: 6px;
height: 2px;
background: #3C3C3C;
-webkit-transform: rotate(45deg);
-webkit-transform-origin: right center;
}
.checktype2 input[type='checkbox']:checked:after {
display: block;
position: absolute;
left: 7px;
top: 13px;
content: "";
width: 12px;
height: 2px;
background: #3C3C3C;
-webkit-transform: rotate(-53deg);
-webkit-transform-origin: left center;
}
/* ラジオボタン */
.checktype2 input[type='radio'] {
appearance: none;
box-sizing: border-box;
width: 20px;
height: 20px;
background: #f3f4f5;
box-shadow: none;
border: 1px solid #d8d8d8;
border-radius: 100%;
position: relative;
vertical-align: -6px;
transition: all 0.3s ease-in-out 0s;
margin-bottom: 3px;
margin-right: 5px;
margin-left: 5px;
cursor: pointer;
}
.checktype2 input[type='radio']:checked{border: 1px solid #3C3C3C;}
.checktype2 input[type='radio']:checked:before{
position: absolute;
left: 50%;
top: 50%;
display: block;
margin: -4px 0 0 -4px;
-webkit-border-radius: 10px / 10px;
border-radius: 10px / 10px;
content: "";
width: 8px;
height: 8px;
background: #3C3C3C;
}
.checktype2 input[type='radio']:checked:after{
appearance: none;
box-sizing: border-box;
width: 20px;
height: 20px;
background: #f3f4f5;
box-shadow: none;
border: 1px solid #d8d8d8;
border-radius: 100%;
position: relative;
vertical-align: -6px;
transition: all 0.3s ease-in-out 0s;
margin-bottom: 3px;
margin-right: 5px;
margin-left: 5px;
cursor: pointer;
}
チェックボックスをボタン風にする
html
<div class="checktype3">
<label><input type="checkbox" value="AAA"><span>AAA</span></label>
<label><input type="checkbox" value="BBB"><span>BBB</span></label>
<label><input type="checkbox" value="CCC"><span>CCC</span></label>
</div>
css
.checktype3 input[type='checkbox'] {
visibility: hidden;
}
.checktype3 input[type='checkbox'] + span{
padding: 0;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
letter-spacing: -.02em;
border: 1px solid #ccc;
border-radius: 2px;
background: #fff;
user-select: none;
}
.checktype3 input[type='checkbox']:checked + span{
font-size: 10px;
border-radius: 0;
box-shadow: 0 0 0 2px black;
}
コメント