Können Sie Bilder von css referenzieren, ohne relative Pfade zu verwenden?

8

Ich möchte ein div mit einem Hintergrundbild css:

erstellen %Vor%

Ich kann jetzt keine Routen in css verwenden, daher muss ich einen relativen Pfad verwenden, sonst bricht meine App ab, wenn sie in einem Nicht-Root-Pfad installiert wird.

Gibt es einen Weg dazu? Etwas wie

%Vor%

Ich habe diesen Thread vor einem Jahr gefunden, der behauptet, dass es unmöglich ist. Ist das immer noch so?

Bearbeiten : Ich weiß, dass ich das CSS auf der Seite einfügen kann, das ist keine wirklich akzeptable Lösung, sondern eher ein Workaround.

    
ripper234 03.01.2012, 09:59
quelle

4 Antworten

7

Der Weg ist / ist / möglich.

Das Problem ist, dass CSS-Dateien statisch sind, also Play! tut nichts an ihnen - außer ihnen den Kunden zu dienen.

Mach einfach deine CSS-Dateien in Ansichten, schreibe einen generischen Controller, der den Dateinamen als Parameter akzeptiert, und sie werden als "Spielen" gedient! Vorlagen.

etwas in den Zeilen von (Vorsicht: PSEUDOCODE!):

ROUTE:

%Vor%

STEUERUNG

%Vor%

Dann kannst du in deinem CSS eine beliebige groovige Template-Funktion verwenden. Der Installationspfad ist als Ссылка

verfügbar

Dies wird jedoch sehr ineffizient sein, daher müssen Sie nginx oder ein ähnliches Frontend hinzufügen, um Caching durchzuführen und hohe Ablaufwerte für diese Dateien festzulegen.

Ich bin mir nicht sicher, ob es sich lohnt, zu tun, nur um relative Pfade zu vermeiden !

Ich denke definitiv, dass der relative Pfad für die generische Bereitstellung besser geeignet ist, und Sie sind eher geneigt, mit diesem dynamischen absoluten Ansatz zu brechen.

Eine bessere allgemeine Bereitstellungsstrategie

Ein wichtiger Punkt ist, dass wenn Sie absolute URLs mögen, kein Problem ist. Das tue ich auch.

Aber wenn ich meine Webanwendungen (sei es play !, django, pure wsgi oder was auch immer) einsetze, lege ich immer ein Webfrontend an.

Normalerweise nginx.

Dies bedeutet, dass Ihr Play-Framework ein Upstream-Server ist, und Sie können alles mit den URLs an Ihrem: 80-Port machen - und mehrere Services mit Subdomains oder Unterordnern verwalten ...

Aber wenn Sie auf Ihre Play-Anwendung auf ihren eigenen Port (s) zugreifen, wird alles absolut sein.

Schließlich, wenn Sie Play! Als Krieg hätte ich das Gefühl, dass du den falschen Rahmen oder das falsche Entfaltungsmuster gewählt hast! Aber dann wird dein jboss oder irgendein anderer Anwendungs-Webserver etwas Magie auf die Unterordner anwenden ...

    
Stefano 03.01.2012, 11:36
quelle
12

Da das play-Framework alle Dateien in / public kompiliert, habe ich die folgende Anweisung in der CSS verwendet, um auf Hintergrundbilder zuzugreifen.

%Vor%

Bisher hat es funktioniert, ich bin mir nicht sicher, ob es eine gute Übung ist! Ich hoffe, es kann helfen. Prost.

    
nicoconstanzo 27.04.2012 17:16
quelle
9

Der Pfad wird immer von Ihrem Stylesheet übernommen. Warum benutzt du keine relativen Pfade?

Beispiel: Ihre CSS ist in /public/css/ , also muss Ihr Pfad in Ihrer CSS-Datei ../images sein. Das war's.

Aber vielleicht hat less.css etwas ähnliches, wonach Sie suchen.

    
sascha 03.01.2012 10:05
quelle
-2

werfen Sie einen Blick auf die Datei conf / routes.

darin finden Sie das folgende etwas wie

# Ordnen Sie statische Ressourcen aus dem Ordner / public dem URL-Pfad / assets zu GET / assets / * file controllers.Assets.at (Pfad="/ public", Datei)

was bedeutet, um auf Ressourcen im öffentlichen Ordner zuzugreifen, Sie würden / assets in Ihrer URL verwenden.

also in deinem CSS, das du tust URL (/assets/images/myimage.png) und es wird funktionieren.

    
iecanfly 17.04.2012 15:07
quelle

Tags und Links