アイコンに Font Awesome を使用して、より洗練された HTML チェックボックスを作成することを先延ばしにしてきました。私はこれにほとんど満足しています: (CodePen)
HTML
<input type="checkbox" id="cb"/>
<label for="cb">
<i class='icon-check-sign'></i>
</label>
CSS
#cb {
display: none;
}
#cb + label {
font-size: 64px;
color: #002b36; /* black */
transition: color 1s;
}
/* hover */
#cb + label:hover > i {
color: #268bd2; /* blue */
transition: color 1s;
}
/* checked */
#cb:checked + label > i {
color: #859900; /* green */
transition: color 1s;
}
/* checked + hover */
#cb:checked + label:hover > i {
color: #dc322f; /* red */
transition: color 1s;
}
(色と遷移時間は、問題をより明確にするために誇張されています。)
私の問題は、デフォルトの状態からホバー状態(カーソルがアイコンの上に移動)、ホバーからチェック(アイコンをクリック)、およびホバー+チェックからチェック(カーソルが立ち去った)。ただし、ホバーからデフォルトに戻ると(マウス カーソルがチェックされていないアイコンから離れます)、色は遷移せず、すぐに変化します。
なぜそれが起こり、どうすれば修正できますか? おまけの質問: この効果は、追加のマークアップなしでどうにかして行うことができますか? (<i>
と<label>
。)
(また、チェックされているアイコンとチェックされていないアイコンを交換すると、これはより使いやすくなると思いますが、それには異なる要素で 2 つのトランジションをチェーンする必要があるようで、CSS だけでそれが可能かどうかはわかりません。)