Вибірці типу вводу CSS - можливо мати синтаксис "чи" чи "не"?


101

Якщо вони існують в програмуванні),

Якщо у мене є форма HTML із такими входами:

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

Я хочу застосувати стиль до всіх входів, які є type="text"або type="password".

Крім того, я б погодився з усіма вхідними документами, де 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>


Кілька селекторів

Як згадував Вінсент, можна зв'язати кілька :not()s разом:

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

CSS4, який ще не підтримується широко , дозволяє декілька селекторів у a:not()

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


Підтримка спадщини

Усі сучасні браузери підтримують синтаксис CSS3. У той час, коли це питання було задано, нам знадобилася резервна підтримка IE7 та IE8. Один з варіантів полягає у використанні polyfill як IE9.js . Іншим було використання каскаду в 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 повністю підтримується? (Мені дуже
цікаво

1
Він підтримується в IE9 + та всіх інших сучасних браузерах. quirksmode.org/css/contents.html#t37
Патрік МакЕлхані

12
Для повноти, якщо ви хочете зробити кілька "не" s, це синтаксис для використання: input: not ([type = 'checkbox']): not ([type = 'submit'])
Vincent

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

Це правильний спосіб зробити це. На жаль, CSS не є мовою програмування.


4
Ви можете використовувати менше CSS або Sass.
vbullinger

Менше, так! Я це люблю.
Bartłomiej Zalewski
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.