如何在HTML中正确引用本地资源?

60

事实证明,引用本地资源可能是一些人的难点。我正在寻找一个关于本地资源引用的规范答案以及它们的含义。

看看这些示例,这些引用路径有何区别?

  • <img src="myfile.png" />(没有前导斜杠)
  • <img src="/myfile.png" />(有前导斜杠)
  • <img src="folder/myfile.png" />(在子文件夹中没有前导斜杠)
  • <img src="/folder/myfile.png" />(在子文件夹中有前导斜杠)
  • <img src="../folder/myfile.png" />(带有点和前导斜杠/在子文件夹中)

在所有情况下,这些都是相对于HTML文档的基本目录的路径,该目录是加载文档的URL。如果文档是从Web URL加载的,则所有URL都会相对于该主机解析。绝对路径相对于站点的根目录来解析,相对URL相对于它们出现的页面的路径来解析。如果页面是从本地HTML文件加载的(通常表示为file://... URL),则URL仅会解析到本地资源。 - Jim Garrison
@JimGarrison 是的,这并没有考虑在没有 Web 服务器的情况下在本地计算机上加载文件的行为。 - Chase Florell
1个回答

121
  • 一个前导斜杠告诉浏览器从根目录开始。
  • 如果没有前导斜杠,就是从当前目录引用。
  • 如果在前导斜杠之前添加两个点,则表示引用当前目录的父目录。

采用以下文件夹结构:

demo folder structure

注意:

  • ROOT勾号是绿色的,
  • 第二个勾号是橙色的,
  • 第三个勾号是紫色的,
  • 第四个勾号是黄色的。

现在,在index.html.en文件中,您需要放置以下标记:

<p>
    <span>src="check_mark.png"</span>
    <img src="check_mark.png" />
    <span>I'm purple because I'm referenced from this current directory</span>
</p>

<p>
    <span>src="/check_mark.png"</span>
    <img src="/check_mark.png" />
    <span>I'm green because I'm referenced from the ROOT directory</span>
</p>

<p>
    <span>src="subfolder/check_mark.png"</span>
    <img src="subfolder/check_mark.png" />
    <span>I'm yellow because I'm referenced from the child of this current directory</span>
</p>

<p>
    <span>src="/subfolder/check_mark.png"</span>
    <img src="/subfolder/check_mark.png" />
    <span>I'm orange because I'm referenced from the child of the ROOT directory</span>
</p>

<p>
    <span>src="../subfolder/check_mark.png"</span>
    <img src="../subfolder/check_mark.png" />
    <span>I'm purple because I'm referenced from the parent of this current directory</span>
</p>

<p>
    <span>src="subfolder/subfolder/check_mark.png"</span>
    <img src="subfolder/subfolder/check_mark.png" />
    <span>I'm [broken] because there is no subfolder two children down from this current directory</span>
</p>

<p>
    <span>src="/subfolder/subfolder/check_mark.png"</span>
    <img src="/subfolder/subfolder/check_mark.png" />
    <span>I'm purple because I'm referenced two children down from the ROOT directory</span>
</p>

现在,如果您加载位于第二个子文件夹的index.html.en文件
http://example.com/subfolder/subfolder/

这将是您的输出

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接