Як використовувати відносні / абсолютні шляхи в URL-адресах CSS?


86

У мене є сервер виробництва та розробки. Проблема полягає в структурі каталогів.

Розробка:

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

Виробництво:

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

Як я можу мати папку style.cssin, cssяка використовує на обох серверах однаковий шлях до background: urlвластивості? Чи є якийсь фокус, яким я можу скористатись із відносними шляхами?

Відповіді:


128

URL-адреса відносно розташування файлу CSS , тому це має працювати для вас:

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

Відносна URL-адреса повертає дві папки назад, а потім у imagesпапку - вона повинна працювати в обох випадках, якщо структура однакова.

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

Часткові URL-адреси інтерпретуються щодо джерела таблиці стилів, а не щодо документа


це спрацює Якщо мені доведеться повернутися на 2 кроки назад (оновив відповідь) url (../../ images / image.jpg)?
nascar

@anothershrubery - вибачте, мій перший приклад був помилковим
nascar

@danip - це має спрацювати, але у вас немає двох кроків від http://domain.com/css/style.css. Я не впевнений, що там можна зробити ... РЕДАГУВАТИ: - так, це повинно працювати з оновленою структурою, я оновив відповідь ( ../здається, ще одна ).
Кобі

9

Особисто я виправив би це у файлі .htaccess. Ви повинні мати доступ до цього.

Визначте свою URL-адресу CSS як таку:

url(/image_dir/image.png);

У своєму .htacess файлі помістіть:

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

або

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

залежно від сайту.


2

у мене була та сама проблема ... кожного разу, коли я хотів опублікувати свій css .. Мені доводилось робити пошук / заміну .. і відносний шлях не працював би для мене, оскільки відносні шляхи відрізнялися від dev до виробництва.

Нарешті втомився від пошуку / заміни, і я створив динамічний css (наприклад, www.mysite.com/css.php) це те саме, але тепер я міг використовувати свої php-константи в css. щось подібне

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

і це не погана ідея зробити його динамічним, тому що тепер я можу стискати його за допомогою YUI-компресора, не втрачаючи оригінальний формат на моєму сервері розробників.

Щасти!


13
На phpзапитанні немає тегу! OP, можливо, взагалі не використовує php.
Bazzz

6
це просто приклад .. Ви можете використовувати php, asp, jsp .. ідея та ж
gladontbelong

6
він також може бути статичним.
jcuenod

3
Крім того, якщо це є у файлі CSS, тоді <?php **** ?>звичка не буде оброблятися
JD Vangsness
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.