CSS入力タイプセレクター-「or」または「not」構文を使用できますか?


101

それらがプログラミングに存在する場合)、

次の入力を含むHTMLフォームがある場合:

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

type="text"またはであるすべての入力にスタイルを適用したいtype="password"

あるいは、すべての入力のwhereで解決しますtype != "checkbox"

私はこれをしなければならないようです:

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

行う方法はありません:

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

または

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

私は周りを見回しましたが、単一のCSSセレクターでこれを行う方法はないようです。

もちろん大したことではありませんが、私は好奇心旺盛な猫です。

何か案は?

回答:


183

CSS3には:not()という疑似クラスがあります

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>


複数のセレクター

Vincentが述べたように、複数:not()のを連結することが可能です。

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

CSS4 はまだ広くサポートされていませんが、複数のセレクターを:not()

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


レガシーサポート

最新のブラウザはすべてCSS3構文をサポートしています。この質問があったときに、IE7とIE8のフォールバックが必要でした。1つのオプションは、IE9.jsのようなポリフィルを使用することでした。もう1つは、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!
} 

1
良いですね!ありがとう。そのCSS3セレクターは完全にサポートされていますか?(私は本当にIE7 +、FF3 +、最近のSafari、Chromeの最近のことだけを気にします)
RPM1984

1
IE9 +およびその他のすべての最新ブラウザーでサポートされています。quirksmode.org/css/contents.html#t37
Patrick McElhaney

12
完全を期すために、複数の「not」を実行する場合、これは使用する構文です:input:not([type = 'checkbox']):not([type = 'submit'])
Vincent

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.