2010-08-10 3 views
69

Jeśli istnieją one w programowaniu),Selektory typu wejściowego CSS - Możliwe, że istnieje składnia "lub" lub "nie"?

Jeśli mam formularza HTML z następujących wejść:

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

chcę zastosować styl do wszystkich wejść, które są albo type="text" lub type="password".

Alternatywnie, chciałbym zadowolić się wszystkimi wejściami, gdzie type != "checkbox".

Wydaje się, że aby to zrobić:

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

nie jest sposobem zrobić:

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

lub

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

musiałem rozejrzeć i wydaje się, że nie ma sposobu, aby to zrobić za pomocą jednego selektora CSS.

Oczywiście to nic wielkiego, ale jestem tylko ciekawym kotem.

Wszelkie pomysły?

Odpowiedz

126

CSS3 ma pseudo-klasy o nazwie :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>


Jeśli trzeba wspierać IE8 lub wcześniej można użyć PolyFill jak IE9.js. Albo może po prostu to zrobić:

input { 
    // styles for most inputs 
} 

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

To technicznie dwóch selektorów, ale pozwala uniknąć konieczności myśleć o wszystkich typów wejściowych, które nie są „pole wyboru”.

+1

ładny! dzięki. czy selektor CSS3 jest w pełni obsługiwany? (tylko bardzo zależy mi na IE7 +, FF3 +, ostatnio Safari, ostatnio Chrome) – RPM1984

+0

@ twoja edycja. Zgoda i lubię to. Dzięki. – RPM1984

+1

Jest obsługiwany w IE9 + i wszystkich innych nowoczesnych przeglądarkach. http://www.quirksmode.org/css/contents.html#t37 –

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

To jest właściwy sposób, aby to zrobić. Niestety CSS nie jest językiem programowania.

+2

No cóż. Być może CSS4? =) – RPM1984

+4

Można jednak użyć mniej CSS lub Sass. – vbullinger

+0

Mniej, tak! Kocham to. –

Powiązane problemy