Mario: Vererbung bei Listen list-style

Hi,

<ul class="menu">  
<li>top</li>  
<li>top  
    <ul>  
    <li>sub</li>  
    <li>sub</li>  
    <li>sub  
            <ul>  
            <li>sub sub</li>  
            <li>sub sub</li>  
            <li>sub sub</li>  
            <li>sub sub</li>  
            </ul>  
    </li>  
    <li>top</li>  
    </ul>  
</li>  
<li>top</li>  
<li>top</li>  
</ul>

Ich möchte nun kein Bullet oder Einrückung, also verwende ich:

.menu{list-style:none;}

Funktioniert auch, aber nur für das erste UL.

Wenn ich das aber so mache:

.menu ul{list-style:none;}

Dann fuktioniert es, wie erwartet, bei allen UL(sub UL) innerhalb des ersten UL, natürlich nicht im ersten selbst.

Warum also vererbt sich das nicht automatisch, wenn ich das nur im ersten setze?

Gibt es irgendwo eine deutschsprachige Referenz zu lesen was sich alles vererbt und die Besonderheiten, also zb. warum sich Bodyangaben nur teilweise vererben usw...?

Mario

  1. Warum also vererbt sich das nicht automatisch, wenn ich das nur im ersten setze?

    Weil es sich nicht vererbt, und das ist gut so.
    Auch bei .class ul vererbt sich nichts.

    Vererbung ist eine Attribut von Eigenschaften, nicht von Selektoren.

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. @@Beat:

      nuqneH

      Vererbung ist eine Attribut von Eigenschaften, nicht von Selektoren.

      'list-style' wird aber vererbt. [CSS21 §12.5.1]

      Qapla'

      --
      Bildung lässt sich nicht downloaden. (Günther Jauch)
  2. Hallo

    Hi,

    <ul class="menu">

    <li>top</li>
    <li>top
        <ul>
        <li>sub</li>
        <li>sub
                <ul>
                <li>sub sub</li>
                </ul>
        </li>
        <li>top</li>
        </ul>
    </li>
    <li>top</li>
    </ul>

    
    >   
    >   
    > Ich möchte nun kein Bullet oder Einrückung, also verwende ich:  
    >   
    > .menu{list-style:none;}  
    >   
    > Funktioniert auch, aber nur für das erste UL.  
      
    Warum erwartest du die gesetzte Eigenschaft bei Elementen, die nicht der Klasse "menu" angehören?  
      
      
    
    > Wenn ich das aber so mache:  
    >   
    > .menu ul{list-style:none;}  
    >   
    > Dann fuktioniert es, wie erwartet, bei allen UL(sub UL) innerhalb des ersten UL, natürlich nicht im ersten selbst.  
      
    Logisch, es werden alle Elemente des Typs "ul" selektiert, die Kind eines Elements sind, das der Klasse "menu" angehört, jedoch dieses Element selbst nicht.  
      
    Wenn du das Element "ul", das der Klasse "menu" angehört, und dessen Kinder vom gleichen Typ selektieren willst, musst du auch genau das tun. `ul.menu, .menu ul { list-style:none; }`{:.language-css} sollte genau das erledigen.  
      
    Tschö, Auge  
    
    -- 
    Die deutschen Interessen werden am Liechtenstein verteidigt.  
      
    [Veranstaltungsdatenbank Vdb 0.3](http://termindbase.auge8472.de/)
    
    1. Hi,

      Wenn du das Element "ul", das der Klasse "menu" angehört, und dessen Kinder vom gleichen Typ selektieren willst, musst du auch genau das tun. ul.menu, .menu ul { list-style:none; } sollte genau das erledigen.

      ja natürlich tut es das, hatte ich ja schon so geschrieben. (ul ul)

      Meine Frage ergab sich aus scheinbar wechslhaftem Verhalten, was aber nur scheinbar so war. Der Grund war, dass ich im Moment einige Versuche mit Drop-Down mache und so ergab es sich, dass ich dem <li> Element auch schon mal die Eigenschaft display:block; zuwies. Damit sind dann eben auch alle Bullets weg. Das wusste ich aber nicht und so erschien der Eindruck das hätte was mit der Vererbung zu tun.

      Denn genau diese Vererbungsgeschichten leuchtet mir bis dato nicht ganz ein, daher auch die Frage nach einer Referenz, denn manchens vererbt sich, manches nur teilweise, usw...  Ich dachte zuletzt mal, seit ich weiss, dass ich den Body ausgrenzen kann und stattdessen alle Angaben im head mache wäre das alles wieder einfacher. Nun muss ich aber mittlerweiile erkennen mit neuen Browsergenerationen das ist auch wieder unterschiedlicher.

      So war zb. das Body-Problem, dass der nicht unbedingt 100% einnahm, html tat(jetzt nicht mehr) das. So muss ich nun dem HTML-Element explizit 100% Höhe und Breite geben, damit Background-position sauber arbeitet. Aber das betrifft nun nicht mehr die Vererbung ich schweife ab. Wie gesagt ich suche eine gute Referenz zu dem Thema.

      Mario

  3. Hi,

    .menu ul{list-style:none;}
    Dann fuktioniert es, wie erwartet, bei allen UL(sub UL) innerhalb des ersten UL, natürlich nicht im ersten selbst.
    Warum also vererbt sich das nicht automatisch, wenn ich das nur im ersten setze?

    Weil für list-style-type der Default-Wert nicht inherit ist.

    Gibt es irgendwo eine deutschsprachige Referenz zu lesen was sich alles vererbt und die Besonderheiten, also zb. warum sich Bodyangaben nur teilweise vererben usw...?

    nicht deutschsprachig, aber _die_ Referenz: CSS 2.1

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. @@MudGuard:

      nuqneH

      nicht deutschsprachig, aber _die_ Referenz: CSS 2.1

      Nicht mehr _die_ Referenz, aber deutschsprachig: CSS 2.0 (deutsche Übersetzung)

      Und einen Blick in _die_ Referenz werfen, ob sich gerade an der betreffenden Stelle etwas geändert hat.

      Qapla'

      --
      Bildung lässt sich nicht downloaden. (Günther Jauch)
    2. @@MudGuard:

      nuqneH

      Weil für list-style-type der Default-Wert nicht inherit ist.

      Das kann nicht die Erklärung sein.

      Sonst würden die 'li' ja auch ein Bullet haben, wenn 'ul {list-style: none}' angegeben wird.

      Qapla'

      --
      Bildung lässt sich nicht downloaden. (Günther Jauch)
  4. @@Mario:

    nuqneH

    Ich möchte nun kein Bullet oder Einrückung, also verwende ich:
    .menu{list-style:none;}
    Funktioniert auch, aber nur für das erste UL.

    Wenn ich das aber so mache:
    .menu ul{list-style:none;}
    Dann fuktioniert es, wie erwartet, bei allen UL(sub UL) innerhalb des ersten UL, natürlich nicht im ersten selbst.

    Also entweder, wie Auge sagte, beide Selektoren aufzählen:
    .menu, .menu ul {list-style: none}

    Oder einfach die Eigenschaft direkt für alle Listitems angeben:
    .menu li {list-style: none}

    Warum also vererbt sich das nicht automatisch, wenn ich das nur im ersten setze?

    Gute Frage. Ich verstehe es auch nicht.

    Bei Angabe von
    .menu {list-style: none}
    wirkt die 'list-style'-Eigenschaft nicht auf ul[@class="menu"], denn sie wirkt nur auf 'list-item'-Elemente. [CSS21 §12.5.1]

    Die Eigenschaft wird aber vererbt [ibid.], wirkt also auf ul[@class="menu"]/li.

    Dann sollte sie aber weitervererbt werden auf ul[@class="menu"]/li/ul (ohne Wirkung) und weitervererbt werden auf ul[@class="menu"]/li/ul/li und auch bei diesen 'list-item'-Elementen wieder Wirkung zeigen.

    Tut sie aber nicht. Man könnte denken, es läge an der Spezifität des Selektors, weil im Browserstylesheet derartiges steht:

      ul {list-style: disc}  
      ul ul {list-style: circle}  
      ul ul ul {list-style: square}
    

    Doch selbst
    html body ul.menu {list-style: none !important}
    zeigt keinen Einfluss auf die Listitems der untergeordneten Listen. Auch noch spezifischere Selektoren mit ID nicht.

    Da würd ich auch gern wissen, warum nicht.

    Qapla'

    --
    Bildung lässt sich nicht downloaden. (Günther Jauch)