残念ながら、Firefox には愚かなバグがあります... パスは、CSS ファイルの位置に対して相対的ではなく、ページのパスに対して相対的です。つまり、ツリー内の異なる位置にページがある場合 (ルートに Default.aspx があり、View フォルダーに Information.aspx があるなど)、相対パスを機能させる方法はありません。(IE は、CSS ファイルの場所に関連するパスを正しく解決します。)
私が見つけた唯一のものは、http://www.west-wind.com/weblog/posts/269.aspxのこのコメントですが、正直なところ、まだ機能させることができていません。もしそうなら、私はこのコメントを編集します:
re: ASP.Net パスの意味を理解する Russ Brooks 著 2006 年 2 月 25 日 @ 8:43 am
CSS ファイル内の画像パスに関する Brant の質問に完全に答えた人は誰もいませんでした。私は答えを持っています。問題は、「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 { background: url(<%= Request.ApplicationPath %>/images/bg_content.gif) repeat-y; }
.NET は既定で "text/html" の MIME タイプで ASPX ページを提供します。その結果、新しいサーバー側の CSS ページはこの MIME タイプで提供され、IE 以外のブラウザーが CSS ファイルを正しく読み取れなくなります。これをオーバーライドして「text/css」にする必要があります。次の行を CSS ファイルの最初の行として追加するだけです。
<%@ ContentType="text/css" %>