在CSS文件中使用相对URL,它相对于哪个位置?

ano*_*ard 477 html css

在CSS文件中定义类似背景图像URL的内容时,使用相对URL时,它相对于哪个?例如:

假设文件/stylesheets/base-styles.css包含:

div#header { 
    background-image: url('images/header-background.jpg');
}
Run Code Online (Sandbox Code Playgroud)

如果我包括通过这个样式表到不同的文件<link ... />会在CSS文件中的相对URL是相对于样式表文件/stylesheets/相对于当前文档包括它是什么?可能的路径如:

/item/details.html
/about/index.html
/about/extra/other.html
/index.html
Run Code Online (Sandbox Code Playgroud)

Ale*_*ski 544

根据W3:

部分URL相对于样式表的来源进行解释,而不是相对于文档

因此,在回答你的问题时,它将是相对的/stylesheets/.

如果您考虑这一点,这是有道理的,因为CSS文件可以添加到不同目录中的页面,因此将其标准化为CSS文件意味着URL将在样式表链接的任何位置工作.

  • 还有另一个例外:当url是自定义属性的默认值时.假设您定义`.banner {background-image:var( - bgimg,url('images/default.jpg')); }`,但是还没有定义`--bgimg`的值.然后在页面`/ index.html`上,`.banner`将查找`/ images/default.jpg`,但在另一页`/ about/index.html`上``.banner`将看起来`/ about /图像/ default.jpg`.非常破碎的IMO. (2认同)
  • 我在使用属性时遇到问题:`background: var(--primary-color-background) no-repeat center center url("maps.jpg");` 这在 IOS 和 Safari 中不起作用。只有绝对路径 `/resources/maps.jpg` 与 css 属性一起在 Safari 中工作。 (2认同)

M4N*_*M4N 67

它与CSS文件有关.


Cod*_*eef 49

它与样式表有关,但我建议您使用相对于您的URL的URL:

div#header { 
  background-image: url(/images/header-background.jpg);
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以移动文件,而不需要在将来重构它们.

  • 就像命令行上的路径名一样,路径前面的/前面意味着它指向当前Web服务器上的绝对资源. (14认同)
  • 绝对路径使得难以将解决方案放在域的子文件夹中.您希望支持子文件夹的原因有很多.这样可以更容易地进行测试(如Diego提到的那样),您可以将先前版本/预发布版本与prod位于同一域中.将企业代理服务器设置为支持SSO,将所有解决方案移动到一个域等的未来变化.特别是使用SSL时,可能希望避免维护多个域名的开销.对我来说,这些考虑比"更容易移动我的.css文件"更重要. (10认同)
  • 实际上有一种情况是使用相对于CSS文件的URI更好.在我的情况下,我有一个目录"/ css /",我把所有的CSS数据.现在,我想在一个单独的文件夹中测试网站上的新功能.很难测试,例如测试文件夹中的新背景图像.这一切都取决于你的需求...... (3认同)
  • 我同意.好眼睛. (2认同)

jri*_*sta 30

为了创建不依赖于资源的绝对位置的模块化样式表,作者可以使用相对URI.相对URI(如[RFC3986]中所定义)使用基URI解析为完整URI.RFC 3986第5节定义了此过程的规范算法.对于CSS样式表,基本URI是样式表的URI,而不是源文档的URI.

例如,假设以下规则:

body { background: url("yellow") }
Run Code Online (Sandbox Code Playgroud)

位于URI指定的样式表中:

http://www.example.org/style/basic.css
Run Code Online (Sandbox Code Playgroud)

源文档的BODY的背景将使用URI指定的资源描述的任何图像进行平铺

http://www.example.org/style/yellow
Run Code Online (Sandbox Code Playgroud)

用户代理可能在处理指定不可用或不适用资源的无效URI或URI方面有所不同.

取自CSS 2.1规范.


mms*_*mms 5

可能发生的一个问题,似乎打破这个问题是使用css的自动最小化.缩小捆绑包的请求路径可以具有与原始css不同的路径.这可能会自动发生,因此可能会造成混淆.

缩小的束的映射请求路径应该是"/ originalcssfolder/minifiedbundlename"而不仅仅是"minifiedbundlename".

换句话说,将您的包命名为与原始文件夹结构具有相同的路径(使用/),这样任何外部资源(如字体,图像)都将通过浏览器映射到正确的URI.另一种方法是使用绝对URL(在你的CSS中引用,但通常不是这样).