Quiero agregar un estilo a la etiqueta seleccionada de un botón de radio:
HTML:
<div class="radio-toolbar">
<label><input type="radio" value="all" checked>All</label>
<label><input type="radio" value="false">Open</label>
<label><input type="radio" value="true">Archived</label>
</div>
CSS
.radio-toolbar input[type="radio"] {display:none;}
.radio-toolbar label {
background:Red;
border:1px solid green;
padding:2px 10px;
}
.radio-toolbar label + input[type="radio"]:checked {
background:pink !important;
}
¿Alguna idea de lo que estoy haciendo mal?
:checked
selector..foo { ... }
display:none;
entonces los navegadores harán que funcione con el teclado perfectamente.Si realmente desea poner las casillas de verificación dentro de la etiqueta, intente agregar una etiqueta de extensión adicional, por ejemplo.
HTML
CSS
Eso establecerá los fondos para todos los hermanos del botón de radio seleccionado.
fuente
for
Está utilizando un selector de hermanos adyacentes (
+
) cuando los elementos no son hermanos. La etiqueta es el padre de la entrada, no su hermano.CSS no tiene forma de seleccionar un elemento en función de sus descendientes (ni nada que lo siga).
Tendrá que buscar JavaScript para resolver esto.
Alternativamente, reorganice su marcado:
fuente
Puede agregar un lapso a su html y css.
Aquí hay un ejemplo de mi código ...
HTML (JSX):
CSS para hacer que el botón de opción estándar desaparezca en la pantalla y superponer la imagen del botón personalizado:
fuente
Como actualmente no hay una solución CSS para diseñar un padre, utilizo una jQuery simple aquí para agregar una clase a una etiqueta con una entrada marcada dentro de ella.
No olvide dar la etiqueta de entrada previamente verificada
checkedlabel
también a la clasefuente
Aquí hay una solución accesible
fuente