不幸的是,Firefox 在这里有一个愚蠢的错误......路径是相对于页面的路径,而不是相对于 CSS 文件的位置。这意味着如果您在树中的不同位置有页面(例如在根目录中有 Default.aspx,在 View 文件夹中有 Information.aspx),则无法获得有效的相对路径。(IE 将正确解析相对于 CSS 文件位置的路径。)
我唯一能找到的是关于http://www.west-wind.com/weblog/posts/269.aspx的评论,但老实说,我还没有成功。如果我这样做,我将编辑此评论:
回复:理解 ASP.Net 路径,Russ Brooks 2006 年 2 月 25 日上午 8:43
没有人完全回答 Brant 关于 CSS 文件本身内部图像路径的问题。我已经得到了答案。问题是,“我们如何在 CSS 文件中使用应用程序相关的图像路径?” 我也一直对这个问题感到沮丧,所以我花了最后 3 个小时来制定解决方案。
解决方案是通过 ASPX 页面处理程序运行您的 CSS 文件,然后在每个路径中使用少量服务器端代码来输出根应用程序路径。准备好?
- 添加到 web.config:
<compilation debug="true">
<!-- Run CSS files through the ASPX handler so we can write code in them. -->
<buildProviders>
<add extension=".css" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
<httpHandlers>
<add path="*.css" verb="GET" type="System.Web.UI.PageHandlerFactory" validate="true" />
</httpHandlers>
在 CSS 中,只要存在路径,就使用 Request.ApplicationPath 属性,如下所示:
#content { 背景: url(<%= Request.ApplicationPath %>/images/bg_content.gif) 重复-y; }
.NET 默认使用 MIME 类型“text/html”提供 ASPX 页面,因此,您的新服务器端 CSS 页面使用此 MIME 类型提供,这会导致非 IE 浏览器无法正确读取 CSS 文件。我们需要将其覆盖为“text/css”。只需将此行添加为 CSS 文件的第一行:
<%@ ContentType="text/css" %>