not: birinci çocuk seçici


811

Birkaç divetiketi içeren bir etiketim varul .

ulYalnızca ilk etiket için CSS özelliklerini ayarlayabiliyorum :

div ul:first-child {
    background-color: #900;
}

Ancak, aşağıdaki ulilk etiket dışında birbirleri için CSS özelliklerini ayarlamaya çalışır:

div ul:not:first-child {
    background-color: #900;
}

div ul:not(:first-child) {
    background-color: #900;
}

div ul:first-child:after {
    background-color: #900;
}

CSS'de nasıl yazabilirim: "ilk öğe hariç her öğe"?

Yanıtlar:


1414

Yayınladığınız versiyonlarından biri gerçekten çalışıyor (tüm modern tarayıcılar için CSS seçicileri düzey 3 edilir desteklenir ):

div ul:not(:first-child) {
    background-color: #900;
}

Eski tarayıcıları desteklemeniz gerekiyorsa veya :notseçicinin sınırlamasından etkileniyorsanız (yalnızca basit bir seçiciyi bağımsız değişken olarak kabul eder ) başka bir teknik kullanabilirsiniz:

Hedeflediğinizden daha geniş kapsamı olan bir kural tanımlayın ve ardından kapsamını amaçladığınız şeyle sınırlayarak koşullu olarak "iptal edin":

div ul {
    background-color: #900;  /* applies to every ul */
}

div ul:first-child {
    background-color: transparent; /* limits the scope of the previous rule */
}

Kapsamı sınırlandırırken ayarladığınız her CSS özelliği için varsayılan değeri kullanın .


bunun hangi sürümlerde desteklenmediğini tam olarak biliyor musunuz?
— Simon_Weaver

9
@Simon_Weaver: Uygulamada IE <9 dışındaki her şey destekliyor. Bu tür bilgileri almak için harika bir kaynak caniuse.com'dur .
— Jon

2
Hmm .. ilk çözümün kısıtlamalarına dikkat edin: caniuse.com/#feat=css-not-sel-list İkincisi benim için daha makul geldi. Teşekkürler!
— iorrah

@iorrah caniuse bağlantınız bir seçici listesi içindir ve evet, destek hala çok sınırlıdır. OP bir seçici listesi kullanmıyor. Bu yüzden https://caniuse.com/#feat=css-sel3 IE8 günlerinin ötesinde büyük destekle daha uygun olduğunu düşünüyorum .
— secretwep

Bu, kromdaki başlangıçta div öğesi olmadan bile çalışır.
— Achraf JEDAY

158

Bu CSS2 çözümü (" ulbirbiri ardına ul") da çalışır ve daha fazla tarayıcı tarafından desteklenir.

div ul + ul {
  background-color: #900;
}

Farklı olarak :notve :nth-sibling, bitişik kardeş seçici IE7 + tarafından desteklenmektedir.

Eğer varsa JavaScript sayfa yüklendikten sonra, bu özellikleri değiştirir, içeri bilinen bazı hatalar bakmak gerekir IE7 ve IE8 bu uygulamaları. Bu bağlantıya bakın .

Herhangi bir statik web sayfası için, bu mükemmel bir şekilde çalışmalıdır.


4
@Leven: Bu quirksmode bağlantısı IE7'de çalışması gerektiğini söylüyor, ancak sadece statik olarak. JS'niz önüne başka bir öğe yerleştirirse, doğru şekilde güncellenmeyebilir. Gördüğün sorun bu mu?
— Alex Quinn

ul ul div ul(bu elementlerin kardeş olduğu yerlerde) gibi bir dizi ul
— Brian H.

79

Yana :nottarafından kabul edilmeyen IE6-8 , sana bu öneririm:

div ul:nth-child(n+2) {
    background-color: #900;
}

Böylece , birincisi dışındaul ana öğesindeki her şeyi seçersiniz .

Daha fazla örnek için Chris Coyer'ın "Yararlı: n. Çocuk Tarifler" makalesine bakın .nth-child


2019'da hala IE6-8'i kim kullanıyor?
— oldboy

15
Cevabın 2013'ten geldiğini mi düşünüyorsunuz?
— aasukisuki


14

not(:first-child)artık işe yaramıyor gibi görünüyor. En azından Chrome ve Firefox'un daha yeni sürümleriyle.

Bunun yerine şunu deneyin:

ul:not(:first-of-type) {}

6
İkisi de çalışır, ancak farklı anlamları vardır. ul:not(:first-child)kelimenin tam anlamıyla " ulüst öğesinin ilk çocuğu olmayan herhangi bir öğe " anlamına gelir ; dolayısıyla ul, başka bir öğeden ( pbaşlık vb.) önce gelirse 1. öğe ile bile eşleşmez . Aksine, ul:not(:first-of-type)" konteynerde ul1'inci dışında herhangi bir eleman " anlamına gelir ul. OP'nin muhtemelen ikinci davranışa ihtiyaç duyduğu konusunda haklısınız, ancak açıklamanız oldukça yanıltıcı.
— Ilya Streltsyn

9

İle herhangi bir seçici kullanabilirsiniz not

p:not(:first-child){}
p:not(:first-of-type){}
p:not(:checked){}
p:not(:last-child){}
p:not(:last-of-type){}
p:not(:first-of-type){}
p:not(:nth-last-of-type(2)){}
p:not(nth-last-child(2)){}
p:not(:nth-child(2)){}

4

Yukarıdakilerin bazıları ile şansım olmadı,

Benim için gerçekten işe yarayan tek kişi buydu

ul:not(:first-of-type) {}

Sayfada görüntülenen ilk düğmenin kenar boşluğu bırakma seçeneğinden etkilenmemesini sağlamaya çalıştığımda bu benim için çalıştı.

bu ilk denediğim seçenekti ama işe yaramadı

ul:not(:first-child)


4

Seçicinizi aşağıdaki :notgibi kullanabilirsiniz, içindeki herhangi bir seçiciyi kullanabilirsiniz:not()

any_CSS_selector:not(any_other_CSS_selector){
    /*YOUR STYLE*/
}

:notüst seçici olmadan da kullanabilirsiniz .

   :not(:nth-child(2)){
        /*YOUR STYLE*/
   }

Daha fazla örnek

any_CSS_selector:not(:first-child){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:first-of-type){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:checked){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:last-child){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:last-of-type){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:first-of-type){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:nth-last-of-type(2)){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:nth-last-child(2)){
    /*YOUR STYLE*/
}
any_CSS_selector:not(:nth-child(2)){
    /*YOUR STYLE*/
}

0

Kullandığım gibi ul:not(:first-child)mükemmel bir çözüm.

div ul:not(:first-child) {
    background-color: #900;
}

Bu neden mükemmel? Çünkü kullanarak ul:not(:first-child), iç elemanlara CSS uygulayabiliriz. Sevmekli, img, span, a etiketler vs.

Ancak diğerleri kullanıldığında çözümler:

div ul + ul {
  background-color: #900;
}

ve

div li~li {
    color: red;
}

ve

ul:not(:first-of-type) {}

ve

div ul:nth-child(n+2) {
    background-color: #900;
}

Bunlar sadece ul seviyesi CSS'yi kısıtlar. Diyelim ki CSS'yi li`` div ul + ul li '' olarak uygulayamayız .

İç seviye elemanları için ilk Çözüm mükemmel çalışır.

div ul:not(:first-child) li{
        background-color: #900;
    }

ve bunun gibi ...

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.