2010-08-10 9 views
69

si existen en la programación),Selectores de tipo de entrada CSS: ¿es posible tener una sintaxis "o" o "no"?

Si tengo un formulario HTML con las siguientes entradas:

<input type="text" /> 
<input type="password" /> 
<input type="checkbox" /> 

quiero aplicar un estilo a todas las entradas que son o bien type="text" o type="password".

Alternativamente, me conformaría con todas las entradas donde type != "checkbox".

Parece como si a tener que hacer esto:

input[type='text'], input[type='password'] 
{ 
    // my css 
} 

no hay una manera de hacerlo:

input[type='text',type='password'] 
{ 
    // my css 
} 

o

input[type!='checkbox'] 
{ 
    // my css 
} 

que tenía un vistazo , y no parece que haya una forma de hacerlo con un solo selector de CSS.

No es un gran problema, por supuesto, pero solo soy un gato curioso.

¿Alguna idea?

Respuesta

126

CSS3 tiene una pseudo-clase llamada :not()

input:not([type='checkbox']) {  
 
    visibility: hidden; 
 
}
<p>If <code>:not()</code> is supported, you'll only see the checkbox.</p> 
 
    \t        
 
<ul> 
 
    <li>text: (<input type="text">)</li> 
 
    <li>password (<input type="password">)</li>  \t 
 
    <li>checkbox (<input type="checkbox">)</li> 
 
</ul>


Si necesita apoyar IE8 o más temprano se puede utilizar un polyfill como IE9.js. O simplemente puede hacer esto:

input { 
    // styles for most inputs 
} 

input[type=checkbox] { 
    // revert back to the original style 
} 

Eso es técnicamente dos selectores, pero le ahorra tener que pensar en todos los tipos de entrada que no son "casilla de verificación".

+1

¡agradable! Gracias. ¿ese selector CSS3 es totalmente compatible? (solo me interesan IE7 +, FF3 +, Safari reciente, Chrome reciente) – RPM1984

+0

@your edit. De acuerdo, y me gusta. Gracias. – RPM1984

+1

Es compatible con IE9 + y con todos los demás navegadores modernos. http://www.quirksmode.org/css/contents.html#t37 –

21
input[type='text'], input[type='password'] 
{ 
    // my css 
} 

Esa es la forma correcta de hacerlo. Lamentablemente, CSS no es un lenguaje de programación.

+2

Oh bien. CSS4 tal vez? =) – RPM1984

+4

Sin embargo, podría utilizar Less CSS o Sass. – vbullinger

+0

Menos, ¡sí! Lo amo. –

Cuestiones relacionadas