【コピペで学ぶ実例集】HTMLとCSSを使ったチェックボックス のデザイン

HTMLとCSSのチェックボックス実例集。コピペ用のチェックボックス デザインをまとめました。

今回は、チェックボックスのデザインををHTMLとCSSのサンプルと共にご紹介します。汎用的なデザインを集めているのでフォームのコーディングやデザインの際にコピペして利用すると使い勝手もよく便利です。フロントエンド初学者でもカスタマイズしてコードを再利用できます。

input要素からチェックボックスをCSSでカスタマイズするのは難易度が少し高いです。
検索してもあまりでてこないアクセシビリティ対応のチェックボックスのカスタマイズ方法ですので、ぜひ活用してください。

基本のチェックボックス

基本のチェックボックス です。シンプルで使いやすいデザインにしています。

<label class="ECM_CheckboxInput"><input class="ECM_CheckboxInput-Input" type="checkbox"><span class="ECM_CheckboxInput-DummyInput"></span><span class="ECM_CheckboxInput-LabelText">利用規約に同意する</span></label>
.ECM_CheckboxInput {
  padding: 12px 8px;
  display: flex;
  align-items: center;
  cursor: pointer;
}

.ECM_CheckboxInput-Input {
  margin: 0;
  width: 0;
  opacity: 0;
}

.ECM_CheckboxInput:hover > .ECM_CheckboxInput-DummyInput {
  background: #DDDDDD !important;
  border: solid 2px #333333;
}

