4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

オリジナルデザインのチェックボックスをCSSだけで作る

Last updated at Posted at 2017-02-28

入力フォームのコーディング時に、チェックボックスを各ブラウザが持っているデフォルト表示とは異なるデザインにしたい時によく使うCSSを紹介します。

画像を使った方法もありますが、cssのみでサクッと記述したい時におすすめの方法です。

CSSのみで作るチェックボックス

今回サンプルで作ったチェックボックスの完成形は下図の通り。
image.png

まずは簡単に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記述の際にお役立て下さい。

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?