Matze: Frage zu first-child

Hallo!

Ich wollte das erste Kind eines Elements mit einer bestimmten Klasse ansprechen.
Leider werden die Angaben zu :first-child aber ignoriert.
Könnte mir bitte jemand sagen wo mein Fehler liegt?

Hier der Code:

.foo:first-child {  
    border:1px solid red;  
}
<ul>  
    <li>test</li>  
    <li class="foo"><h3>test</h3></li>  
</ul>

Danke und Grüße, Matze

  1. Könnte mir bitte jemand sagen wo mein Fehler liegt?

    Sicher doch.

    Vor allem: Was erwartest du von deinem Code in welchem Browser?

    1. @@suit:

      nuqneH

      Sicher doch.

      ?? Ich finde Matze’s Informationen durchaus ausreichend.

      Vor allem: Was erwartest du von deinem Code in welchem Browser?

      Dass das Element '<li class="foo"><h3>test</h3></li>' rot umrahmt wird.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. Vor allem: Was erwartest du von deinem Code in welchem Browser?

        Dass das Element '<li class="foo"><h3>test</h3></li>' rot umrahmt wird.

        Für mich ist nicht ersichtlich ob das h3-Element als 1. Kind des LI-Elements gemeint ist (da ist schlichtweg der Selektor flasch) oder das erste li-Element das erste Element innerhalb welches die Klasse Foo trägt - wofür :nth-of-type() oder :nth-child() besser geeignet wäre und :first-child hier ohnehin nicht zutrifft.

    2. Vor allem: Was erwartest du von deinem Code in welchem Browser?

      Ich möchte das h3-Element ansprechen. Habs aber geschafft.
      Ich hatte falsch verstanden, dass .foo:firstchild nicht das erste Kind von .foo sondern das erste .foo anspricht.

      Grüße, Matze

      1. Ich möchte das h3-Element ansprechen. Habs aber geschafft.

        Dann ist ja gut - also hatte Gunnar unrecht :p WIN

        1. @@suit:

          nuqneH

          also hatte Gunnar unrecht :p WIN

          Du bescheißt.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. also hatte Gunnar unrecht :p WIN

            Du bescheißt.

            Natürlich - und ich kann damit sämtliche alternativen Realitäten sehen :p

      2. Hi Matze.

        Ich hatte falsch verstanden, dass .foo:firstchild nicht das erste Kind von .foo sondern das erste .foo anspricht.

        Das tut es (i.a.) auch nicht. Es spricht alle Elemente der Klasse "foo" an, die das erste Kind ihres Elternelementes sind.

        Viele Gruesse,
        der Bademeister

  2. Hi,

    Ich wollte das erste Kind eines Elements mit einer bestimmten Klasse ansprechen.

    dann hast du vermutlich eine andere Vorstellung als dein Browser, welches das erste Kind ist. Oder du verwendest einen Browser, der :first-child nicht kennt, etwa den IE6.

    .foo:first-child {

    border:1px solid red;
    }

    
    >   
    > ~~~html
    
    <ul>  
    
    >     <li>test</li>  
    >     <li class="foo"><h3>test</h3></li>  
    > </ul>
    
    

    Hast du das exakt so im Quellcde stehen? Also kein Zeilenumbruch oder Whitespace zwischen <li class="foo"> und <h3>? - Denn dann wäre der Textknoten, der den Whitespace enthält, das erste Kind.

    Ciao,
     Martin

    --
    Um die Wahrheit zu erfahren, muss man den Menschen widersprechen.
      (George Bernhard Shaw)
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hast du das exakt so im Quellcde stehen? Also kein Zeilenumbruch oder Whitespace zwischen <li class="foo"> und <h3>? - Denn dann wäre der Textknoten, der den Whitespace enthält, das erste Kind.

      Das würde auf :-moz-first-node zutreffen, :first-child selektiert den ersten Elementknoten.

    2. Om nah hoo pez nyeetz, Der Martin!

      Hast du das exakt so im Quellcde stehen? Also kein Zeilenumbruch oder Whitespace zwischen <li class="foo"> und <h3>? - Denn dann wäre der Textknoten, der den Whitespace enthält, das erste Kind.

      Ich habs grade mal mit und ohne whitespace getestet, dass Ergebnis ist dasselbe. (FF3.6)

      Solche Spitzfindigkeiten mit Textknoten habe ich bisher immer js zugeordnet?

      Matthias

      --
      http://www.billiger-im-urlaub.de/kreis_sw.gif
      1. Ich habs grade mal mit und ohne whitespace getestet, dass Ergebnis ist dasselbe. (FF3.6)

        natürlich - der OP enthält uns aber vor, was er erwartet.

  3. @@Matze:

    nuqneH

    Könnte mir bitte jemand sagen wo mein Fehler liegt?

    In deiner Denke.

    '.foo:first-child' selektiert nicht das erste Element der Klasse "foo", sondern alle Elemente, die der Klasse "foo" angehören _und_ erstes Kindelement sind. Bei dir also gar keins:

    <ul>  
        <li>test</li>
    

    Dieses ist das erste Kindelement.

    <li class="foo"><h3>test</h3></li>

    Dieses Element gehört der Klasse "foo" an.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
  4. .foo:first-child {

    border:1px solid red;
    }

      
    .foo:first-child  
    und  
    .foo :first-child  
      
    Denke darüber nach, was du willst.  
      
    
    > ~~~html
    
    <ul>  
    
    >     <li>test</li>  
    >     <li class="foo"><h3>test</h3></li>  
    > </ul>
    
    

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Om nah hoo pez nyeetz, Beat!

      .foo:first-child und .foo :first-child

      vielleicht wegen der Vollständigkeit besser

      .foo *:first-child?

      Matthias

      --
      http://www.billiger-im-urlaub.de/kreis_sw.gif
      1. vielleicht wegen der Vollständigkeit besser

        .foo *:first-child?

        Wozu?

        ansonsten könntest du auch gleich mit html>head~body li.foo>h3:first-child daherkommen, damits "vollständiger" ist :p

        1. ansonsten könntest du auch gleich mit html>head~body li.foo>h3:first-child daherkommen, damits "vollständiger" ist :p

          inline ist übervollständiger !

          mfg Beat

          --
                           /|
            <°)))o><   __ / |    /|
                      /__\ _|___/ |     ><o(((°>
                     OvVVvO    __ |        ><o(((°>
          <°)))o><  /v    v\/  |
           <°)))o>< ^    ^/_/_         ><o(((°>
                     ^^^^/___/
                      ----            ><o(((°>
          ><o(((°>           ><o(((°>
             <°)))o><                     ><o(((°>o
          Der Valigator leibt diese Fische
          1. inline ist übervollständiger !

            Ich kann dir nicht folgen.

            1. inline ist übervollständiger !

              Ich kann dir nicht folgen.

              von übervollständiger nach überflüssig.
              War ein joke.

              mfg Beat

              --
              ><o(((°>           ><o(((°>
                 <°)))o><                     ><o(((°>o
              Der Valigator leibt diese Fische
      2. @@apsel:

        nuqneH

        vielleicht wegen der Vollständigkeit besser
        .foo *:first-child?

        Warum inkonsequent?

        Was soll daran besser sein? Cf. [CSS2 §5.3]

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. Om nah hoo pez nyeetz, Gunnar Bittersmann!

          .foo :first-child?

          so 'ne einsame Pseudoklasse, die weiß ja vielleicht garnicht zu wem sie gehört.

          Matthias

          --
          http://www.billiger-im-urlaub.de/kreis_sw.gif
          1. .foo :first-child?

            so 'ne einsame Pseudoklasse, die weiß ja vielleicht garnicht zu wem sie

            Ach so:

            .foo > :first-child

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
          2. @@apsel:

            nuqneH

            so 'ne einsame Pseudoklasse, die weiß ja vielleicht garnicht zu wem sie gehört.

            ?? Doch, sie weiß, zu wem sie gehört: zu jedem Element.

            Wie du dem verlinkten Abschnitt der CSS-Spec entnehmen konntest, ist ':first-child' identisch zu '*:first-child'.

            Und warum du beim Pseudoklassenselektor '*' davorschreiben wolltest, beim Klassenselektor '.foo' aber nicht ('*.foo'), hast du auch noch nicht beantwortet.

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Om nah hoo pez nyeetz, Gunnar Bittersmann!

              ?? Doch, sie weiß, zu wem sie gehört: zu jedem Element.

              Wie du dem verlinkten Abschnitt der CSS-Spec entnehmen konntest, ist ':first-child' identisch zu '*:first-child'.

              Ja.

              Und warum du beim Pseudoklassenselektor '*' davorschreiben wolltest, beim Klassenselektor '.foo' aber nicht ('*.foo'), hast du auch noch nicht beantwortet.

              Jetzt weiß ich auch, was die Frage "warum inkonsequent?" bedeuten soll.

              Matthias

              --
              http://www.billiger-im-urlaub.de/kreis_sw.gif