Sumafu: CSS: Alle Elemente ohne spezielles Elternelement

Hallo,

ich habe eine kurze Frage zu CSS Selektoren. Und zwar habe ich in meinem verschiedene <code> Elemente, ein Teil davon direkt in einem <pre> Element, der andere Teil in beliebigen anderen Elementen. Jetzt würde ich über einen speziellen Selektor gerne genau die <code> Elemente ansprechen, die nicht direkt innerhalb eines <pre> Elementes liegen. Sonst müsste ich dem <code> Element allgemein die entsprechenden Styles geben und wieder aufheben, wenn es in einem <pre> steht; das wäre vom Seelektor her zwar wesentlich einfacher, aber auch deutlich unschöner.

  1. Stellst Du Dir vielleicht sowas vor?

    1. Stellst Du Dir vielleicht sowas vor?

      Nein, das meinte ich nicht. Aber ich habe grade selbst eine Lösung gefunden:

      *:not(pre) > code {}
      

      Das nimmt alle code Elemente, die nicht direkt in einem pre liegen.

      1. Yup, wollte gerade mein Fiddle noch updaten.

        Die Krönung ist dann: nirgendwo ein pre in der Elternhierarchie, das ist kniffliger (bzw. würde nach dem lange ersehnten PARENT Selektor verlangen), aber das brauchst Du ja wohl auch nicht.

        Gruß Rolf

        1. Hej Rolf,

          Die Krönung ist dann: nirgendwo ein pre in der Elternhierarchie, das ist kniffliger (bzw. würde nach dem lange ersehnten PARENT Selektor verlangen), aber das brauchst Du ja wohl auch nicht.

          Wie wäre es, einfach das größer-als-Zeichen weg zu lassen? ;-)

          Marc

          1. Hallo,

            Die Krönung ist dann: nirgendwo ein pre in der Elternhierarchie, das ist kniffliger (bzw. würde nach dem lange ersehnten PARENT Selektor verlangen), aber das brauchst Du ja wohl auch nicht.

            Wie wäre es, einfach das größer-als-Zeichen weg zu lassen? ;-)

            wollte ich auch erst vorschlagen - aber dann fiel mir auf, dass die Semantik von

            :not(x) y
            

            mehrdeutig ist. Selektiert das ein y-Element, das überhaupt keine Vorfahren vom Typ x hat, oder ein y-Element, das irgendwo in seiner Vorfahren-Kette ein Nicht-x-Element hat?

            Letzteres wäre IMO recht nutzlos.

            So long,
             Martin

            --
            Nothing travels faster than the speed of light with the possible exception of bad news, which obeys its own special laws.
            - Douglas Adams, The Hitchhiker's Guide To The Galaxy
            1. @@Der Martin

              aber dann fiel mir auf, dass die Semantik von

              :not(x) y
              

              mehrdeutig ist.

              Nö, die ist schon eindeutig.

              Selektiert das ein y-Element, das überhaupt keine Vorfahren vom Typ x hat, oder ein y-Element, das irgendwo in seiner Vorfahren-Kette ein Nicht-x-Element hat?

              Eindeutig letzteres.

              Letzteres wäre IMO recht nutzlos.

              Yep.

              LLAP 🖖

              --
              “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
              Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
            2. Hej Der Martin,

              Wie wäre es, einfach das größer-als-Zeichen weg zu lassen? ;-)

              wollte ich auch erst vorschlagen - aber dann fiel mir auf, dass die Semantik von

              :not(x) y
              

              mehrdeutig ist. Selektiert das ein y-Element, das überhaupt keine Vorfahren vom Typ x hat, oder ein y-Element, das irgendwo in seiner Vorfahren-Kette ein Nicht-x-Element hat?

              plonk

              Letzteres wäre IMO recht nutzlos.

              Aber logisch korrekt und somit kann man, wie @Gunnar Bittersmann vorgeschlagen hat, den :not-Selector auch gleich weglassen. Weia... - habe noch überlegt, warum sumafu auf diese naheliegende Lösung nicht selbst gekommen ist...

              Ein Fettnäpfchen ist zwar kein Oskar, aber aarf ich das jetzt trotzdem behalten?

              Marc

          2. @@marctrix

            Wie wäre es, einfach das größer-als-Zeichen weg zu lassen? ;-)

            Und das *:not(pre) dann ach gleich‽ ;-)

            LLAP 🖖

            --
            “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
            Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
          3. Hallo Marc,

            Die Krönung ist dann: nirgendwo ein pre in der Elternhierarchie, das ist kniffliger (bzw. würde nach dem lange ersehnten PARENT Selektor verlangen), aber das brauchst Du ja wohl auch nicht.

            Wie wäre es, einfach das größer-als-Zeichen weg zu lassen? ;-)

            Da ich der Typ "erst probieren und dann nachdenken" bin, war das natürlich mein erster Versuch. Als es nicht klappte, bin ich dann auch auf die von euch hergeleitete Erklärung gekommen. Also - entweder die von Sumafu als "unschön" verurteilte Variante nehmen oder auf den - vielleicht in CSS7 kommenden - any-ancestor Selektor warten ;)

            Gruß Rolf

            1. @@Rolf b

              oder auf den - vielleicht in CSS7 kommenden - any-ancestor Selektor warten ;)

              Auf CSS7 kannst du lange warten. ;-)

              LLAP 🖖

              --
              “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
              Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|