入力フォームのコーディング時に、チェックボックスを各ブラウザが持っているデフォルト表示とは異なるデザインにしたい時によく使うCSSを紹介します。
画像を使った方法もありますが、cssのみでサクッと記述したい時におすすめの方法です。
CSSのみで作るチェックボックス
まずは簡単にhtml側の記述を見ていきます
htmlはlabel要素でinput要素囲み、テキスト部分もタップ可能になるようマークアップしています。
<label type="checkbox" class="button checkbox">
<input type="checkbox" name="" value="" checked="">
<span>サンプルテキスト</span>
</label>
それでは、cssの記述を一つずつ見ていきます。
まずは、タップ範囲全体のデザインを整えていきます。
.button {
border: 1px solid #ccc;
width: 180px;
margin: 0 auto;
padding: 10px 0 11px 25px;
display: block;
padding: 14px 0;
}
.checkbox {
cursor: pointer;
position: relative;
overflow: hidden;
}
次にbefore要素、after要素を重ねて、チェックボックスにチェックが入ったときの緑色の部分を作ります。
.checkbox:before {
content: '';
position: absolute;
width: 17px;
height: 17px;
left: 12px;
top: 15px;
border: 1px solid #7b7b7b;
background: #fff;
}
.checkbox:after {
z-index: 1;
content: '';
position: absolute;
top: 24px;
left: 18px;
display: block;
margin-top: -8px;
width: 5px;
height: 11px;
border-right: 3px solid #08b904;
border-bottom: 3px solid #08b904;
transform: rotate(45deg);
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
-ms-transform: rotate(45deg);
}
さらに、ブラウザがデフォルトで持っているcheckboxを削除する処理をしていきます。
checkboxにはovrerflow: hiddenが当たっているので、デフォルトのチェックをposition指定して外に飛ばしつつ非表示に。
そして、box-shadowでbefore,after要素で作ったチェックの上に蓋をします。
.checkbox input[type="checkbox"] {
position: absolute;
left: -28px;
top: 16px;
width: 17px;
height: 17px;
display: block;
box-shadow : 41px 0 #fff;
-moz-box-shadow: 41px 0 #fff;
-webkit-box-shadow: 41px 0 #fff;
-ms-box-shadow: 41px 0 #fff;
-o-box-shadow: 41px 0 #fff;
appearance: none;
-moz-appearance: none;
-webkit-appearance: none;
-o-appearance: none;
-ms-appearance: none;
z-index: 2;
}
最後に、チェックが入ったらbox-shadowで作った蓋を非表示にするstyleを記述。
これで、チェックを入れると独自にデザインしたcheckが入るようなstyleを記述することができました。
.checkbox input[type="checkbox"]:checked {
box-shadow : none;
}
まとめ
label要素にラップさてたチェックボックスに対して独自のstyleを当てる方法を紹介しました。
checkboxだけでなく他のinput要素も同様の方法でstyleを当てることができるので、フォーム周りのcss記述の際にお役立て下さい。