Селекторы :before
и :after
могут создавать часть содержимого.Добавляя еще один элемент (например, span
), который можно стилизовать так, чтобы он отображался как «ползунок» переключателя.
Затем содержащий элемент - который может быть самим label
!- также может иметь селекторы :before
и :after
, используемые для стилизации «гнезда», в котором перемещается ползунок.
input[type=checkbox].switch {
display: none;
}
label.switch.socket {
position: relative;
width: auto;
text-indent: 6.0ex;
}
span.switch.slider {
display: inline-block;
}
label.switch.socket span.switch.slider:before {
content: "off";
text-indent: 2.3ex;
width: 5.5ex;
height: 2.2ex;
color: White;
background: DimGray;
border-radius: 5.5ex;
position: absolute;
left: 0;
}
label.switch span.switch.slider:after {
content: "";
width: 2.0ex;
height: 2.0ex;
background: Gainsboro;
border-radius: 5.5ex;
position: absolute;
left: 0.1ex;
top: 0.1ex;
transition: 0.2s;
}
label.switch.socket input[type=checkbox]:checked + span.slider:before {
content: "on";
text-indent: 0.5ex;
color: Black;
background: DarkGray;
}
label.switch.socket input[type=checkbox]:checked + span.slider:after {
left: 3.4ex;
}
<p>
<label class="switch socket">
<input type="checkbox" class="switch" name="lorem" />
<span class="switch slider" />
Lorem ipsum
</label>
<label class="switch socket">
<input type="checkbox" class="switch" name="dolor" checked />
<span class="switch slider round" />
Dolor sit amet
</label>
</p>
(Спасибо @ gosi123 и @aje за предложения, которые были достаточно близки, чтобы помочь мне сформулировать этот ответ.)