Eşit olmayan bir CSS seçici var mı?


116

CSS'de! = (Eşit değil) gibi bir şey var mı? örneğin, aşağıdaki koda sahibim:

input {
 ... 
 ...
}

ama bazı girdiler için bunu geçersiz kılmam gerekiyor. Bunu, giriş etiketine "reset" sınıfını ekleyerek yapmak istiyorum, örneğin

<input class="reset" ... />

ve sonra bu etiketi CSS'den atlayın.

Bunu nasıl yapabilirim?

Görebilmemin tek yolu, giriş etiketine bir sınıf eklemek ve CSS'yi aşağıdaki gibi yeniden yazmaktır:

input.mod {
 ...
 ...
}

Sorunuzu cevapladınız sanırım. Stili input.mod'a koyun ve istenen giriş etiketine 'mod' sınıfını ekleyin.
Nazmul

Yanıtlar:


157

CSS3'te, :not()filtreyi kullanabilirsiniz , ancak henüz tüm tarayıcılar CSS3'ü tam olarak desteklemiyor, bu nedenle , şu anda tüm büyük tarayıcılar tarafından desteklenen (ve epeydir bu eski bir cevaptır) ne yaptığınızı bildiğinizden emin olun. ...).

Misal:

<input type="text" value="will be matched" />
<input type="text" value="will not be matched" class="avoidme" />
<input type="text" value="will be matched" />

ve CSS

input:not(.avoidme) { background-color: green; }

Not: Bu geçici çözüm artık gerekli olmamalı; Bağlam için burada bırakıyorum.

CSS3 kullanmak istemiyorsanız, stili tüm öğeler üzerinde ayarlayabilir ve ardından bir sınıfla sıfırlayabilirsiniz.

input { background-color: green; }
input.avoidme { background-color: white; }

OMG ... Var olduğunu biliyordum :) Evet, öyle! Teşekkürler.
Alex Ivasyuv

2
Destek esas olarak IE8'den (ve daha eski sürümlerden) yoksundur. Bir polyfill ile ilgilenen varsa: selectivizr.com
franzlorenzon

1
@Guru: Birden çok :not()seçiciyi zincirleyebilirsiniz : input:not(.avoidme):not(.avoidmetoo)her iki sınıfta da input:not(.avoidme.andme)öğelerden kaçınır, her iki sınıfta da öğelerden kaçınır .
Tomas Aschan

1
@TomasLycken, aslında, birden seçicileri kullanarak CSS ilginç bir olay, örneğin bir :not(.this.that) { }MAYIS iş, ama böyle bir şey yaparsanız :not(.this, .that) { }düşeceksiniz edeceğiz, bunları gibi papatya zinciri vardır: :not(.this):not(.that). Muhtemelen bunu bildiğinizi anlıyorum, gelecekteki okuyuculara yardım etmeye çalışıyorum :)
Can O 'Spam

1
Gelecekteki okuyucular için burada bir yorum bırakmak: @SamSwift 웃'nin yorumu hala doğru, ancak gelecekte listeler için destek (belki) geliyor . Şimdilik, ancak içeride yalnızca tek seçiciler destekleniyor :not().
Tomas Aschan

24

Bunu, sıfırlama sınıfındaki değişiklikleri yalnızca CSS'de "geri döndürerek" de yapabilirsiniz.

INPUT { 
    padding: 0px;
}
INPUT.reset {
    padding: 4px;
}


6

Buna, aşağıdaki gibi bir özelliği hedefleyerek de yaklaşabilirsiniz:

input:not([type=checkbox]){ width:100%; }

Bu durumda, 'onay kutusu' tipi olmayan tüm girişlerin genişliği% 100 olacaktır.


4

İlginç olan, JQuery kullanarak DOM öğesini seçmek için bunu denedi ve işe yarıyor! :)

$("input[class!='bad_class']");

Bu sayfada 'açıklama-kopya' sınıfı olmayan 168 div vardır.

$("div[class!='comment-copy']").length => 168
$("div[class!='.comment-copy']").length => 168

11
[attr!="value"]a, jQuery sadece seçici api.jquery.com/attribute-not-equal-selector
XEC

Bunun CSS ile ne ilgisi var?
devlin carnate

@devlincarnate "CSS" seçicileri JS'ye aktı ( yaklaşık 2013 ), bu yüzden insanlar onu arıyor .
Nick T

0

class = "reset" yerine, class = "valid" ile mantığı tersine çevirebilirsiniz Bunu varsayılan olarak ekleyebilir ve stili sıfırlamak için sınıfı kaldırabilirsiniz.

Yani sizin örneğinizden ve Tomas'ın

input.valid {
 ... 
 ...
}

ve

<input type="text" value="will be matched" class="valid"/>
<input type="text" value="will not be matched" />
<input type="text" value="will be matched" class="valid"/>

2
Sanırım bir sınıfa başvurarak "sıfırlayabilme" fikri, varsayılan stile sahip olmaması gereken öğelerin sayısının olması gerekenleri büyük ölçüde aşmasıydı, bu nedenle OP herhangi bir sınıfa uygulamak istemedi . elementlerin çoğu.
Tomas Aschan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.