微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

你可以在不使用相对路径的情况下从css引用图像吗?

我想用背景图像css创建一个div:
#mydiv {
  background-image:url('/public/images/foo.png');
  background-repeat: repeat-x;
}

现在,我不能在css中使用路由,因此我必须使用相对路径,否则如果安装在非根路径,我的应用程序将会中断.

有没有解决的办法?就像是

background-image:url('@{publicFolder}/images/foo.png');

我确实发现一年前的this thread声称这是不可能的.这仍然是这样吗?

编辑:我知道我可以在页面中内联css,这不是一个真正可以接受的解决方案,而是一个解决方案.

解决方法

周围/是/可能的方式.

问题是CSS文件是静态的,所以Play!对他们没有任何作用 – 除了向客户提供服务.

只需将您的css文件转换为视图,编写一个通用控制器,将文件名作为参数,它们将作为播放服务!模板.

(beware:PSEUDOCODE!):

路线:

get /css/{filename}  Application.getCSS

CONTROLLER

class public void getCSS(filename)
{
     renderTemplate(filename);
}

然后在你的CSS中你可以使用你想要的任何groovy模板功能.
安装路径http.path in the conf

这将是非常低效的,因此您将不得不添加Nginx或类似的前端来执行一些缓存并为这些文件设置高过期值.

我不确定是否值得这样做以避免相对路径!

我绝对认为相对路径更适合通用部署,并且您更有可能使用这种动态绝对方法解决问题.

更好的整体部署策略

一个重要的一点是,如果您喜欢绝对URL,那就没问题了.
我其实也是.

但是,当我部署我的Web应用程序(他们玩!,django,纯wsgi,或其他任何东西)时,我总是放一个网络前端.

通常是Nginx.

这意味着您的游戏框架将是一个上游服务器,您可以使用:80端口上的URL执行所需的一切 – 并使用子域或子文件夹管理多个服务…

但是当你在自己的端口上访问你的播放应用程序时,一切都将是绝对的.

最后,如果你正在部署Play!作为一场战争,我会感觉你选择了错误的框架或错误的部署模式!但是,你的jboss或其他任何应用程序网络服务器将在子文件夹上做一些魔术……

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。