0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CSSだけでiOSのON/OFFスイッチを再現する

Posted at

前置き

null

CSSだけでiOSのON/OFFスイッチを再現する

iOSのON/OFFスイッチをHTMLとCSSだけで再現します。 HTMLも使ってるけどタイトル長くなるから

See the Pen iOS Slider Button by kelp of truth (@kelp-of-truth) on CodePen.

<input type="checkbox" class="switch">

classはswitchです(わかりやすい)

input[type="checkbox"].switch{
  position: relative;
  appearance: none;
  background-color: #f2f2f2;
  -webkit-appearance: none;
  width: 44px;
  height: 28px;
  border: 2px solid #bababa;
  border-radius: calc(infinity * 1px);
  transition: 250ms ease-out;
  vertical-align: bottom;
  outline: 2px solid transparent;
}
input[type="checkbox"].switch:focus-visible{
  outline-color: #0043fc;
}
input[type="checkbox"].switch::after{
  content:"";
  background-color: #fff;
  position: absolute;
  top: 0px;
  left: 0px;
  box-shadow: 0px 0px 3px #6b6b6b;
  width: 24px;
  height: 24px;
  border-radius: calc(infinity * 1px);
  transition: 200ms ease-out;
}
input[type="checkbox"].switch:active::after{
  background-color: #f2f2f2;
}
input[type="checkbox"].switch:checked{
  background-color: #00db07;
  border-color: #00db07;
}
input[type="checkbox"].switch:checked::after{
  left: 16px;
}

本体

チェックボックスの見た目をCSSで変更します。

まずappearance: none;でブラウザ規定の表示を無効化しておきます。
角を丸くして、横幅、縦幅を調整します。あとは疑似要素のafterを使い、つまみ(?)の部分を再現します。
そして、:checkをつかいチェックボックスがチェック時に別のCSSを適用するようにします。

おまけ

チェックボックス本体のpositionはrelativeにしておき、擬似要素のpositionをabsoluteにします(いつもの)。
チェックボックスにチェックが入っていない時はleftを0pxにしておきます。チェックが入った時にleftを16px(calc(100% - {擬似要素の横幅}))にします。transitionを指定しておけばアニメーションされます。
背景色は少し黒い白から黄緑色に代わり、ボーダーも灰色から背景と同じ黄緑色に変わります。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?