2014-07-02 38 views
3

我知道CSS中的相对路径应该基于CSS文件的位置,由Using relative URL in CSS file, what location is it relative to?Is a relative path in a CSS file relative to the CSS file?回答。重定向的CSS文件中的相对路径

但是,我有一个内容管理网站,允许在需要时覆盖CSS。我产生一个页面的所有内容的链接,与像格式:

<link rel="stylesheet" type="text/css" href="/content/data/?s=123&get=.css"> 

如果显示的部分是使用默认情况下,静态CSS文件,这一事实是由服务于网页检测/content/data/;在这种情况下,它会重定向到该静态文件。

这些静态CSS文件可能包含相对路径存储在文件夹中附近的图像,所以当我的CSS文件是在/some-folder/styles/file.css,它包含

body { background-image: url(../images/section-123-bg.png); } 

浏览器寻找/some-folder/images/section-123-bg.png

这在Chrome,Safari或Firefox中似乎不成问题。 IE浏览器,但是,似乎寻找/content/images/section-123-bg.png。它似乎将/content/data/作为它结束的CSS文件的基本路径。

我的问题是:

是一个浏览器应该哪个源路径从CSS文件中的计算相对路径的时候开始的?

  • CSS文件的最终源路径 - 所有重定向完成后(如的Webkit/Mozilla浏览器)或
  • 从连杆元件的href的初始源路径(如Internet Explorer)

回答

1

我有一个类似的问题 - 我们不得不为代理旧版应用程序代理CSS文件,并且所有相关路径都是从代理脚本中解析出来的,而不是真正的位置。

最简单的修复方法是让我们将代理脚本更改为输出其他CSS文件代替的伪造CSS文件。

public ActionResult Bundle(string type, string bundle) 
{ 
    var url = Scripts.Url(bundle).ToString(); 
    var cssContent = string.Format("@import url('{0}');", url.Replace("'", @"\'")); 

    return Content(cssContent, "text/css"); 
} 
+0

谢谢!这将作为重定向到静态文件的替代品,但我仍然需要提供动态CSS,它通常以静态版本的副本开始,然后进行修改。结果,这个变体在到达浏览器后可以有相同的相对链接进行处理。 –