2010-01-16 14 views
25

¿Hay alguna manera en el CSS para seleccionar label s unidos a input campos (a través del atributo for) que tiene establecido el atributo required? Algo así como:marcador unido a la entrada

label:input[required] { 
    ... 
} 

Actualmente, estoy añadiendo class="required" a las etiquetas y entradas para el peinado. Ahora tengo el atributo HTML5 required="required" en los campos de entrada necesarios. Sería bueno eliminar los atributos de clase redundantes.

El closest answer encontré no utiliza for atributo del elemento label, pero requeriría que el label ser directamente adyacente a la entrada en el código HTML.

Respuesta

6

¿Qué tal CSS 2 Attribute Selectors Es bastante compatible entre los navegadores.

Ejemplo:

<style> 
label[required=required] 
{ 
color: blue; 
} 
</style> 
<label required="required" for="one">Label:</label><input name="one" id="one" /> 

también comprobar this a cabo.

+5

Aparentemente las preguntas y respuestas usan el formato, pero los comentarios no. El problema con esa sugerencia es que el atributo requerido pertenece al elemento de entrada, no al elemento de etiqueta. También en el CSS, mejor sólo decir: de entrada [requerido] porque el único marcado válido es: HTML -> requerido XHTML -> requerido = "required" requerido = "false" o algo por el estilo no es válido. –

+0

También vea: http://www.whatwg.org/specs/web-apps/current-work/multipage/common-input-element-attributes.html#the-required-attribute –

+0

Sí, required = required no es necesario. Pero si entonces él quiere poder obtener todas las etiquetas de etiquetas asociadas a las entradas que tienen el atributo requerido, no creo que eso sea posible. Puede obtener todas las entradas @required 'input [required]', pero no todas las etiquetas a menos que sean un nodo secundario de la entrada, lo cual es incorrecto incluso en HTML. – Tom

4

Esta solución funciona en la mayoría de los navegadores modernos:

<style> 

label > input[required="required"] { 
    background: red; 
} 

</style> 
<label for="myField"><input required="required" id="myField" /></label> 
+1

Creo que el OP estaba pidiendo un selector que se aplicaría genéricamente a todos los elementos requeridos, para evitar especificar un selector para cada elemento. –

+2

esto no funciona si está utilizando la forma recomendada de usar etiqueta/entrada (no anidarlos) – ashwoods

+2

El otro problema con este enfoque, o algo que hace 'etiqueta + entrada [requerida]' es que está diseñando el etiqueta y no el

0

no creo que esto realmente se puede lograr a través de CSS en la forma en que el PO quiere. CSS simplemente no funciona de esa manera.

Un mejor enfoque en mi opinión es dar un paso atrás y ver el panorama general. Tiene un formulario donde algunos campos son obligatorios y otros no. Es un buen enfoque dar al usuario todos los campos requeridos primero, o agrupar los campos requeridos, y mantenerlos claramente separados de los campos opcionales.

puede crear una estructura como

<form> 
    <ul class="required_fields"> 
     <li> 
      <label>username</label> 
      <input /> 
     </li> 
     <li> 
      <label>email</label> 
      <input /> 
     </li> 
    </ul 
    <ul class="optional_fields"> 
      ... 
    </ul> 
</form> 

/* CSS */ 
.required_fields label {font-weight: bold} 
.required_fields label:after { content: "*"; color: red } /*more styles for labels*/ 

Hay una serie de beneficios para este enfoque. Puede agregar y eliminar elementos del grupo 'requerido' fácilmente sin tener que modificar cada uno individualmente. Puede asignar la clase 'requerida' a la altura de la cadena que desee. Si el formulario tiene la clase 'requerida', todo lo que contiene se etiquetará según sea necesario. Hay menos lugares para hacer cambios, si decidiste que la clase 'requerida' debería llamarse otra cosa. Y, en general, este enfoque también lo ayuda a organizar mejor sus formularios. No debe mezclar los campos obligatorios y opcionales.

Puede llevar esto un paso más allá y tener algún javascript que inyecte el atributo requerido en los campos de entrada también.

$(".required_fields input").each(function(){ 
    this.setAttribute('required', 'required'); 
}); 
+0

Eso es un requisito rígido y obliga a una decisión de diseño particular. Considere pedir una dirección postal. Requerimos la línea de dirección 1, ciudad, estado, código postal. ¿Movería la línea de dirección 2 fuera del flujo porque es opcional? La gente está familiarizada con la estructura de una dirección de correo y la quiere estructurada de forma estándar. –

+0

En ese caso, la línea de dirección 2 es la excepción y, como excepción, debe recibir un trato especial. Tal vez una clase '.not_required' que inhabilita el estilo requerido. '.required_fields label.not_required: after {content:" "}'. Parece una solución perfecta para pasar de lo general a lo más específico. – mastaBlasta

Cuestiones relacionadas