Pregunta Selectores de tipo de entrada CSS: ¿es posible tener una sintaxis "o" o "no"?


Si existen en la programación),

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 type="text" o type="password".

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

Parece que tengo 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
}

Eché 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.

¿Algunas ideas?


73
2017-08-10 02:04


origen


Respuestas:


CSS3 tiene una pseudoclase llamada :no()

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


Múltiples selectores

Como Vincent mencionó, es posible encadenar múltiples :not()s juntos:

input:not([type='checkbox']):not([type='submit'])

CSS4, que es aún no es ampliamente compatible, permite múltiples selectores en un :not() 

input:not([type='checkbox'],[type='submit'])


Soporte heredado

Todos los navegadores modernos admiten la sintaxis de CSS3. En el momento en que se hizo esta pregunta, necesitábamos una recuperación para IE7 e IE8. Una opción era usar un polietileno como IE9.js. Otro fue explotar la cascada en CSS:

input {
   // styles for most inputs
}   

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

input.checkbox {
  // for completeness, this would have worked even in IE3!
} 

138
2017-08-10 02:19



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

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


21
2017-08-10 02:07