503 votes

Utilisation d'une URL relative dans un fichier CSS, à quel emplacement est-elle relative ?

Lors de la définition d'une image d'arrière-plan dans un fichier CSS, l'utilisation d'une URL relative permet de savoir à quoi elle se réfère. Par exemple :

Supposons que le fichier /stylesheets/base-styles.css contient :

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

Si j'inclus cette feuille de style dans différents documents via <link ... /> l'URL relative dans le fichier CSS sera-t-elle par rapport au document de la feuille de style en /stylesheets/ o par rapport au document actuel il est inclus dans ? Les chemins possibles sont les suivants :

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

570voto

Alex Rozanski Points 26107

Selon le W3 :

Les URL partielles sont interprétées par rapport à la source de la feuille de style, et non par rapport au document.

Par conséquent, pour répondre à votre question, il sera relatif à /stylesheets/ .

Si l'on y réfléchit bien, c'est logique, puisque le fichier CSS peut être ajouté à des pages situées dans différents répertoires. Le fait de le standardiser au fichier CSS signifie que les URL fonctionneront quel que soit l'endroit où les feuilles de style sont liées.

0 votes

Il semble qu'il y ait une exception à la règle : -ms-behavior dans IE :(

2 votes

Il existe une autre exception : lorsque l'url est la valeur par défaut d'une propriété personnalisée. Supposons que vous définissiez .banner { background-image: var(--bgimg, url('images/default.jpg')); } mais ne définit pas de valeur pour --bgimg encore. Ensuite, sur la page /index.html , a .banner recherchera /images/default.jpg mais sur une autre page /about/index.html a .banner regardera /about/images/default.jpg .très cassé IMO.

0 votes

Correction : le bogue de la valeur par défaut ci-dessus est corrigé dans Chrome v60.

74voto

M4N Points 48758

Il est relatif au fichier CSS.

54voto

Codebeef Points 17084

Elle est relative à la feuille de style, mais je vous recommande de faire en sorte que les URL soient relatives à votre URL :

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

De cette manière, vous pouvez déplacer vos fichiers sans avoir à les remanier à l'avenir.

0 votes

Quelle différence fait le "/" supplémentaire à l'avant ?

18 votes

Tout comme les noms de chemin sur la ligne de commande, le / qui précède le chemin signifie qu'il pointe vers une ressource absolue sur le serveur web actuel.

5 votes

Dans certains cas, il est préférable d'utiliser des URI relatifs au fichier CSS. Dans mon cas, j'ai un répertoire "/css/" dans lequel je place toutes les données CSS. Maintenant, je veux tester de nouvelles fonctionnalités sur le site web dans un dossier séparé. Il devient difficile de tester, par exemple, de nouvelles images d'arrière-plan dans le dossier de test. Tout dépend de vos besoins...

32voto

jrista Points 20950

Afin de créer des feuilles de style modulaires qui ne dépendent pas de l'emplacement absolu d'une ressource, les auteurs peuvent utiliser des URI relatifs. Les URI relatifs (tels que définis dans [RFC3986] ) sont résolus en URI complets à l'aide d'un URI de base. La section 5 du RFC 3986 définit l'algorithme normatif pour ce processus. Pour les feuilles de style CSS, l'URI de base est celui de la feuille de style et non celui du document source.

Par exemple, supposons la règle suivante :

body { background: url("yellow") }

se trouve dans une feuille de style désignée par l'URI :

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

L'arrière-plan du BODY du document source sera recouvert de l'image décrite par la ressource désignée par l'URI.

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

Les agents utilisateurs peuvent traiter différemment les URI non valides ou les URI désignant des ressources indisponibles ou inapplicables.

Tiré de la CSS 2.1 spec .

16voto

Quentin Points 325526

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X