2010-02-26 10 views
7

¿Es posible, con solo CSS, aplicar estilo a una etiqueta HTML en función del estado de su entrada?Estilo a <label> según el estado de <input>

En mi caso, quiero diseñar un <input type="checkbox"> según si está marcado.

Intenté poner la etiqueta dentro de la entrada, pero Firefox y Chrome (al menos) parecen analizarlos como hermanos, a pesar de que están claramente anidados en la fuente de entrada. Y no sé cómo escribir una regla de CSS que pueda indirectamente a través de un atributo for =.

¿Debo sacar el Javascript de este?

Respuesta

5

No es necesario que estén anidados, para eso está el atributo "para" en el elemento < de la etiqueta >.

En los navegadores modernos (los que apoyan CSS 2.1), puede utilizar un selector de hermanos, como

input + label { 
    /* rules */ 
} 

Usted tendría que tener su margen de beneficio en una estricta relación de hermanos, como por ejemplo:

<input name="cb" id="cb" type="checkbox"><label for="cb">Checkbox</label> 
+0

Ah, no sabía una acerca de los selectores hermanos (pero debería tener). Esto sería perfecto, excepto que en este caso necesita funcionar en IE6, que no parece ser compatible. De vuelta a JS es. :-( – Ken

+0

Sí, IE6 es una cruz que tengo que arrastrar por el mundo todos los días, también. ¡Lo siento! – Robusto

4

Uso del selector adyacente/hermanos más el selector de atributos sería hacer que funcione:

<form> 
    <style> 
    INPUT[checked=checked] + LABEL { 
     color: #f00;  
    } 
    </style> 
    <div> 
     <input type="checkbox" id="chk1" /> 
     <label for="chk1">Label #1</label> 
    </div> 
    <div> 
     <input type="checkbox" id="chk2" checked="checked" /> 
     <label for="chk2">Label #2</label> 
    </div> 
</form> 
Cuestiones relacionadas