路径、相对路径和绝对路径
路径、相对路径和绝对路径
写在前面
本节内容如果不动手实践,很有可能一头雾水,请先按讲义内容自行实践再配合作业食用。
目录组织
前一节里,我们已经使用了多个文件来组成网站。现实中的网站也是如此,通常有着极其庞大数目的页面和资源(图片)。
对于这样的网站(或者说,项目),把所有页面和资源都放在根目录下显然是不合适的。
我们需要用层级目录的形式将这些资源管理起来。
假设我们有如下的目录组织方式:

看看要如何引用资源。
同一目录
假如我们在index.html
里要放置图片logo.jpg
,或者1.html
里要创建一个跳转2.html
的超链接。
因为相关的文件处在同一个目录下,可以直接访问。因此直接访问即可:
<img src="logo.jpg">
或者
<a href="2.html">点击</a>
子目录
如果index.html
要放置图片title.jpg
,或者index.html
要跳转到1.html
或者2.html
。 又或者1.html
或者2.html
要跳转到3.html
。
在这些需求里,目标资源都处在当前资源的子目录下。对于这种情况,你需要给出带子目录的路径。
例如index.html
放置图片title.jpg
,要这样做:
<img src="images/title.jpg">
同样,如果index.html
要跳转到1.html
,需要这样:
<a href="pages/2.html">点击</a>
1.html
和2.html
也可以通过
<a href="subs/3.html">点击</a>
来创建跳转到3.html
的超链接。
思考
index.html
要如何跳转到3.html
?
上层目录(父目录)
子目录的跳转方式很容易理解,但他只能向下走,不能向上走。
然而向上走也是非常正常的需求,例如3.html
要跳转到1.html
或者2.html
。这里需要特殊的表示方式来指代上层目录(父目录)。
在大多数操作系统里(实际上是所有常见的操作系统里)都用两个点号..
表示当前目录的上一层。
所以在3.html
里可以这样:
<a href="../1.html">点击</a>
来跳转到1.html
同理1.html
和2.html
也可以通过:
<a href="../index.html">点击</a>
来跳转到index.html
页面。
思考
如何从3.html
跳转到index.html
?
又要如何才能在1.html
,2.html
,3.html
里贴title.jpg
呢?
(虚假的)绝对路径
上面所有的路径都根据当前html文件的位置来进行推导,这个路径称为相对路径,因为他始终是相对于当前的html文件而来的。
除此之外,你可以使用(文件系统上的)绝对路径,你可以自己尝试一下,把windows的完整路径填入,看看是否能访问。
但请你注意,不要使用这种绝对路径。
原因之一是微不足道的: 因为相对路径更灵活。设想你的项目换了一个位置,此时绝对路径就无法生效了,但相对路径依然可以生效,这避免了大量的无用功。
第二个原因则是致命的: 你不能部署到服务器上使用。显然你的硬盘上不可能有跟服务器上相同的一份文件。(同志,你听说过硬盘图吗?)
(真实的)绝对路径
真实的绝对路径需要你部署到http服务器上。
别担心,不用你支付云服务器费用并真的部署上去。当你启动Live Server,实际上已经在你的机器上部署了一个微型服务器。这里所有的行为都跟真实服务器上没有什么区别。
部署http服务时,会要求你设置服务器的根目录。对于Live Server,就是你启动时的目录(也就是你打开VSCode的位置)。
这个根目录用/
表示。
从根目录开始显然可以访问任意一个位置,例如:
你可以在任何位置,用:
<a href="/index.html">点击</a>
来跳转到index.html
。
同理,你也可以在任何位置,用:
<img src="/images/title.jpg">
来进行贴图。
这个路径被称为页面的绝对路径。
我要怎么选?
绝对路径看上去比相对路径要方便的多,但实际使用中多数情况下依然是相对路径比较优先。
设想下这种场景:
项目经理决定将pages
这个目录改名,并要求你修改页面代码使访问正常。
此时不管你使用绝对路径还是相对路径,从index.html
里访问2.html
的代码都需要修改。
但对于pages
内部的访问,比如1.html
到2.html
的访问,相对路径不需要修改,绝对路径就需要修改。甚至从1.html
里访问index.html
的代码,相对路径也是不需要修改的。
但具体问题也可以具体分析,假如约定图片都放在根目录下的images
下,也就是图片的位置相对固定,那么此时用绝对路径访问就可以体现出优势来——更加简洁,对目录结构的修改不敏感。
因此可以给出一些简单的原则:
- 相对关系比较固定的资源,用相对路径
- 具体位置比较固定的资源,用绝对路径
- 大多数情况下,相对路径会比较灵活
该如何选实际上是有很多影响因素的,关键是你要懂得他们的区别,才能在实际使用中灵活运用。