.ECM_CheckboxInput-Input:focus + .ECM_CheckboxInput-DummyInput {
  background: #DDDDDD !important;
  border: solid 2px #333333;  
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput {
  border: solid 2px #333333;
  background: #FFFFFF;
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput::before {
  content: "";
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJmZWF0aGVyIGZlYXRoZXItY2hlY2siPjxwb2x5bGluZSBwb2ludHM9IjIwIDYgOSAxNyA0IDEyIj48L3BvbHlsaW5lPjwvc3ZnPg==") no-repeat center;
  background-size: contain;
}
.ECM_CheckboxInput-DummyInput {
  position: relative;
  top: 0;
  left: 0;
  display: block;
  width: 32px;
  height: 32px;
  border: solid 2px #888888;
  background: #FFFFFF;
  border-radius: 4px;
}
.ECM_CheckboxInput-LabelText {
  margin-left: 12px;
  display: block;
  font-size: 18px;
  font-weight: bold;
}
https://eclair.company/media/wp-content/uploads/sites/2/2020/03/YutoSeta.jpg
YutoSeta

borderの色を変更してカスタマイズしてみましょう。
このチェックボックス は、チェックアイコンをbackgroundにインラインSVG画像を指定して埋め込んでいます。

白抜きアイコンのチェックボックス

黒背景に白のチェックマークのチェックボックス です。こちらもシンプルで使いやすいデザインかと思います。

<label class="ECM_CheckboxInput"><input class="ECM_CheckboxInput-Input" type="checkbox"><span class="ECM_CheckboxInput-DummyInput"></span><span class="ECM_CheckboxInput-LabelText">利用規約に同意する</span></label>
.ECM_CheckboxInput {
  padding: 12px 8px;
  display: flex;
  align-items: center;
  cursor: pointer;
}

.ECM_CheckboxInput-Input {
  margin: 0;
  width: 0;
  opacity: 0;
}

.ECM_CheckboxInput:hover{
  background: rgba(0,0,0,.05) !important;
}

.ECM_CheckboxInput-Input:focus + .ECM_CheckboxInput-DummyInput{
  border: dashed 2px #333333;
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput {
  background: #333333;
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput::before {
  content: "";
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 40%;
  height: 4px;
  border-radius: 2px;
  transform: translate(-6px, 5px) rotateZ(-135deg);
  transform-origin: 2px 2px;
  background: #FFFFFF;
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput::after {
  content: "";
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 76%;
  height: 4px;
  border-radius: 2px;
  transform: translate(-6px, 5px) rotateZ(-45deg);
  transform-origin: 2px 2px;
  background: #FFFFFF;
}
.ECM_CheckboxInput-DummyInput {
  position: relative;
  top: 0;
  left: 0;
  display: block;
  width: 32px;
  height: 32px;
  border: solid 2px transparent;
  background: rgba(0,0,0, .1);
  border-radius: 4px;
}
.ECM_CheckboxInput-LabelText {
  margin-left: 12px;
  display: block;
  font-size: 18px;
  font-weight: bold;
}
https://eclair.company/media/wp-content/uploads/sites/2/2020/03/YutoSeta.jpg
YutoSeta

背景色をカスタマイズしてみましょう。
また、チェックアイコンの色や大きさもbefore要素とafter要素で線をつくって実現してるため、カスタマイズできます。

スタイリッシュなチェックボックス

スタイリッシュなチェックボックス です。細い線と影が特徴です。

<label class="ECM_CheckboxInput"><input class="ECM_CheckboxInput-Input" type="checkbox"><span class="ECM_CheckboxInput-DummyInput"></span><span class="ECM_CheckboxInput-LabelText">利用規約に同意する</span></label>
.ECM_CheckboxInput {
  padding: 12px 8px;
  display: flex;
  align-items: center;
  cursor: pointer;
}

.ECM_CheckboxInput-Input {
  margin: 0;
  width: 0;
  opacity: 0;
}

.ECM_CheckboxInput:hover > .ECM_CheckboxInput-DummyInput{
  background: #CCCCCC;  
}

.ECM_CheckboxInput-Input:focus + .ECM_CheckboxInput-DummyInput{
  background: #CCCCCC;  
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput {
  background: #555555;
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput::before {
  content: "";
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 35%;
  height: 2px;
  transform: translate(-5px, 6px) rotateZ(-135deg);
  transform-origin: 1px 1px;
  background: #FFFFFF;
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput::after {
  content: "";
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 70%;
  height: 2px;
  transform: translate(-5px, 6px) rotateZ(-45deg);
  transform-origin: 1px 1px;
  background: #FFFFFF;
}
.ECM_CheckboxInput-DummyInput {
  position: relative;
  top: 0;
  left: 0;
  display: block;
  width: 32px;
  height: 32px;
  background: #F5F5F5;
  box-shadow: 0 1px 4px rgba(0,0,0, .4) inset;
}
.ECM_CheckboxInput-LabelText {
  margin-left: 12px;
  display: block;
  font-size: 18px;
  font-weight: bold;
}

カラフルでまるいチェックボックス

キュートな円形のチェックボックスです。ポップでかわいいデザインに仕上げました。

<label class="ECM_CheckboxInput"><input class="ECM_CheckboxInput-Input" type="checkbox"><span class="ECM_CheckboxInput-DummyInput"></span><span class="ECM_CheckboxInput-LabelText">利用規約に同意する</span></label>
.ECM_CheckboxInput {
  padding: 12px 8px;
  display: flex;
  align-items: center;
  cursor: pointer;
}

.ECM_CheckboxInput-Input {
  margin: 0;
  width: 0;
  opacity: 0;
}

.ECM_CheckboxInput:hover{
  background: rgba(0,0,0,.05) !important;
}

.ECM_CheckboxInput:hover > .ECM_CheckboxInput-DummyInput{
  transform: scale(1.1);
}

.ECM_CheckboxInput-Input:focus + .ECM_CheckboxInput-DummyInput{
  transform: scale(1.1);
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput {
  background: rgba(107, 26, 250, 1);
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput::before {
  content: "";
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 35%;
  height: 4px;
  border-radius: 2px;
  transform: translate(-6px, 5px) rotateZ(-135deg);
  transform-origin: 2px 2px;
  background: #FFFFFF;
}
.ECM_CheckboxInput-Input:checked + .ECM_CheckboxInput-DummyInput::after {
  content: "";
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 70%;
  height: 4px;
  border-radius: 2px;
  transform: translate(-6px, 5px) rotateZ(-45deg);
  transform-origin: 2px 2px;
  background: #FFFFFF;
}
.ECM_CheckboxInput-DummyInput {
  position: relative;
  top: 0;
  left: 0;
  display: block;
  width: 32px;
  height: 32px;
  border: solid 2px transparent;
  background: rgba(0, 0, 0, .15);
  border-radius: 50%;
  transition: all .15s linear;
}
.ECM_CheckboxInput-LabelText {
  margin-left: 12px;
  display: block;
  font-size: 18px;
  font-weight: bold;
}

HTMLとCSSの解説

HTML構造は同じ。CSSのバリエーションだけで表現しています。

今回のチェックボックスのHTMLは全て同じものを使っています。CSSの書き方次第で様々なデザインが表現できます。

アクセシビリティにも考慮したチェックボックス

多くのサイトで紹介されているチェックボックスはdisplay: none;を使ったカスタマイズであるため、キーボードを使った選択操作ができません。アクセシビリティに対応していないということです。また、hoverやfocusなどinputを選択している時のスタイルも指定されていないため、ユーザーにとってわかりにくいものとなってしまいます。

解決方法はシンプルです。input要素をdisplay: none;にするのではなく、widthを0にします。こうすることでタブによるフォーカスやスペースによる選択ができるようになります。今回、紹介しているチェックボックス はすべて対応しています。

この記事をかいてみての感想

https://eclair.company/media/wp-content/uploads/sites/2/2019/11/seta-1.jpg
Yuto Seta

僕もかつては「CSS チェックボックス 」と毎度毎度検索してはその度にHTMLとCSSを読み解いていた記憶があります。他の記事を読んでいてもHTML構造が複雑であったり、カスタマイズがしづらかったりして困っていました。ということで、記事にしてみました。

2 COMMENTS

Avatar 流浪のコーダー

チェックボックスにチェックすると、送信が可能になるボタンの実装方法がわかりません。

助けてください。

返信する
Yuto Seta Yuto Seta

コメントありがとうございます。
チェックボックスがチェックされている時に、
隣のボタンを有効にするというのはCSSだけでできます。
pointer-eventsというプロパティでイベントの取得を無効にすることで送信可否を振り分けます。
▼以下のようなコードで実現できます。

input(type="checkbox") + button{
 pointer-events: none;
}

input(type="checkbox"):checked + button{
 pointer-events: auto;
}

チェックボックスとボタンが離れている場合は、
チェックボックスを切り替えた時にjQuery等でイベントを取得する必要がありますね。

詳細の回答は改めて記事にてご紹介できたらと思います。

返信する

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です