Яке розташування використовується відносною URL-адресою у CSS-файлі?


484

Визначаючи щось на зразок URL-адреси фонового зображення у файлі CSS, коли використовується відносна URL-адреса, де це відносно? Наприклад:

Припустимо, файл /stylesheets/base-styles.cssмістить:

div#header { 
    background-image: url('images/header-background.jpg');
}

Якщо я включу цей аркуш стилів у різні документи через, чи <link ... />буде відносна URL-адреса у файлі CSS відносно документа таблиці стилів у /stylesheets/або відносно поточного документа, до якого він включений? Можливі шляхи, такі як:

/item/details.html
/about/index.html
/about/extra/other.html
/index.html

Відповіді:


551

Відповідно до W3 :

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

Тому, відповідаючи на ваше запитання, це буде відносно /stylesheets/.

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


схоже, є виняток із правила: -ms-behaviorв IE :(
pkyeck

2
є ще один виняток: коли URL - це значення за замовчуванням для користувацької властивості. Скажіть, ви визначаєте .banner { background-image: var(--bgimg, url('images/default.jpg')); }, але ще не визначаєте значення --bgimg. Потім на сторінці /index.html, .bannerбуде шукати /images/default.jpg, але на іншій сторінці буде виглядати . дуже зламаний ІМО. /about/index.html.banner/about/images/default.jpg
chharvey

виправлення: помилка значення за замовчуванням вище виправлена ​​в Chrome v60.
chharvey

якщо ваш css в комплекті, шлях насправді не має значення. Це не те, де ти думаєш, що це буде, більше нічого відносного немає.
Тод

1
У мене виникли проблеми під час використання властивостей: background: var(--primary-color-background) no-repeat center center url("maps.jpg");це не спрацювало в IOS та Safari. /resources/maps.jpgУ Safari працює лише абсолютний шлях у поєднанні з властивістю css.
Енді


50

Це відносно таблиці стилів, але я рекомендую зробити URL-адреси відносно вашої URL-адреси:

div#header { 
  background-image: url(/images/header-background.jpg);
}

Таким чином, ви можете переміщати свої файли, не потребуючи їх переробляти в майбутньому.


Яку різницю мають додаткові "/" спереду?
Casebash

15
Так само, як імена в командному рядку, ведучий / в передній частині шляху означає, що він вказує на абсолютний ресурс на поточному веб-сервері.
Девід В. Кіт

4
Насправді є випадок, коли краще використовувати URI щодо файлу CSS. У моєму випадку у мене є каталог "/ css /", куди я поміщаю всі дані CSS. Тепер я хочу перевірити нові функції на веб-сайті в окремій папці. Це важко перевірити, наприклад, нові фонові зображення в тестовій папці. Все залежить від ваших потреб ...
Дієго

12
Абсолютні шляхи ускладнюють розміщення рішення в підтеці домену. Існує ряд причин, чому ви хочете підтримувати папки. Це полегшує тестування (як згадував Дієго), коли ви можете мати попередню версію / попередні випуски, розміщені в тому ж домені, що і prod. Майбутні зміни, коли корпоративні проксі-сервери налаштовані на підтримку SSO, переміщення всіх рішень в один домен і т.д. Особливо з SSL, можливо, захочеться уникнути накладних витрат декількох доменних імен. Для мене ці міркування набагато важливіші, ніж "легше перемістити мій .css-файл".
Тедд Хансен

подібні зображення та подібні речі йдуть до CDD, тому це ідеально
Мухаммед Умер

30

Для створення модульних таблиць стилів, які не залежать від абсолютного розташування ресурсу, автори можуть використовувати відносні URI. Відносні URI (як визначено в [RFC3986] ) вирішуються до повних URI, використовуючи базовий URI. Розділ 5 RFC 3986 визначає нормативний алгоритм цього процесу. Для таблиць стилів CSS базовим URI є таблиця стилів, а не вихідний документ.

Наприклад, припустимо наступне правило:

body { background: url("yellow") }

розташований у таблиці стилів, позначеній URI:

http://www.example.org/style/basic.css

Фон BODY вихідного документа буде викладений плиткою з будь-яким зображенням, описаним ресурсом, призначеним URI

http://www.example.org/style/yellow

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

Взято з CSS 2.1 специфікації .



5

Одне питання, яке може виникнути, і, здавалося б, вирішити це, коли використовується автоматична мінімізація css. Шлях запиту для мінімізованого пакету може мати інший шлях, ніж вихідний css. Це може статися автоматично, тому це може спричинити плутанину.

Відображений шлях запиту для мінімізованого пакета повинен бути "/ originalcssfolder / minifiedbundlename", а не просто "minifiedbundlename".

Іншими словами, назвіть ваші пакети так, щоб вони мали такий самий шлях (з /), як і вихідна структура папки, таким чином, будь-які зовнішні ресурси, такі як шрифти, зображення, відображатимуть, щоб виправити URI браузером. Альтернативою є використання абсолютного URL-адреси (refs у вашому css, але це зазвичай не бажано.


Це врятувало мені багато часу! Дякую. Це має бути задокументовано більше
mjbates7


-4

Спробуйте використовувати:

body {
  background-attachment: fixed;
  background-image: url(./Images/bg4.jpg);
}

Images будучи папкою із зображенням, яке ви хочете опублікувати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.