Selon les navigateurs que vous souhaitez prendre en charge, vous pouvez utiliser l'option :checked
pseudo-classe en plus de masquer les boutons radio.
En utilisant ce 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>
Vous pourriez utiliser quelque chose comme le CSS suivant :
input[type="radio"].toggle {
display: none;
}
input[type="radio"].toggle:checked + label {
/* Do something special with the selected state */
}
Par exemple, (pour que le CSS personnalisé reste bref) si vous utilisez Bootstrap vous pourriez ajouter class="btn"
à votre <label>
et de les styliser de manière appropriée pour créer une bascule qui ressemble à ceci :
...qui ne nécessite que le CSS supplémentaire suivant :
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;
}
Je l'ai inclus, ainsi que les styles de repli supplémentaires, dans un fichier bouton radio à basculer jsFiddle demo . Notez que :checked
n'est pris en charge que par IE 9, de sorte que cette approche est limitée aux navigateurs plus récents.
Toutefois, si vous devez prendre en charge IE 8 et que vous êtes prêt à vous rabattre sur JavaScript*, vous pouvez intégrer une pseudo-prise en charge de :checked
sans trop de difficulté (bien que vous puissiez tout aussi bien définir les classes directement sur l'étiquette à ce stade).
En utilisant un code jQuery rapide et sale comme un exemple de la solution de contournement :
$('.no-checkedselector').on('change', 'input[type="radio"].toggle', function () {
if (this.checked) {
$('input[name="' + this.name + '"].checked').removeClass('checked');
$(this).addClass('checked');
// Force IE 8 to update the sibling selector immediately by
// toggling a class on a parent element
$('.toggle-container').addClass('xyz').removeClass('xyz');
}
});
$('.no-checkedselector input[type="radio"].toggle:checked').addClass('checked');
Vous pouvez ensuite apporter quelques modifications au CSS pour compléter les choses :
input[type="radio"].toggle {
/* IE 8 doesn't seem to like to update radio buttons that are display:none */
position: absolute;
left: -99em;
}
input[type="radio"].toggle:checked + label,
input[type="radio"].toggle.checked + label {
/* Do something special with the selected state */
}
*Si vous utilisez Modernizr, vous pouvez utiliser l'option <a href="https://gist.github.com/paulirish/441842" rel="noreferrer"><code>:selector</code> test </a>pour aider à déterminer si vous avez besoin de la solution de repli. J'ai appelé mon test "checkedselector" dans le code de l'exemple, et le gestionnaire d'événements jQuery n'est ensuite mis en place que lorsque le test échoue.
0 votes
Pour l'instant, le style des boutons radio est très limité. Vous devrez probablement doivent utiliser JavaScript pour y parvenir.
1 votes
Si vous êtes prêt à aller au-delà des exigences css/html : awardwinningfjords.com/2009/06/16/iphone-style-cases-a-voir.html
0 votes
Jetez un coup d'œil à bouton segmenté