Wie verwende ich relative / absolute Pfade in CSS-URLs?


86

Ich habe einen Produktions- und Entwicklungsserver. Das Problem ist die Verzeichnisstruktur.

Entwicklung:

  • http://dev.com/subdir/images/image.jpg
  • http://dev.com/subdir/resources/css/style.css

Produktion:

  • http://live.com/images/image.jpg
  • http://live.com/resources/css/style.css

Wie kann ich einen style.cssIn- cssOrdner haben, der auf beiden Servern denselben Pfad für die background: urlEigenschaft verwendet? Gibt es einen Trick, den ich mit relativen Pfaden verwenden kann?

Antworten:


127

Die URL ist relativ zum Speicherort der CSS-Datei , daher sollte dies für Sie funktionieren:

url('../../images/image.jpg')

Die relative URL geht zwei Ordner zurück und dann in den imagesOrdner - sie sollte in beiden Fällen funktionieren, solange die Struktur identisch ist.

Von https://www.w3.org/TR/CSS1/#url :

Teil-URLs werden relativ zur Quelle des Stylesheets interpretiert, nicht relativ zum Dokument


Wird dies funktionieren, wenn ich 2 Schritte zurückgehen muss (die Antwort wurde aktualisiert)? url (../../ images / image.jpg)?
Nascar

@anothershrubery - Entschuldigung, mein erstes Beispiel war fehlerhaft
Nascar

@danip - es sollte funktionieren, aber Sie haben nicht zwei Schritte von http://domain.com/css/style.css. Ich bin nicht sicher, was dort getan werden kann ... BEARBEITEN: - Ja, es sollte mit der aktualisierten Struktur funktionieren, ich habe die Antwort aktualisiert (nur eine andere ../, wie es scheint).
Kobi

9

Persönlich würde ich dies in der .htaccess-Datei beheben. Sie sollten Zugriff darauf haben.

Definieren Sie Ihre CSS-URL als solche:

url(/image_dir/image.png);

Fügen Sie in Ihre .htacess-Datei Folgendes ein:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^image_dir/(.*) subdir/images/$1

oder

RewriteRule ^image_dir/(.*) images/$1

je nach Standort.


2

Ich hatte das gleiche Problem ... jedes Mal, wenn ich mein CSS veröffentlichen wollte ... musste ich suchen / ersetzen ... und der relative Pfad würde auch für mich nicht funktionieren, da die relativen Pfade von Entwickler zu Produktion unterschiedlich waren.

Schließlich war ich es leid, das Suchen / Ersetzen durchzuführen, und ich erstellte ein dynamisches CSS (z. B. www.mysite.com/css.php). Es ist dasselbe, aber jetzt konnte ich meine PHP-Konstanten im CSS verwenden. so etwas wie

.icon{
  background-image:url('<?php echo BASE_IMAGE;?>icon.png');
}

und es ist keine schlechte Idee, es dynamisch zu machen, da ich es jetzt mit dem YUI-Kompressor komprimieren kann, ohne das ursprüngliche Format auf meinem Entwicklungsserver zu verlieren.

Viel Glück!


13
Es gibt kein phpTag auf der Frage! OP verwendet möglicherweise überhaupt kein PHP.
Bazzz

6
ist nur ein Beispiel .. Sie könnten PHP, Asp, JSP verwenden .. die Idee ist die gleiche
erfreut über den

6
es könnte auch statisch sein.
Jcuenod

3
Auch wenn dies in einer CSS-Datei ist, wird das <?php **** ?>nicht verarbeitet
JD Vangsness
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.