LoginSignup
5
1

More than 5 years have passed since last update.

checkboxやradioボタンでデフォルトのデザインを変更する方法

Last updated at Posted at 2018-11-22

checkboxやradioボタンでデフォルトのデザインを変更する方法

割とよくやるので忘れないためにメモ。

やりたいこと

このデフォルトのデザインから
スクリーンショット 2018-11-22 14.56.51.png
こんなかっこいい感じにしたい。。(かっこよくないけど。。。)
スクリーンショット 2018-11-22 15.04.51.png

コード

html

<ul class="list">
  <li class="list__item">
    <label>
      <input type="radio" name="radio_button" class="input">
      <span class="text">ラジオ1</span>
    </label>
  </li>
  <li class="list__item">
    <label>
      <input type="radio" name="radio_button" class="input">
      <span class="text">ラジオ2</span>
    </label>
  </li>
  <li class="list__item">
    <label>
      <input type="radio" name="radio_button" class="input">
      <span class="text">ラジオ3</span>
    </label>
  </li>
</ul>

css

.list {
  list-style-type: none;
  padding: 0;
  margin: 0;
}

.input {
  display: none;
}

.text {
  position: relative;
}

.text:before {
  content: "";
  display: inline-block;
  width: 12px;
  height: 12px;
  margin-right: 6px;
  border: 1px solid #ff0000;
  border-radius: 50%;
}

.input:checked + .text:after {
  position: absolute;
  top: 3px;
  left: 3px;
  content: "";
  display: inline-block;
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background-color: #ff0000;
}

.input:checked + .text {
  color: #ff0000;
}

ポイント

そこまで難しいことは何もないです。
まずinputをdisplay:none;で非表示にして、
.text:beforeで代わりになる丸い枠を作っています。

.input:checked + .text:afterの部分は
隣接セレクトですね。あまり使わないので忘れていましたが、
要素と要素が直接隣接している時に直後の要素(ここで言う.text:afterです。)に適用されるものですね。
なので、
checkedがついた時.textのafterにはこのcssが適用されますよ〜とちっこい丸が
.text:beforeの中に表示されるように作っています。

※言わなくてもわかるよって言われるかもしれませんが、labelタグで囲っているのでその範囲でクリックすればinputはcheckedになります。

まとめ

以上で終わりです。
radioボタンのことしか書きませんでしたが、
checkboxもほぼ、いや、全く同じことをすればできるので試してみてください。

5
1
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
5
1