CSSファイルで相対URLを使用すると、それはどこに相対的ですか?


484

CSSファイルで背景画像URLのようなものを定義するとき、相対URLを使用するとき、それはどこに相対的ですか 例えば:

ファイルに次のもの/stylesheets/base-styles.cssが含まれているとします。

div#header { 
    background-image: url('images/header-background.jpg');
}

このスタイルシートを別のドキュメントに含める場合<link ... />、CSSファイルの相対URLは、スタイルシートドキュメント相対的/stylesheets/それが含まれている現在のドキュメントに相対的か。次のような可能なパス:

/item/details.html
/about/index.html
/about/extra/other.html
/index.html

回答:


551

W3によると:

部分的なURLは、ドキュメントではなく、スタイルシートのソースに関連して解釈されます

したがって、あなたの質問への回答では、それはに対して相対的になり/stylesheets/ます。

これについて考えると、CSSファイルを別のディレクトリのページに追加できるため、CSSファイルに標準化すると、スタイルシートがリンクされている場所であればどこでもURLが機能することになります。


ルールに例外があるように見えます:-ms-behaviorIEでは:(
pkyeck

2
別の例外があります。URLがカスタムプロパティのデフォルト値である場合です。を定義.banner { background-image: var(--bgimg, url('images/default.jpg')); }するとしますが、--bgimgまだ値を定義していません。次に、ページ/index.htmlでa .bannerが検索され/images/default.jpgますが、別のページでは/about/index.htmla .bannerが検索されます/about/images/default.jpg。非常に壊れたIMO。
chharvey 2017

修正:上記のデフォルト値のバグはChrome v60で修正されています。
chharvey 2017

あなたのCSSがバンドルされている場合、パスは本当に重要ではありません。それはあなたがそうなるだろうと思っている場所ではありません、もう何も相対的ではありません。
Tod

1
プロパティの使用時に問題が発生しました:background: var(--primary-color-background) no-repeat center center url("maps.jpg");これはIOSおよびSafariでは機能しませんでした。/resources/maps.jpgSafariでは、cssプロパティと組み合わせて絶対パスのみが機能します。
アンディ


50

それはスタイルシートに関連していますが、私はあなたのURLに関連するURLを作ることをお勧めします:

div#header { 
  background-image: url(/images/header-background.jpg);
}

そうすれば、将来リファクタリングする必要なくファイルを移動できます。


前部の余分な「/」はどのような違いがありますか?
Casebash、

15
コマンドラインのパス名と同様に、パスの先頭にある/は、現在のWebサーバー上の絶対リソースを指すことを意味します。
デビッドW.キース

4
実際には、CSSファイルと比較してURIを使用する方が良い場合があります。私の場合、すべてのCSSデータを配置するディレクトリ「/ css /」があります。ここで、別のフォルダーでWebサイトの新機能をテストしたいと思います。たとえば、テストフォルダー内の新しい背景画像をテストするのは難しくなります。それはすべてあなたのニーズに依存します...
ディエゴ

12
絶対パスを使用すると、ドメインのサブフォルダーにソリューションを配置することが難しくなります。サブフォルダをサポートする理由はいくつかあります。(Diegoが言及したように)テストを簡単に行うことができ、prodと同じドメインに以前のバージョン/プレリリースを置くことができます。企業のプロキシサーバーがSSOをサポートするように設定されている将来の変更、すべてのソリューションを1つのドメインに移動するなど。私にとって、これらの考慮事項は、「。cssファイルを簡単に移動する」よりもはるかに重要です。
Tedd Hansen

そのような画像やものはとにかくcdnに行くので、これは完璧です
Muhammad Umer

30

リソースの絶対位置に依存しないモジュラースタイルシートを作成するために、作成者は相対URIを使用できます。相対URI([RFC3986]で定義)は、ベースURIを使用して完全なURIに解決されます。RFC 3986、セクション5は、このプロセスの規範的なアルゴリズムを定義しています。CSSスタイルシートの場合、ベースURIはスタイルシートのURIであり、ソースドキュメントのURIではありません。

たとえば、次のルールがあるとします。

body { background: url("yellow") }

URIで指定されたスタイルシートにあります。

http://www.example.org/style/basic.css

ソースドキュメントのBODYの背景には、URIで指定されたリソースによって記述された画像が並べて表示されます。

http://www.example.org/style/yellow

ユーザーエージェントは、無効なURIや、使用できないリソースや適用できないリソースを指定するURIの処理方法が異なる場合があります。

CSS 2.1仕様から取得



5

発生する可能性のある問題の1つは、CSSの自動最小化を使用している場合です。縮小されたバンドルのリクエストパスは、元のCSSとは異なるパスを持つことができます。これは自動的に行われる可能性があるため、混乱を招く可能性があります。

ミニファイドバンドルのマッピングされたリクエストパスは、単に「minifiedbundlename」ではなく「/ originalcssfolder / minifiedbundlename」である必要があります。

つまり、バンドルに元のフォルダー構造と同じパス(/を使用)を付けるように名前を付けます。これにより、フォント、画像などの外部リソースがブラウザーによって正しいURIにマップされます。別の方法は、CSSで絶対url(refsを使用することですが、通常は望ましくありません。


これで時間を節約できました。ありがとう。もっと文書化する必要があります
mjbates7 2017


-4

使ってみてください:

body {
  background-attachment: fixed;
  background-image: url(./Images/bg4.jpg);
}

Images 投稿したい画像を保持するフォルダです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.