8
votes

Pouvez-vous référencer des images de CSS sans utiliser des chemins relatifs?

Je voudrais créer un div avec une image d'arrière-plan CSS: xxx

maintenant, je ne peux pas utiliser les itinéraires dans CSS, de sorte que je dois utiliser un chemin relatif ou mon application se brisera si elle est installée sur un chemin non-racine.

existe-t-il un moyen autour de cela? Quelque chose comme xxx

j'ai trouvé Ce fil d'ici il y a une année qui affirme qu'il est impossible. Est-ce toujours le cas?

EDIT : Je sais que je peux en ligne le CSS de la page, ce n'est pas vraiment une solution acceptable, mais plutôt un travail autour.


3 commentaires

Quel est le problème avec les chemins relatifs?


@Pekka - Les chemins relatifs (comme dans '../images/foo.png') sont fragiles. Ils peuvent casser si vous modifiez la route vers cette page. Cela pourrait même être une configuration externe, par ex. Un frontend Apache agissant comme un proxy inverse, avec mod-réécrire. Un chemin "absolu" est plus robuste (c'est "relative" dans votre dossier d'application, mais la page rendue contient un chemin absolu).


"Ils peuvent casser si vous modifiez la route vers cette page" Non si vous avez une feuille de style distincte - Les chemins relatifs des feuilles de style sont toujours relatifs à la feuille de style, ce qui ne devrait pas changer qui souvent , devrait-il?


4 Réponses :


9
votes

Le chemin va toujours de votre feuille de style. Alors pourquoi n'utilisez-vous pas des chemins relatifs?

Exemple, votre CSS est dans / Public / CSS / , votre chemin dans votre fichier CSS doit donc être ../ images . C'est tout.

mais peut-être moindre.css a quelque chose de similiaire que vous recherchez.


1 commentaires

Merci. Je me suis toujours demandé si l'URL du chemin dans CSS passe de l'index ou du fichier CSS.



7
votes

Le chemin autour / est / possible.

Le problème est que les fichiers CSS sont statiques, alors jouez! Ne fait rien sur eux - sauf les servir aux clients.

Il suffit de rendre vos fichiers CSS en vues, écrivez un contrôleur générique qui prend le nom de fichier comme paramètre et il sera servi de jeu! Modèles.

Quelque chose dans les lignes de (Méfiez-vous: pseudocode!):

route: xxx

contrôleur xxx

puis dans votre CSS, vous pouvez utiliser n'importe quelle fonctionnalité de modèle groovy que vous voulez. Le chemin d'installation est disponible sous forme http.path dans la conf < / p>

Ce sera très inefficace cependant, vous devrez donc ajouter NGinx ou un fronton similaire pour faire la mise en cache et définir des valeurs d'expiration élevées pour ces fichiers.

Je ne sais pas si c'est Vaut la peine de le faire juste pour éviter les chemins relatifs !

Je pense certainement que le chemin relatif est mieux adapté au déploiement générique et que vous êtes plus susceptible de briser les choses avec cette approche absolue dynamique.

Une meilleure stratégie de déploiement globale

ANOTHE Point important est que si vous le faites comme des URL absolues, il n'y a pas de problème. En fait, je fais aussi.

mais quand je déploierai mes applications Web (soyez-leur de jouer !, Django, pure WSGI ou autre chose) J'ai toujours mis un fronton Web.

généralement nginx .

Cela signifie que votre cadre de lecture sera un serveur en amont et vous pouvez faire tout ce que vous voulez avec les URL sur votre port: 80 - et gérez plusieurs services avec des sous-domaines ou des sous-dossiers ...

Mais lorsque vous accédez à votre application de lecture sur son propre port (s) tout sera absolu.

Enfin, si vous déployez une lecture! En tant que guerre, j'aurais le sentiment que vous avez choisi le mauvais cadre ou le mauvais modèle de déploiement! Mais alors votre JBoss ou quel que soit autre serveur d'applications fera de la magie sur les sous-dossiers ...


2 commentaires

@ RIpper234 Ahah Désolé, je l'envisimait de manière générique de montrer toutes les situations possibles, pas de sens qui a été votre modèle de déploiement!


@ user1187534 - Vous avez besoin d'un serveur d'applications, sinon vous n'en avez pas besoin, car il n'apporte pas beaucoup de valeur ajoutée et que le jeu comprend déjà le même serveur Web. Aussi, jouer! 2 Ne travaille pas actuellement sur un serveur d'applications Java.



-2
votes

Jetez un coup d'œil au fichier CONF / IATTES.

y, vous trouverez ce qui suit quelque chose comme

Carte des ressources statiques du dossier / dossier public sur le chemin URL / actif Obtenir / des actifs / * File Controlers.Assets.AT (chemin = "/ public", fichier)

ce qui signifie pour accéder aux ressources dans le dossier public, vous utiliseriez / des actifs dans votre URL.

donc dans votre CSS que vous faites URL (/assets/images/myimage.png) et cela fonctionnera.


4 commentaires

Les fichiers CSS ne sont pas analysés, mais sont plutôt servis statiquement. Si votre application est déployée dans un sous-dossier ("http.path" dans application.conf), votre chemin proposé ne fonctionnera tout simplement pas.


Oui, les fichiers CSS sont servis statiquement. Mais tant que vous configurez les routres.conf correctement et utilisez l'URL correspondante dans votre CSS, les images doivent être servies correctement.


Et c'est exactement comment j'utilise l'image de fond: URL ("...") dans les fichiers CSS de mon projet


Contrôleur d'actifs est à ma connaissance, uniquement disponible dans la lecture 2.0 (et nous sommes Parler de la lecture 1.2. * Ici) ...



12
votes

Étant donné que le framework de lecture compile tous les fichiers de / public, j'ai utilisé l'instruction suivante dans le CSS pour accéder à des images d'arrière-plan.

background: url("/assets/images/my-image-background.jpg");


0 commentaires