2009-11-14 5 views
5

En matière de CSS la règle suivante applique:Making url CSS() Par rapport au document

Partial URLs are interpreted relative to the source of the style sheet, 
not relative to the document. 

Mais voici mon problème:

J'ai différents sites Web qui utilisent le même fichier CSS. Bien qu'ils utilisent la même mise en page, les images réelles que les références CSS sont différentes pour chacun d'eux.

Exemple:

#header { 
width: 960px; 
height: 200px; 
background: url(/images/header.png); 
} 

Chaque domaine a ses propres "images" du dossier et son propre "header.png" que je voudrais que le CSS à la référence. Actuellement, il se comporte comme il est supposé et essaie de trouver le fichier png sur le domaine où le CSS est hébergé. Ce que je veux, c'est obtenir le fichier png du domaine où le fichier CSS a été appelé.

J'utilise "link" pour les feuilles de style parce que "@import" rompt le rendu progressif dans IE.

Une suggestion ou des solutions de contournement?

Répondre

2

Ce que je veux, c'est pour obtenir le fichier png du domaine où le fichier CSS a été appelé.

Vous devez avoir des URL distinctes pour chaque domaine référencé. Donc, www.example1.com référence sa feuille de style comme /style/sheet.css et l'attrape donc de http://www.example1.com/style/sheet.css tandis que www.example2.com l'obtient de http://www.example2.com/style/sheet.css.

Toutefois, ce n'est pas parce qu'ils sont différents du client qu'ils doivent être différents du côté serveur (avec toute la maintenance que cela implique). Vous pouvez simplement pointer un Alias sur chaque domaine vers le vrai fichier CSS partagé. La seule autre solution envisageable serait de séparer les règles de référencement d'URL telles que background-image et de les placer dans une feuille de style spécifique au domaine ou dans une feuille de style interne.

+0

Cela semble être une bonne solution, cela ne me dérange pas d'avoir un fichier css sur chaque domaine. Tout ce que je veux, c'est pouvoir les mettre à jour en même temps. Comment fonctionnerait cette alias? – Enkay

+0

Dépend du serveur Web que vous utilisez.Sur Apache, vous ajoutez une déclaration 'Alias' à chaque' ', en pointant sur le fichier ou le répertoire que vous voulez partager entre les hôtes. Sur IIS, vous ne pouvez alias qu'un répertoire entier, ce que vous faites en créant un nouveau 'répertoire virtuel' dans le Gestionnaire des services Internet. Plus: http://httpd.apache.org/docs/2.2/mod/mod_alias.html#alias/http://msdn.microsoft.com/en-us/library/zwk103ab.aspx – bobince

+0

Le serveur est Apache, je viens de a fait un test rapide avec un site Web et il semble fonctionner. Merci beaucoup! PS stackoverflow est une mine d'or! Merci tout le monde. – Enkay

0

La seule solution que je peux penser est d'utiliser une feuille de style supplémentaire pour tous les domaines qui spécifient les domaines images spécifiques:

/* domain specific images */ 
#header { 
    background-image: url(/images/header.png); 
} 
+0

Pas une mauvaise idée. J'essaie de faciliter la mise à jour de ma mise en page sur tous mes sites Web. Ça va être difficile de casser mon CSS en 2 parties. Une fois cela fait, il serait probablement plus facile de faire des mises à jour car je n'aurais que rarement besoin de modifier les "fichiers images.css locaux". J'espère toujours une solution miracle qui me permettrait de garder tout dans un fichier facile qui est facile à mettre à jour, peu importe ce que je veux changer. – Enkay

0

Est-il possible que je pourrais injecter le domaine avec php dans la feuille de style tout en utilisant "lien" ?

pour exemple:

#header { 
background: url('.$domain.'/images/header.png); 
} 

Je ne sais pas comment cela pourrait fonctionner, mais peut-être quelqu'un d'autre peut prendre la balle et rouler avec elle! Est-ce que l'utilisation d'un truc comme ça brise le rendu progressif dans IE?

+0

Ah, mais comment le script PHP sait-il quel site l'appelait, pour obtenir la variable '$ domain'? Vous pouvez essayer avec HTTP_REFERER, mais c'est très peu fiable et presque jamais un bon en-tête à regarder. Vous devez également effectuer un travail important sur les en-têtes de cache et de modification, ou vous pouvez très mal casser les proxys et les caches. – bobince

+0

La façon dont les sites sont créés, il existe déjà une variable php dans chaque fichier du site Web qui contient le domaine. Cela était nécessaire pour une autre fonctionnalité. Je ne sais pas comment je pourrais injecter cette valeur dans un fichier css lié si. Une idée? – Enkay

+0

Vous pouvez renommer votre fichier css 'style.php' et ensuite utiliser php et css ensemble (avec les balises' ' évidemment). N'oubliez pas de changer le lien vers votre feuille de style de 'style.css' à' style.php'. – WOUNDEDStevenJones

1

option la plus rapide est chaque site a sa propre css pour faire référence à des images par rapport à la css

#header { 
    background: url(images/header.png); 
} 

Pour résoudre le problème de la mise à jour une fois que vous avez effectué une mise à jour, vous pouvez avoir une configuration de fichier batch pour copier vos modifications vers les emplacements de sous-sites nécessaires

+0

C'est exactement ce qu'Enkay utilise déjà. – Gumbo

2

Vous pouvez dupliquer votre fichier CSS sur chaque site Web à l'aide d'un script côté serveur.

example1.com/global.css est votre fichier CSS

example2.com/global.css.php est un script PHP qui retourne effectivement le fichier global.css de example1.com

Le script peut être aussi simple que

<?php 
readfile('http://example1.com/global.css'); 
?> 

Mais vous auriez besoin de plus de code si vous voulez mieux gérer la mise en cache.

+0

Cela entraînera le serveur Web à faire une requête HTTP. Pas une bonne solution. – Gumbo

+0

Je n'ai pas dit que c'était bon, j'ai dit que ça marcherait ... –

+0

Cela ne me dérange pas la requête http supplémentaire si c'est la seule façon de le faire fonctionner. Serait-ce rompre le rendu progressif d'Internet Explorer? – Enkay

0

Pour autant que je sais qu'il ya une différence entre

#header { 
background: url('/images/header.png'); 
} 

et

#header { 
background: url('../images/header.png'); 
} 

Le premier est relatif à la racine de votre site, et le second est relatif au répertoire parent (par rapport à l'emplacement de votre fichier css).

EDIT:

Si les deux sites sont servis de la même hôte, pourriez-vous utiliser des liens symboliques vos feuilles de style?

+0

Enkay a différents hôtes et pas seulement des chemins différents. – Gumbo

+0

Ah mon erreur, désolé – codeinthehole

Questions connexes