• HTML・CSS

【CSS】チェックボックスのカスタマイズ

お問い合わせフォームや検索ボックスなどでよく利用されるチェックボックス。

ブラウザにデフォルトで設定されているものではなくて、自分でデザインしたものにしたい!

ということってよくありますよね。

そんなときにはCSSでオリジナルのチェックボックスを作成できるので、そのやり方をご紹介できればと思います。

書き方の例

こんな感じのチェックボックスにしたいと思います。

<ul class="bl_checkbox">
  <li class="bl_checkbox_item">
    <label>
      <input type="checkbox" name="area[]" value="1" class="bl_checkbox_input">
      <span>千代田区</span>
    </label>
  </li>
  <li class="bl_checkbox_item">
    <label>
      <input type="checkbox" name="area[]" value="2" class="bl_checkbox_input">
      <span>中央区</span>
    </label>
  </li>
</ul>
/* デフォルトを打ち消す */
input {
    -webkit-appearance: none;
    border-radius: 0;
    appearance: none;
    background-color: transparent;
    border: none;
    cursor: pointer;
    font-size: inherit;
    letter-spacing: inherit;
    outline: none;
}
input[type="radio"] {
    display: none;
}

/* ここから */
.bl_checkbox {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    width: 100%;
}
.bl_checkbox_item {
    width: calc((100% - 8px) / 2);
}
.bl_checkbox_item > label {
    cursor: pointer;
}
.bl_checkbox_input + span {
    position: relative;
    padding-left: 24px;
}
.bl_checkbox_input + span::before { /* チェックボックスの作成 */
    content: "";
    background: #fff;
    width: 16px;
    height: 16px;
    border: 1px solid #B0AB99;
    border-radius: 2px;
    position: absolute;
    top: 50%;
    left: 0;
    transform: translateY(-50%);
}
.bl_checkbox_input + span::after { /* チェックの作成 */
    content: "";
    display: block;
    background: transparent;
    border-bottom: 2px solid #4d5fc3;
    border-right: 2px solid #4d5fc3;
    width: 8px;
    height: 16px;
    position: absolute;
    left: 5px;
    top: -4px;
    transform: rotate(42deg);
    opacity: 0;
}
.bl_checkbox_input:checked + span::after {
    opacity: 1;
}

解説

ブラウザデフォルトの表示を消すという部分は、リセットCSSとか使用していれば記述しなくても良いかと思います。
(使用しているリセットCSSによっては記述が必要かもしれないです…)

考え方としては以下となります。

 

  • HTML → labelタグの中にinputタグとspanタグを設置
  • spanタグの左側にチェックボックスが入る余白をとる
  • spanタグの疑似要素で、チェックボックスとチェックを作る
  • チェックはデフォルトではopacity: 0;で消す
  • inputタグにchecked属性が付いているときにチェックを表示させるようにする
    .bl_checkbox_input:checked + span::afterのところ

 

ざっくりとですが、以上が解説となります。

よろしければ参考にしてみてください(^^)

 

ラジオボタンのカスタマイズはこちら