2010-08-10 4 views
69

Si elles existent dans la programmation),Sélecteurs de type d'entrée CSS - Possibilité d'avoir une syntaxe "ou" ou "non"?

Si j'ai un formulaire HTML avec les entrées suivantes:

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

Je veux appliquer un style à toutes les entrées qui sont soit type="text" ou type="password". Sinon, je voudrais régler pour toutes les entrées type != "checkbox".

Il semble que j'avoir à faire:

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

est pas là une façon de le faire:

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

ou

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

J'ai eu un coup d'oeil , et il ne semble pas y avoir un moyen de le faire avec un seul sélecteur CSS.

Pas une grosse affaire bien sûr, mais je suis juste un chat curieux.

Des idées?

Répondre

126

CSS3 a une pseudo-classe appelée :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 vous avez besoin pour soutenir IE8 ou plus tôt, vous pouvez utiliser un polyfill comme IE9.js. Ou vous pouvez simplement faire ceci:

input { 
    // styles for most inputs 
} 

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

C'est techniquement deux sélecteurs, mais il vous évite d'avoir à penser à tous les types d'entrée qui ne sont pas « case à cocher. »

+1

gentil! Merci. ce sélecteur CSS3 est-il entièrement supporté? (Je me soucie seulement de IE7 +, FF3 +, Safari récent, Chrome récent) – RPM1984

+0

@ votre édition. D'accord, et j'aime ça. Merci. – RPM1984

+1

Il est pris en charge dans IE9 + et tous les autres navigateurs modernes. http://www.quirksmode.org/css/contents.html#t37 –

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

C'est la bonne façon de le faire. Malheureusement CSS n'est pas un langage de programmation.

+2

Oh bien. CSS4 peut-être? =) – RPM1984

+4

Vous pouvez utiliser Less CSS ou Sass, cependant. – vbullinger

+0

Moins, oui! J'aime ça. –

Questions connexes