Mörf: Ursprung relativer Pfadangaben steuerbar?

Ich vermute zwar die Antwort auf meine Frage bereits zu kennen, aber vielleicht werde ich ja doch überrascht:
Verwendet man in einer CSS-Datei relative Pfadangaben in einem url()-Statement, so beziehen diese sich ja erwartungsgemäß auf das Verzeichniss, in welchem die CSS-Datei selbst zu finden ist.
Gibt es eine Option, oder einen Trick, um dafür zu sorgen, dass sich relative Pfadangaben stattdessen auf die jeweilige HTML-Datei beziehen, welche das CSS einbindet?

Hintergrund ist folgender: Ich habe hier eine ganze Reihe Domains, die optisch gleich gestylt sind. Die einzigen nennenswerten Unterschiede bestehen in einer Handvoll Bildern, die allerdings jeweils identisch benannt sind (also zum Beispiel jedes Mal: /images/background.png u.ä.) Ich habe also auf allen diesen Servern identische CSS-Dateien liegen.
Nun scheint es mir eigentlich recht sinnvoll die CSS-Datei nur noch einmal auf einer der Domains abzulegen und von allen Seiten zu referenzieren. Dadurch würde man vom Browser-Caching profitieren und es wäre auch einfach übersichtlicher, sollte es mal etwas zu ändern geben. Der Haken sind natürlich die besagten Bilder, die dann ja nur noch von der Domain geladen werden würden, welche das Stylesheet enthält.

  1. Moin,

    Ich vermute zwar die Antwort auf meine Frage bereits zu kennen, aber vielleicht werde ich ja doch überrascht:
    Verwendet man in einer CSS-Datei relative Pfadangaben in einem url()-Statement, so beziehen diese sich ja erwartungsgemäß auf das Verzeichniss, in welchem die CSS-Datei selbst zu finden ist.
    Gibt es eine Option, oder einen Trick, um dafür zu sorgen, dass sich relative Pfadangaben stattdessen auf die jeweilige HTML-Datei beziehen, welche das CSS einbindet?

    nein, mir ist jedenfalls keine bekannt.

    Hintergrund ist folgender: Ich habe hier eine ganze Reihe Domains, die optisch gleich gestylt sind. Die einzigen nennenswerten Unterschiede bestehen in einer Handvoll Bildern, die allerdings jeweils identisch benannt sind (also zum Beispiel jedes Mal: /images/background.png u.ä.) Ich habe also auf allen diesen Servern identische CSS-Dateien liegen.
    Nun scheint es mir eigentlich recht sinnvoll die CSS-Datei nur noch einmal auf einer der Domains abzulegen und von allen Seiten zu referenzieren. Dadurch würde man vom Browser-Caching profitieren und es wäre auch einfach übersichtlicher, sollte es mal etwas zu ändern geben. Der Haken sind natürlich die besagten Bilder, die dann ja nur noch von der Domain geladen werden würden, welche das Stylesheet enthält.

    Was spricht dagegen, das Gros der Formatierungen in _einem_ gemeinsamen, quasi neutralen Stylesheet zu definieren, und dann von jeder Domain aus ein zweites, lokales Stylesheet einzubinden, das nur die spezifischen Eigenschaften festlegt?

    Ciao,
     Martin

    --
    Husten kann böse Folgen haben.
    Besonders im Kleiderschrank.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. @@Der Martin:

      nuqneH

      Was spricht dagegen, das Gros der Formatierungen in _einem_ gemeinsamen, quasi neutralen Stylesheet zu definieren, und dann von jeder Domain aus ein zweites, lokales Stylesheet einzubinden, das nur die spezifischen Eigenschaften festlegt?

      Ein zusätzlicher HTTP-Request.

      Außerdem wäre bezüglich Wartbarkeit kaum was erreicht; die domainspezifischen Stylesheets müssten trotzdem auf die Domains verteilt werden. Es kommt noch ein Stylesheet hinzu, was die Komplexität erhöht. Man muss bedenken, welche Regeln im allgemeinen und welche im spezifischen Stylesheet stehen.

      Qapla'

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    2. nein, mir ist jedenfalls keine bekannt.

      Schade, aber irgendwie auch verständlich.

      Was spricht dagegen, das Gros der Formatierungen in _einem_ gemeinsamen, quasi neutralen Stylesheet zu definieren, und dann von jeder Domain aus ein zweites, lokales Stylesheet einzubinden, das nur die spezifischen Eigenschaften festlegt?

      Wie Gunnar bereits schrieb habe ich dann einen Request mehr.
      Zudem wären die lokalen Stylesheets dann immernoch vollkommen identisch (nur eben deutlich kürzer).

      1. Om nah hoo pez nyeetz, Mörf!

        Wie Gunnar bereits schrieb habe ich dann einen Request mehr.
        Zudem wären die lokalen Stylesheets dann immernoch vollkommen identisch (nur eben deutlich kürzer).

        Ich weiß ja nicht, wie deine Seiten entstehen aber falls sie serverseitig generiert werden, könntest du das lokale Stylesheet auch per style-Element einbinden.

        Matthias

        --
        Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Sonde und Sonderzeichen.

        1. @@Matthias Apsel:

          nuqneH

          Ich weiß ja nicht, wie deine Seiten entstehen aber falls sie serverseitig generiert werden, könntest du das lokale Stylesheet auch per style-Element einbinden.

          In jede Seite das Stylesheet einzubinden anstatt es zu cachen ist vielleicht auch nicht der Weisheit letzter Schluss.

          Und man müsste ans Markup ran. Dann kann man aber auch dem html-Element die Information verpassen, zu welcher Domain bzw. zu welchem Layoutschema die Seite gehört:

          <html class="foo">

          .foo { background-image: url(http://foo.example/background-image) }  
          .bar { background-image: url(http://bar.example/background-image) }
          

          Was prinzipiell der Funktionalität von @document entspricht.

          Qapla'

          --
          „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
          1. Und man müsste ans Markup ran. Dann kann man aber auch dem html-Element die Information verpassen, zu welcher Domain bzw. zu welchem Layoutschema die Seite gehört:

            <html class="foo">

            .foo { background-image: url(http://foo.example/background-image) }

            .bar { background-image: url(http://bar.example/background-image) }

            
            >   
            > Was prinzipiell der [Funktionalität von @document](https://forum.selfhtml.org/?t=217541&m=1494511) entspricht.  
              
            Das wäre natürlich durchaus eine Möglichkeit. Aber sowohl diese Variante, als auch die @document-Variante haben beide den Nachteil, dass für jede einzelne Seite eine eigene Regel her muss. Je nach Anzahl der Seiten kann das sehr lang werden und man muss das Stylesheet jedes Mal anpassen, falls eine Seite neu dazu kommt oder wegfällt.  
              
            Idealer wäre ein hypothetisches Szenario, in dem man die URL in etwa so angeben könnte:  
              
            `body { background-image:url("/background-image", @html-origin); }`{:.language-css}  
              
            Wobei dann der zweite Parameter angeben würde, dass die Domain der ursprünglich einbindenden HTML-Datei als Basis für den Link gelten soll.  
              
              
            Aber ich nehme nicht an, dass der CSS-Standard für mich geändert wird. ;-))
            
            1. Om nah hoo pez nyeetz, Mörf!

              Idealer wäre ein hypothetisches Szenario, in dem man die URL in etwa so angeben könnte:

              body { background-image:url("/background-image", @html-origin); }

              Wobei dann der zweite Parameter angeben würde, dass die Domain der ursprünglich einbindenden HTML-Datei als Basis für den Link gelten soll.

              Ich habe das nicht getestet:

              <body>  
                <head>  
                  <link rel="stylesheet" href="http://example.com/css.css">  
                  <style>  
                     foo {background-image: url("images/foobg.png");  
                  </style>
              

              sollte aber immer das richtige Hintergrundbild laden.

              ⇒ ein zentrales Stylesheet
              ⇒ ein für alle Seiten gleichlautendes style-Element, das aber dennoch unterschiedliche Grafiken referenziert

              Matthias

              --
              Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Rind und Rindenmulch.

              1. @@Matthias Apsel:

                nuqneH

                Ich habe das nicht getestet:

                <body>

                <head>
                    <link rel="stylesheet" href="http://example.com/css.css">
                    <style>
                       foo {background-image: url("images/foobg.png");
                    </style>

                
                > sollte aber immer das richtige Hintergrundbild laden.  
                >   
                > ⇒ ein zentrales Stylesheet  
                > ⇒ ein für alle Seiten gleichlautendes style-Element, das aber dennoch unterschiedliche Grafiken referenziert  
                  
                Wofür (bis auf den zusätzlichen HTTP-Request) die [Bedenken](https://forum.selfhtml.org/?t=217541&m=1494513) gelten.  
                  
                Und bei Änderungen müsste man an alle HTML-Dokumente ran. Weshalb dieser Weg nur dann gangbar ist, wenn der Inhalt des style-Elements zentral gepflegt und serverseitig eingebunden wird.  
                  
                Qapla'
                
                -- 
                „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                
                1. Om nah hoo pez nyeetz, Gunnar Bittersmann!

                  Und bei Änderungen müsste man an alle HTML-Dokumente ran. Weshalb dieser Weg nur dann gangbar ist, wenn der Inhalt des style-Elements zentral gepflegt und serverseitig eingebunden wird.

                  Ja, wie ich schrieb.

                  Matthias

                  --
                  Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Pan und Panettone.

                2. Hello Gunnar,

                  Ich habe das nicht getestet:

                  <body>

                  <head>
                      <link rel="stylesheet" href="http://example.com/css.css">
                      <style>
                         foo {background-image: url("images/foobg.png");
                      </style>

                  
                  > > sollte aber immer das richtige Hintergrundbild laden.  
                  > >   
                  > > ⇒ ein zentrales Stylesheet  
                  > > ⇒ ein für alle Seiten gleichlautendes style-Element, das aber dennoch unterschiedliche Grafiken referenziert  
                  >   
                  > Wofür (bis auf den zusätzlichen HTTP-Request) die [Bedenken](https://forum.selfhtml.org/?t=217541&m=1494513) gelten.  
                    
                  und wenn der <link rel ...> schief geht, merkt man es als User i.d.R. nicht, oder?  
                  Selbstverständlich fehlen dann die angewiesenen Styles, aber von denen weiß ich als Laie ja nichts. Eine Fehlermeldung gibt es mWm aber nicht, anders als bei einem broken Image.  
                    
                  Könntest Du mal 'was fachlich kompetentes dazu sagen/schreiben?  
                    
                    
                    
                    
                  Liebe Grüße aus dem schönen Oberharz  
                    
                    
                  Tom vom Berg  
                  ![](http://selfhtml.bitworks.de/Virencheck.gif)  
                    
                  
                  -- 
                   ☻\_  
                  /▌  
                  / \ Nur selber lernen macht schlau  
                  <http://bikers-lodge.com>
                  
            2. Hi,

              Das wäre natürlich durchaus eine Möglichkeit. Aber sowohl diese Variante, als auch die @document-Variante haben beide den Nachteil, dass für jede einzelne Seite eine eigene Regel her muss. Je nach Anzahl der Seiten kann das sehr lang werden und man muss das Stylesheet jedes Mal anpassen, falls eine Seite neu dazu kommt oder wegfällt.

              Um sich ständig wiederholende Aufgaben zu automatisieren hat doch mal jemand was erfunden, was war’s noch gleich …? Ach ja, der „Komm-Puter“!

              Idealer wäre ein hypothetisches Szenario, in dem man die URL in etwa so angeben könnte: […]
              Aber ich nehme nicht an, dass der CSS-Standard für mich geändert wird. ;-))

              Nein, für solche Sonderfälle kannst du das wirklich nicht erwarten.

              Also such’ dir halt eine Möglichkeit, dein Stylesheet dynamisch zu generieren.
              Das sollte z.B. über einen CSS-Preprocessor möglich sein – oder auch über ein simples (serverseitiges) Script, dass eine Liste der Domains als Eingabe bekommt und daraus dann dynamisch die nötigen Regeln generiert.

              MfG ChrisB

              --
              Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
              1. @@ChrisB:

                nuqneH

                Das sollte z.B. über einen CSS-Preprocessor möglich sein – oder auch über ein simples (serverseitiges) Script, dass eine Liste der Domains als Eingabe bekommt und daraus dann dynamisch die nötigen Regeln generiert.

                Ob man die Regeln nun händisch schreibt oder vom „Komm-Puter“ generieren lässt oder von der Oma gehäkelt oder gestrickt wird: es sind und bleiben 2ⁿ − 1 Regeln.* Bereits mit 12 Klassen stößt man an die Grenze von IE ≤ 9.

                Qapla'

                * Jetzt mit den richtigen Zeichen. Man sehe mir ^ und - nach; auf einem Android-Smartphone ist es eine Herausforderung, _irgendwas_ zu tippen.

                --
                „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                1. @@Gunnar Bittersmann:

                  nuqneH

                  Ob man die Regeln nun händisch schreibt oder vom „Komm-Puter“ generieren lässt oder von der Oma gehäkelt oder gestrickt wird: es sind und bleiben 2ⁿ − 1 Regeln.* Bereits mit 12 Klassen stößt man an die Grenze von IE ≤ 9.

                  Oops, falscher Thread.

                  Qapla'

                  --
                  „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                2. Om nah hoo pez nyeetz, Gunnar Bittersmann!

                  * Jetzt mit den richtigen Zeichen. Man sehe mir ^ und - nach; auf einem Android-Smartphone ist es eine Herausforderung, _irgendwas_ zu tippen.

                  Ja, zum Beispiel ein Paragraph-Zeichen. Besonders schön, wenn es im Passwort vorkommt.

                  Matthias

                  --
                  Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Jod und Jodeldiplom.

                3. Hi,

                  Bereits mit 12 Klassen stößt man an die Grenze von IE ≤ 9.

                  Welche Grenze?

                  Es ging hier um

                  .foo { background-image: url(http://foo.example/background-image) }  
                  .bar { background-image: url(http://bar.example/background-image) }
                  

                  etcetera … an welche Zwölf-Klassen-Grenze soll man da stossen?

                  MfG ChrisB

                  --
                  Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
                  1. Om nah hoo pez nyeetz, ChrisB!

                    etcetera … an welche Zwölf-Klassen-Grenze soll man da stossen?

                    oops

                    Matthias

                    --
                    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Erze und Erzeugnisse.

  2. Hello,

    was ist mit http://de.selfhtml.org/html/kopfdaten/basis.htm?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bikers-lodge.com
    1. Hi,

      was ist mit http://de.selfhtml.org/html/kopfdaten/basis.htm?

      was soll damit sein? Das ist eine ganz andere Liga. Es legt das Bezugsnormal für relativ andressierte Ressourcen fest, die per _HTML_ referenziert werden (Frames, Links, Bilder). Mit Ressourcen, die aus einem Stylesheet heraus adressiert werden, hat das nichts zu tun.

      Ciao,
       Martin

      --
      Die letzten Worte des Helden:
      Feigling! Traust dich ja doch nicht!
      Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
      1. Hello,

        was ist mit http://de.selfhtml.org/html/kopfdaten/basis.htm?

        was soll damit sein? Das ist eine ganz andere Liga. Es legt das Bezugsnormal für relativ andressierte Ressourcen fest, die per _HTML_ referenziert werden (Frames, Links, Bilder). Mit Ressourcen, die aus einem Stylesheet heraus adressiert werden, hat das nichts zu tun.

        Ja, ist denn das Stylesheet nicht Bestandteil der HTML-Datei, in die es hineingeladen wird?

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bikers-lodge.com
        1. Om nah hoo pez nyeetz, Tom!

          Ja, ist denn das Stylesheet nicht Bestandteil der HTML-Datei, in die es hineingeladen wird?

          Nein, Pfadangaben beziehen sich auf den Ordner, in dem das Stylesheet liegt. Eine base-Festlegung wirkt sich nur auf Referenzen direkt innerhalb der HTML-Datei aus, nicht auf Ressourcen, die in dieses Dokument hineingeladen worden sind. Ich halte Martins Vorschlag, ein grundlegendes und je ein spezielles Stylesheet zu verwenden, für zielführend.

          Matthias

          --
          Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Grill und Grille.

    2. Om nah hoo pez nyeetz, Tom!

      was ist mit http://de.selfhtml.org/html/kopfdaten/basis.htm?

      Das beträfe nur Resssourcen innerhalb der HTML-Dokumente, nicht aber im CSS referenzierte Grafiken.

      PS: Auch base gibt es bereits im Wiki. Wenn es dir nichts ausmacht, schau bitte zuerst im Wiki nach, ob der gewünschte Artikel vorhanden ist.
      Danke für deine Mühe.

      Matthias

      --
      Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Verl und Verlies.

      1. Hello,

        Om nah hoo pez nyeetz, Tom!

        was ist mit http://de.selfhtml.org/html/kopfdaten/basis.htm?
        Das beträfe nur Resssourcen innerhalb der HTML-Dokumente, nicht aber im CSS referenzierte Grafiken.

        Na, dann muss er eben absolute Pfade relativ zur Document Root nehmen. Das mache ich grundsätzlich, bis auf "Kontrolldateien", die absichtlich direkt von von der zugehörigen Domain abgerufen werden...

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bikers-lodge.com
      2. Mahlzeit,

        PS: Auch base gibt es bereits im Wiki. Wenn es dir nichts ausmacht, schau bitte zuerst im Wiki nach, ob der gewünschte Artikel vorhanden ist.

        Wieso werden denn neue Wiki-Artikel nicht in der alten Doku verlinkt?

        --
        42
        1. Om nah hoo pez nyeetz, M.!

          Wieso werden denn neue Wiki-Artikel nicht in der alten Doku verlinkt?

          Weil derjenige, der die Macht und den technischen Sachverstand hat, dies zu tun, in seiner realen Arbeitswelt ausgelastet ist.

          Die Doku soll im Prinzip nicht mehr angefasst werden, nur noch in absoluten Ausnahmefällen werden Änderungen vorgenommen. Die imho letzte war eine http://de.selfhtml.org/javascript/sprache/bedingt.htm@title=JavaScript-Passwortabfrage. Es wird darauf hinauslaufen, ein Script in die Dokuseiten einzufügen (https://www.dropbox.com/sh/0r94kgzwc12ijiq/FNoPU9bETT#/) Eine direkte Verlinkung auf die entsprechende Wiki-Seite wäre schön, ist aber vom Zeitaufwand her nicht leistbar.

          Das Script ist fertig, es muss nur™ noch™ eingebaut werden.

          Matthias

          --
          Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Mona und Monaco.

  3. @@Mörf:

    nuqneH

    Gibt es eine Option, oder einen Trick

    Für Firefox ja. Weiß der Geier, ob das auch mal in anderen Browsern kommt.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. @@Gunnar Bittersmann:

      nuqneH

      Für Firefox ja. Weiß der Geier, ob das auch mal in anderen Browsern kommt.

      Man kann es aber nachbauen.

      Qapla'

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)