2012-09-05 6 views
513

divタグには、複数のulタグが含まれています。not:first-childセレクタを使用するにはどうしたらいいですか?

私は最初ulタグのCSSプロパティを設定しようとしており、このコードが動作する場合:

私は最初を除く各 ulタグのCSSプロパティを設定したい
div ul:first-child { 
    background-color: #900; 
} 

、私はこれを試してみました

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で書く必要があります: "最初の要素を除く各要素"?バージョンの

+6

リー:ありません(:最初の子) – zloctb

答えて

886

一つは、あなたは(CSS selectors level 3supportedをしている)すべての最新ブラウザのためactually works投稿:

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

レガシーブラウザをサポートする必要がある場合に、またはあなたが(それだけ:notセレクタのlimitationによって妨げられる場合

意図した範囲よりも広い範囲を持つルールを定義し、その範囲を条件付きで「取り消し」、その範囲を意図したものに限定することができます。

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

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

範囲を制限する場合は、設定する各CSS属性に対してdefault valueを使用します。 :notIE6〜8によって受け入れられていないので

+0

@OTARIKIを:実際に ':ありません(:最初の子を)'作品 - 更新をご覧ください。 – Jon

+1

Ups、何らかの理由でこれは私のクロムでは機能しませんでした(最初はこのコードをクロームでのみテストしていました)。これを他のブラウザーやコードでテストしました。問題が解決しました。ありがとうございました:) – RIKI

+0

これはサポートされていないバージョンを正確に知っていますか? –

51

まあ、私はあなたにこのことをお勧めします:

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

ですから、最初の1除いて、その親要素内のすべてのulを選びます。

examplesnth-child多くのためのクリスCoyerの"Useful :nth-child Recipes"の記事を参照してください。

+7

2番目の要素以降を得るには実際に(n + 2)にする必要がありますAKAは最初の要素をスキップします – stuyam

+1

@ヤマティノは正しく、n + 2でなければなりません、この回答を編集するには良いでしょう。 –

+2

@ ed1nk0あなたの答えを編集してセレクタを修正しました。ここであなたの意図を覆してしまった場合は、ロールバックしてください:)そうでなければ、これは最初の要素以外のすべてを選択する最良の方法です。 – jammypeach

126

このCSS2ソリューション(「ulの後にはulのいずれかが続きます」)も機能し、より多くのブラウザでサポートされています。 :not:nth-sibling異なり

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

adjacent sibling selectorはIE7 +によって支持されています。

あなたはを持っている場合はJavaScriptは、ページのロード後にこれらのプロパティを変更し、あなたがこののIE7IE8実装でいくつかの既知のバグをご覧ください。 See this link

静的なWebページの場合、これは完全に動作するはずです。

+0

'+'セレクタはIE7では動作しないようです。 – Leven

+3

@Leven:[quirksmode link](http://www.quirksmode.org/css/selectors/)はIE7で動作するはずだが、静的にしか動作しないと言います。あなたのJSがそれの前に別の要素を置くと、正しく更新されないかもしれません。それはあなたが見た問題ですか? –

+0

は、 'ul ul div ul'(これらの要素が兄弟である)のような要素のシーケンスでは、最後のulがそれ自身の前に' ul'を持たないので、2番目のulのみが選択されることに注意する価値があります。 –

14
div li~li { 
    color: red; 
} 

はIE7

0

not(:first-child)はもう動作していないようサポートします。少なくともChromeとFirefoxの最新のバージョンで。

代わりに、これを試してみてください。

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

どちらも機能しますが、意味が異なります。 'ul:not(:first-child)'は文字通り ''親の最初の子ではない '' ul''要素を意味します。したがって、 'ul'の前に別の要素'、見出しなど)。逆に、 'ul:not(first-of-type)'は、「コンテナ内の最初の 'ul'を除くすべての' ul'要素を意味します。 OPはおそらく後者の行動を必要とするかもしれませんが、あなたの説明はむしろ誤解を招くものです。 –