Der Martin: User-CSS: Geeignete Selektoren finden

Hallo miteinander,

ich bin gerade dabei, nach dem Forums-Update mein User-CSS darauf anzupassen. An ein paar Kleinigkeiten beiße ich mir bisher wohl die Zähne aus, da wäre eine kleine Hilfestellung oder Anregung willkommen.

Zum Beispiel finde ich keinen CSS-Selektor, mit dem ich die Kategoriebezeichnung vor jedem Posting-Titel im Threadbaum ansprechen kann. Schön, dass die Klammern um den Kategoriennamen jetzt eigene Klassen bekommen haben, aber was zwischen den Klammern steht, erwische ich noch nicht.
Ebenso finde ich keinen Selektor für die Link-Grafiken am Rand, mit denen der Thread auf- oder zugeklappt werden kann.

Mein zweites Problem ist möglicherweise ein generelles CSS-Verständnisproblem. Ich möchte über mein User-CSS gelesene und ungelesene Postings farblich unterscheiden lassen. Die serverseitige Markierung schmeckt mir hier nicht, weil
a) nur das a-Element mit dem Posting-Titel eingefärbt sein soll und
b) ich nicht die gelesenen, sondern die _un_gelesenen Postings farblich vom Rest der Seite unterscheiden will.

Der Threadbaum wird ja als geschachtelte <ul><li>-Konstruktion angelegt. Mein Problem ist nun, dass ein Posting als "gelesen" angezeigt wird, sobald eines der Eltern-Postings gelesen ist. Es scheint also eine Vererbung der Eigenschaften vom äußeren ins innere <li> zu geben. Ich dachte eigentlich, dass ich das mit dem folgenden CSS-Schnipsel vermeide:

li.visited a,
li.visited a:link,
li.visited a:visited,
li.visited a b,
li.visited a:link b,
li.visited a:visited b
 { color: #000000;     /* gelesene Postings schwarz */
 }

li a,
li a:link,
li a:visited,
li a b,
li a:link b,
li a:visited b
 { color: #C00000;     /* alle anderen rot */
 }

Mit dem ersten Zweig färbe ich die Posting-Titel der bereits gelesenen Postings (li class="visited") schwarz, mit dem zweiten färbe ich diejenigen rot, in denen das <li> Element _nicht_ die Klasse "visited" hat.
Habe ich da einen Denkfehler drin?

Heißen Dank schon mal,

