最初の直接の子専用のCSSセレクターはありますか?


315

私は次のhtmlを持っています

<div class="section">
   <div>header</div>
   <div>
          contents
          <div>sub contents 1</div>              
          <div>sub contents 2</div>
   </div>
</div>

そして次のスタイル:

DIV.section DIV:first-child 
{
  ...
}

なんらかの理由で、スタイルが「サブコンテンツ1」 <div>「ヘッダー」に 適用されていることがわかりません<div>

スタイルのセレクターは、「セクション」というクラスを持つdivの最初の直接の子にのみ適用されると思いました。セレクタを変更して必要なものを取得するにはどうすればよいですか?


回答:


519

あなたが文字通り投稿したことは、「セクションdiv内にあり、その親の最初の子であるdivを見つける」ことを意味します。サブには、その説明に一致するタグが1つ含まれています。

メインdivの両方の子が必要かどうかは、私にはわかりません。もしそうなら、これを使用してください:

div.section > div

ヘッダーのみが必要な場合は、次のようにします。

div.section > div:first-child

>変更を使用すると、説明が「セクションdivの直接の子孫であるdivを検索する」に変わります。

IE6を除くすべての主要なブラウザがこの方法をサポートしていることに注意してください。IE6のサポートがミッションクリティカルな場合は、代わりにクラスを子divに追加して使用する必要があります。そうでなければ、それは気にする価値はありません。


8
この場合、:first-childは不要です。
eozzy

3
OPがセレクターについて尋ねているのではなく、なぜすべての子divにルールが適用されているのかと思われます。
Doug Neiner、2010年

私の解釈では、彼はCSS継承の概念を理解しており、ファーストチャイルドには>の効果があると考えていました。言葉遣いが不明確です。
Matchu

3
ああ、「直接の子孫」セレクターがすべての問題を解決するときを覚えておくのに十分な年齢であることの喜びは、IEで機能しなかったため使用できませんでした。その後、多くの不必要な欲求不満が起こります。
aroth

最初の子にも適用されます。最初の子にのみ変更を適用する必要がある場合は、子の子の変更をキャンセルする必要があります。次のようなもの:div.section > div:first-child > div { /* Cancel Changes*/}
Mahdi J.Ansari

51

Googleで検索してこの質問を見つけました。これはcontainer、子のタイプに関係なく、classを持つ要素の最初の子を返します。

.container > *:first-child
{
}

44

CSSは、ルールが継承されるため、カスケードスタイルシートと呼ばれます。次のセレクタを使用して、します親だけの直接の子を選択しますが、そのルールはされ継承されたことによってdivの子供divs

div.section > div { color: red }

さて、その両方div その子になりますred。継承したくない場合は、親に設定したものをキャンセルする必要があります。

div.section > div { color: red }
div.section > div div { color: black }

これで、そのdiv直接の子であるシングルだけdiv.sectionが赤になりますが、その子divsはまだ黒になります。



6

を使用しdiv.section > divます。

さらによいのは、CSSの<h1>見出しとタグにタグを使用して、div.section h1古いブラウザ(を認識しない>)をサポートし、マークアップのセマンティック維持することです。


良い考えですが、残念ながらIE6もサポートする必要があります。h1を使用する場合は、font-sizeを継承に設定して、フォントが本体のフォントと一致するようにする必要があります。ie7以下は継承をサポートしません。arg!
ジェレミー

また、私は子divを持っていて、h1に子divを置くとルールが破られます。IEがそれをレンダリングしても、他のブラウザーが何をするかわかりません
Jeremy

3

あなたの場合の直接の最初の子のCSSセレクターは次のとおりです:

.section > :first-child

直接セレクターは>であり、最初の子セレクターは:first-child

他の人が示唆するように、:の前にアスタリスクは必要ありません。タグを先頭に追加してこのソリューションを変更することで、DOM検索を高速化できます。

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