Je nachdem, welche Browser Sie unterstützen möchten, können Sie zusätzlich zum Ausblenden der Optionsfelder den :checked
Pseudoklassen- Selektor verwenden.
Verwenden dieses HTML:
<input type="radio" id="toggle-on" name="toggle" checked
><label for="toggle-on">On</label
><input type="radio" id="toggle-off" name="toggle"
><label for="toggle-off">Off</label>
Sie könnten so etwas wie das folgende CSS verwenden:
input[type="radio"].toggle {
display: none;
}
input[type="radio"].toggle:checked + label {
}
Wenn Sie beispielsweise Bootstrap verwenden (um das benutzerdefinierte CSS kurz zu halten) , können Sie class="btn"
Ihre <label>
Elemente ergänzen und entsprechend formatieren, um einen Umschalter zu erstellen, der wie folgt aussieht:
... was nur das folgende zusätzliche CSS erfordert:
input[type="radio"].toggle:checked + label {
background-image: linear-gradient(to top,#969696,#727272);
box-shadow: inset 0 1px 6px rgba(41, 41, 41, 0.2),
0 1px 2px rgba(0, 0, 0, 0.05);
cursor: default;
color: #E6E6E6;
border-color: transparent;
text-shadow: 0 1px 1px rgba(40, 40, 40, 0.75);
}
input[type="radio"].toggle + label {
width: 3em;
}
input[type="radio"].toggle:checked + label.btn:hover {
background-color: inherit;
background-position: 0 0;
transition: none;
}
input[type="radio"].toggle-left + label {
border-right: 0;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
input[type="radio"].toggle-right + label {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
}
Ich habe dies sowie die zusätzlichen Fallback-Stile in ein Optionsfeld zum Umschalten der jsFiddle-Demo aufgenommen . Beachten Sie, dass dies :checked
nur in IE 9 unterstützt wird, sodass dieser Ansatz auf neuere Browser beschränkt ist.
Wenn Sie jedoch IE 8 unterstützen müssen und bereit sind, auf JavaScript * zurückzugreifen, können Sie die Pseudo-Unterstützung :checked
ohne allzu große Schwierigkeiten hacken (obwohl Sie an dieser Stelle genauso einfach Klassen direkt auf dem Etikett festlegen können).
Verwenden Sie einen schnellen und schmutzigen jQuery-Code als Beispiel für die Problemumgehung :
$('.no-checkedselector').on('change', 'input[type="radio"].toggle', function () {
if (this.checked) {
$('input[name="' + this.name + '"].checked').removeClass('checked');
$(this).addClass('checked');
$('.toggle-container').addClass('xyz').removeClass('xyz');
}
});
$('.no-checkedselector input[type="radio"].toggle:checked').addClass('checked');
Sie können dann einige Änderungen am CSS vornehmen, um die Dinge zu vervollständigen:
input[type="radio"].toggle {
position: absolute;
left: -99em;
}
input[type="radio"].toggle:checked + label,
input[type="radio"].toggle.checked + label {
}
* Wenn Sie Modernizr verwenden, können Sie mithilfe des :selector
Tests feststellen, ob Sie den Fallback benötigen. Ich habe meinen Test im Beispielcode "checkedselector" genannt, und der jQuery-Ereignishandler wird anschließend nur eingerichtet, wenn der Test fehlschlägt.