Martin

  1. Hi,

    ich bin gerade dabei, nach dem Forums-Update mein User-CSS darauf anzupassen. An ein paar Kleinigkeiten beiße ich mir bisher wohl die Zähne aus, da wäre eine kleine Hilfestellung oder Anregung willkommen.

    Welchen Browser nutzt Du? Davon ist abhängig, welche Selektoren unterstützt werden.

    Zum Beispiel finde ich keinen CSS-Selektor, mit dem ich die Kategoriebezeichnung vor jedem Posting-Titel im Threadbaum ansprechen kann. Schön, dass die Klammern um den Kategoriennamen jetzt eigene Klassen bekommen haben, aber was zwischen den Klammern steht, erwische ich noch nicht.

    span.category
    und ggf. Werte für die Klammern per
    span.category span.braces
    wieder überschreiben.

    Ebenso finde ich keinen Selektor für die Link-Grafiken am Rand, mit denen der Thread auf- oder zugeklappt werden kann.

    Geckos kennen z.B. [href=url], [href^=urlanfang], [href$=urlende], ...

    Mein zweites Problem ist möglicherweise ein generelles CSS-Verständnisproblem. Ich möchte über mein User-CSS gelesene und ungelesene Postings farblich unterscheiden lassen. Die serverseitige Markierung schmeckt mir hier nicht, weil
    a) nur das a-Element mit dem Posting-Titel eingefärbt sein soll und
    b) ich nicht die gelesenen, sondern die _un_gelesenen Postings farblich vom Rest der Seite unterscheiden will.

    Der Threadbaum wird ja als geschachtelte <ul><li>-Konstruktion angelegt. Mein Problem ist nun, dass ein Posting als "gelesen" angezeigt wird, sobald eines der Eltern-Postings gelesen ist. Es scheint also eine Vererbung der Eigenschaften vom äußeren ins innere <li> zu geben. Ich dachte eigentlich, dass ich das mit dem folgenden CSS-Schnipsel vermeide:

    Wie oben, ggf. für Nachfahrenelemente mit höherwertigem Selektor die Werte wieder überschreiben,

    also z.B. statt
    li.visited a { /* irgendwas */ }
    li a { /* irgedwas anderes */ }

    eben

    li.visited a { /* irgendwas */ }

    li.visited li a, li a { /* irgedwas anderes (ggf. irgendwas wieder zurücksetzen */ }

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hi MudGuard,

      Welchen Browser nutzt Du? Davon ist abhängig, welche Selektoren unterstützt werden.

      Hmpf. Erwischt.  ;)
      Ich bin immer mal wieder mit verschiedenen Browsern hier im Forum unterwegs, deswegen habe ich dazu nichts angegeben. Ich suche also eine Lösung, die mit Geckos funktioniert (dürfte so schwierig nicht sein), aber auch mit IEs ab Version 5.

      span.category
      und ggf. Werte für die Klammern per
      span.category span.braces
      wieder überschreiben.

      Äh? Im Quelltext finde ich kein class="category", sonst wäre das ja alles ganz einfach! Die Kategoriebezeichnung steht einfach als Text-Node mitten im <li>.

      Geckos kennen z.B. [...]

      Jaaa, die Geckos schon... :-|

      Wie oben, ggf. für Nachfahrenelemente mit höherwertigem Selektor die Werte wieder überschreiben,

      also z.B. statt
      li.visited a { /* irgendwas */ }
      li a { /* irgedwas anderes */ }

      eben

      li.visited a { /* irgendwas */ }

      li.visited li a, li a { /* irgedwas anderes (ggf. irgendwas wieder zurücksetzen */ }

      Hmm, danke für den Rat, aber das muss ich nochmal auf mich (bzw. meine Browser) wirken lassen.

      So long,

      Martin

      1. 你好 Der,

        span.category
        und ggf. Werte für die Klammern per
        span.category span.braces
        wieder überschreiben.

        Äh? Im Quelltext finde ich kein class="category", sonst wäre das ja alles
        ganz einfach! Die Kategoriebezeichnung steht einfach als Text-Node mitten
        im <li>.

        Benutze die XHTML-Ansicht. Die HTML4-Ansicht ist mit Absicht konservativ
        gehalten.

        再见,
         克里斯蒂安

        --
        lim(3->4)(sqrt(3)) = 2
        http://wwwtech.de/
        1. Hallo.

          Die HTML4-Ansicht ist mit Absicht konservativ
          gehalten.

          Und mit welcher Absicht?
          MfG, at

      2. Hi,

        span.category
        und ggf. Werte für die Klammern per
        span.category span.braces
        wieder überschreiben.

        Äh? Im Quelltext finde ich kein class="category", sonst wäre das ja alles ganz einfach! Die Kategoriebezeichnung steht einfach als Text-Node mitten im <li>.

        Aus der Zeile mit meinem Posting von 13.07.2005, 18:29:

        <span class="subject"><span class="category"><span class="tn braces">(</span>ZU DIESEM FORUM<span class="tn braces">)</span></span>

        Aus der Zeile mit dem aktuellen Posting (Deins von 13.07.2005, 18:39)

        <span class="subject"><span class="category"><span class="tn braces">(</span>ZU DIESEM FORUM<span class="tn braces">)</span></span>

        Aus der Zeile mit dem Eröffnungsposting dieses Threads:

        <span class="posting"><span class="subject"><strong class="category"><span class="tn braces">(</span>ZU DIESEM FORUM<span class="tn braces">)</span></strong>

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    2. 
      > li.visited a { /* irgendwas */ }  
      > li.visited li a, li a { /* irgedwas anderes (ggf. irgendwas wieder zurücksetzen */ }
      
      

      Dann ist es sinnlos, li.visited zu benutzen, dann kann man auch a.visited nutzen, oder? a.visited bedarf keiner Zurücksetzung.
      Die Frage ist ja, wie man aus <li class="visited"> einen Nutzen ziehen kann. Zum Beispiel um mehr als nur den Link selbst umzuformatieren. Wenn ich das richtig sehe, muss man in einem solchen Fall folgendes nehmen:

      li { background-color:white; }  
      li.visited { background-color:gray; }
      

      Und wie geht es für Unterelemente, ohne den Kindselektor zu benutzen? So ja nicht:

      .subject { background-color:white; }  
      .visited .subject { background-color:#aaa; }
      

      Mathias

  2. Hi,

    Schön, dass die Klammern um den Kategoriennamen jetzt eigene Klassen bekommen haben, aber was zwischen den Klammern steht, erwische ich noch nicht.

    beides steht in einem <strong class="category">, welches nichts außer dem Genannten enthält.

    Ebenso finde ich keinen Selektor für die Link-Grafiken am Rand, mit denen der Thread auf- oder zugeklappt werden kann.

    Die Links besitzen jeweils recht eindeutige Klassen.

    Mein zweites Problem ist möglicherweise ein generelles CSS-Verständnisproblem. Ich möchte über mein User-CSS gelesene und ungelesene Postings farblich unterscheiden lassen. Die serverseitige Markierung schmeckt mir hier nicht,

    Soweit ich es sehe, resultiert diese in der Klasse "visited" bei den betreffenden <li>- bzw. <a>-Elementen. Davon ausgehend kannst Du Dein CSS individuell gestalten.

    a) nur das a-Element mit dem Posting-Titel eingefärbt sein soll und

    Hm. Wo genau siehst Du da Dein Problem?

    b) ich nicht die gelesenen, sondern die _un_gelesenen Postings farblich vom Rest der Seite unterscheiden will.

    Wo siehst Du den Unterschied? Von zwei Arten soll die eine anders sein als die andere. Damit ist unbedingt die andere auch anders als die eine.

    Der Threadbaum wird ja als geschachtelte <ul><li>-Konstruktion angelegt. Mein Problem ist nun, dass ein Posting als "gelesen" angezeigt wird, sobald eines der Eltern-Postings gelesen ist.

    Nutze den Kindselektor, die :not()-Pseudoklasse, den Nachfahrenselektor zum Zurücknehmen einer Formatierung usw.

    Es scheint also eine Vererbung der Eigenschaften vom äußeren ins innere <li> zu geben.

    Nein, das ist keine Vererbung. Die von Dir genutzten Selektoren greifen einfach auch bei Elementen, die Du nicht erreichen möchtest.

    Ich dachte eigentlich, dass ich das mit dem folgenden CSS-Schnipsel vermeide:
    li.visited a,

    Das sind alle <a>-Elemente, die sich _irgendwo_ innerhalb eines <li class="visited"> befinden.

    Mit dem ersten Zweig färbe ich die Posting-Titel der bereits gelesenen Postings (li class="visited") schwarz, mit dem zweiten färbe ich diejenigen rot, in denen das <li> Element _nicht_ die Klasse "visited" hat.

    Nein, damit färbst Du auch die, die die Klasse "visited" besitzen. Allerdings hat der Selektor eine geringere Spezifität und verliert dadurch zwangsläufig.

    Habe ich da einen Denkfehler drin?

    Jau :-)

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hallo Cheatah,

      Schön, dass die Klammern um den Kategoriennamen jetzt eigene Klassen bekommen haben, aber was zwischen den Klammern steht, erwische ich noch nicht.

      beides steht in einem <strong class="category">, welches nichts außer dem Genannten enthält.

      Nö. Die Klammern stehen jeweils in einem span.catsepl bzw. span.catsepr, aber die Kategoriebezeichnung steht als reiner Text-Node dazwischen.

      Die Links besitzen jeweils recht eindeutige Klassen.

      Die "hinteren" ja (ausblenden, als gelesen/interessant markieren). Aber der da vorn (Thread auf/zuklappen) nicht.

      a) nur das a-Element mit dem Posting-Titel eingefärbt sein soll und

      Hm. Wo genau siehst Du da Dein Problem?

      Weiß ich gerade nicht mehr. :)

      b) ich nicht die gelesenen, sondern die _un_gelesenen Postings farblich vom Rest der Seite unterscheiden will.

      Wo siehst Du den Unterschied? Von zwei Arten soll die eine anders sein als die andere. Damit ist unbedingt die andere auch anders als die eine.

      Scharfsinnig beobachtet. Nur dass "die eine", nämlich die ungelesene, kein Merkmal (z.B. Klasse) hat, an dem ich sie erkennen könnte. Sie muss damit dieselben Eigenschaften wie der umgebende Text haben.

      Nutze den Kindselektor, die :not()-Pseudoklasse, ...

      Geht nicht, das soll ja _auch_ mit dem IE funktionieren.

      ...den Nachfahrenselektor zum Zurücknehmen einer Formatierung usw.

      Mach ich z.T. schon.

      Nein, das ist keine Vererbung. Die von Dir genutzten Selektoren greifen einfach auch bei Elementen, die Du nicht erreichen möchtest.

      Ich glaube, das ist es, was MudGuard mir auch schon erklären wollte.

      Das sind alle <a>-Elemente, die sich _irgendwo_ innerhalb eines <li class="visited"> befinden.

      Ja klar, was sonst?

      Nein, damit färbst Du auch die, die die Klasse "visited" besitzen. Allerdings hat der Selektor eine geringere Spezifität und verliert dadurch zwangsläufig.

      Siehe oben, danke sehr.

      Habe ich da einen Denkfehler drin?
      Jau :-)

      Das hab ich geahnt!  *puh*
      Ciao,

      martin

  3. Liebe Helfer,

    danke für eure Beiträge. Da war viel Wertvolles dabei, und den einen oder anderen Hinweis werde ich wohl noch genauer analysieren müssen. Mein aktuelles Problem (User-CSS) habe ich jetzt durch die Umstellung der Forumsdarstellung auf XHTML sehr viel leichter lösen können, der entscheidende Hinweis kam von CK. ;)
    Cheatah und MudGuard haben mir dafür einige "Hausaufgaben" zur Spezifizität von CSS-Selektoren gegeben; ich glaube, bei dem Thema habe ich noch einen gewissen Nachholbedarf.

    So long, and thanks for all the fish,

    Martin