CSS: toggle button

今更toggle buttonあれこれ紹介
## 単純形式
```css:CSS
.toggle{
	display:inline-block;
	height:16px;
	margin:0 .5em 0 0;
	position:relative;
	width:32px
}
.toggle input{
	cursor:pointer;
	position:absolute;
	left:0;
	top:0;
	width:100%;
	height:100%;
	opacity:0;
	z-index:5
}
.toggle b{
	background:#ccc;
	border-radius:16px;
	box-sizing:border-box;
	width:32px;
	height:16px;
	position:relative;
	display:inline-block;
	transition:.4s
}
.toggle b:after{
	background:#fff;
	box-shadow:0 0 5px rgba(0,0,0,.2);
	content:"";
	width:16px;
	height:16px;
	border-radius:100%;
	position:absolute;
	left:0;
	top:0;
	z-index:2;
	transition:.4s
}
.toggle :checked+b{background-color:#4d6}
.toggle :checked+b:after{left:16px}

label{cursor:pointer}
```
`class=toggle`の要素の子要素である空のb要素にtoggleの中身を演じて頂く。
```html:HTML
<label><a class=toggle><input type=checkbox><b></b></a>labelで全包囲</label>
<label class=toggle><input type=checkbox><b></b></label>click範囲少
```
## 単純形式(軽量)
若干少ない記述量
```css:CSS
.toggle{
	position:relative;
	padding-left:2.5em;
	font-size:1em;
	cursor:pointer
}
.toggle input{display:none}
.toggle b{
	border-radius:1em;
	background-color:#ccc;
	left:0;
	height:1em;
	width:2em
}
.toggle b:before{
	border-radius:50%;
	background-color:#fff;
	content:"";
	height:1em;
	width:1em
}
.toggle b:before,.toggle b{position:absolute;transition:.2s}
.toggle :checked+b{background-color:#6b6}
.toggle :checked+b:before{transform:translateX(1em)}
```
space key押しても無反応、tab押しても的にならないという問題には目を瞑る
```html
<label class=toggle><input type=checkbox><b></b>nobody isn't here</label>
<label class=toggle><input type=checkbox><b></b>no money isn't there</label>
```
## 演出増加
長いので改行少なくしました。
```css:CSS
.toggle{position:relative;display:block;cursor:pointer;padding:.25em 0;display:flex;align-items:center}
.toggle input[type=checkbox]{position:absolute;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}
.toggle input:focus+.switch .handle{width:25px;height:25px;top:-5px;box-shadow:0 1px 3px rgba(0,0,0,.5),inset 0 0 0 2px #45b}

.switch{display:block;width:37px;height:14px;position:relative;margin-right:1em}
.switch .track{border-radius:19px;position:absolute;top:0;bottom:0;left:1px;right:1px;background:rgba(0,0,0,.26);overflow:hidden;transform:translateZ(0)}
.switch .track::before{background:#9ad;content:""}

.switch .handle{position:absolute;top:-3px;left:0;width:20px;height:20px;border-radius:20px;background:snow;box-shadow:0 1px 3px rgba(0,0,0,.5),inset 0 0 0 2px transparent;overflow:hidden;box-sizing:border-box;transition:all .15s ease-out;transform:translateZ(0)}
.switch .handle::before{background:#45b;content:""}

.switch .handle::before,.switch .track::before{position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;transition:opacity .15s ease-out;transform:translateZ(0)}

:checked+.switch .handle{transform:translate3d(17px,0,0);box-shadow:0 1px 3px rgba(0,0,0,.5),inset 0 0 0 2px transparent}
:checked+.switch .handle::before,:checked+.switch .track::before{opacity:1}
```
htmlの記述がいささか煩雑か…。
```html:HTML
<label class=toggle><input type=checkbox> <span class=switch><span class=track></span> <span class=handle></span> </span>光子は反光子</label>
<label class=toggle><input type=checkbox> <span class=switch><span class=track></span> <span class=handle></span> </span>シュレーディンガーの猫は死体</label>
```
## 演出増加(軽量)
上記の記述量を減らしただけ。toggle以外のclassを排除。b要素、s要素、u要素に動作を担当して頂く
```css:CSS
.toggle{position:relative;padding:.25em 0;display:flex;align-items:center;cursor:pointer}
.toggle input[type=checkbox]{position:absolute;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}
.toggle input:focus+b u{width:25px;height:25px;top:-5px;box-shadow:0 1px 3px rgba(0,0,0,.5),inset 0 0 0 2px #45b}

.toggle b{position:relative;display:block;width:37px;height:14px;margin-right:1em}
.toggle s{border-radius:19px;top:0;bottom:0;left:1px;right:1px;background:rgba(0,0,0,.26)}
.toggle u{border-radius:20px;top:-3px;left:0;width:20px;height:20px;background:snow;box-shadow:0 1px 3px rgba(0,0,0,.5),inset 0 0 0 2px transparent;box-sizing:border-box;transition:all .15s ease-out}
.toggle s,.toggle u{position:absolute;overflow:hidden;transform:translateZ(0)}

.toggle u::before{background:#45b;content:""}
.toggle s::before{background:#9ad;content:""}
.toggle s::before,.toggle u::before{position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;transition:opacity .15s ease-out;transform:translateZ(0)}

.toggle :checked+b u{transform:translate3d(17px,0,0);box-shadow:0 1px 3px rgba(0,0,0,.5),inset 0 0 0 2px transparent}
.toggle :checked+b u::before,:checked+b s::before{opacity:1}
```
htmlの記述量も盛り下がっております。`<b>

<u></u></b>`が肝となります
```html:HTML
<label class=toggle><input type=checkbox><b>

<u></u></b>光は波平</label>
<label class=toggle><input type=checkbox><b>

<u></u></b>エネルギーは質屋</label>
```