谈谈HTML/CSS/JS代码中的文件相对路径

我们在HTML/CSS/JS代码中经常会写一些文件的相对路径和绝对路径,绝对路径还好说,相对路径到底他妈的相对的谁呢?恐怕很多人都不敢说完全弄清楚了。尤其是现在的开发过程,有开发环境、测试环境、部署环境,每个环境的相对路径可能又有区别。今天我就全面做测试,测试到底他妈的都是相对谁。

基础知识

.././/、只写文件名,这四种情况分别代表什么?

  • ../ 代表父级目录,连写的话,比如../../表示往上追溯两级目录
  • ./ 代表当前目录,连写的话无意义
  • / 代表网站根目录,就是服务器www目录
  • 只写文件名,跟./效果一样

HTML文件代码中的相对路径

测试步骤:

在服务器建立/a/b/c/d目录。把1.html放到d里面,内容是:<a href="../x/y/z.html">link</a>

访问http://localhost/a/b/c/d/1.html,右击link,看属性,得到http://localhost/a/b/c/x/y/z.html,说明,../x/y/z.html../是基于1.html的位置向上追溯了一层。

结论:HTML代码中的相对路径就是以本HTML文件所在目录开始计算,无论引入的文件是js还是css还是图片还是其他任何类型。

如果是在HTML文件内书写“行内js”和“行内css”,里面的相对路径当然也是相对于HTML文件的,毕竟没有别的参照物。

CSS文件代码中的相对路径

CSS文件中写相对路径的情况主要是设背景图和引入字体文件,测试步骤:

准备一个字体文件,可以随便下载一个,比如李旭科书法。

准备目录/a/b/c/d,1.css放在a目录,字体放在b目录,1.html依然在d目录。

1.html文件内容:

<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/a/1.css">
<p class="a">李旭科书法</p>

1.css文件内容,'./b/lxksf.ttf'表示从a目录开始找b目录,然后发现这个ttf文件:

@font-face {
    font-family: 'a';
    src: url('../b/lxksf.ttf');
}
.a {
    font-family: 'a';
}

还是访问http://localhost/a/b/c/d/1.html,可以看到,p元素成功应用了字体。

image.png

结论:CSS文件内如果写相对路径,是基于CSS文件本身的,跟谁引入了这个CSS无关。

JS文件代码中的相对路径

测试思路是,让1.html ajax 2.html。

还是构建/a/b/c/d/目录,1.html放到d里,2.html放到c里,1.js放到a里。

1.html内容:

<script src="http://cdn.bootcss.com/jquery/3.1.1/jquery.min.js"></script>
<script src="../../../1.js"></script>

2.html内容:

<strong>测试成功</strong>

1.js内容:

$.get('../2.html', function(data) {
    console.log(data);
});

然后还是访问http://localhost/a/b/c/d/1.html,在控制台可以看到,成功了:

image.png

结论:JS文件内的相对路径,也是从HTML文件所在位置开始计算的,跟js文件在哪无关。

总结

  • HTML文件和JS文件中出现的相对路径,都是从HTML文件所在位置开始计算的。
  • CSS文件中出现的相对路径,是从CSS文件所在位置开始计算的。

怎么理解这种设定?

当初创世者怎么考虑的,咱们不去探讨,只是感受一下这种设定的好处:

JS因为有了这种设定,就可以实现浏览器的同源限制。
JS文件是为HTML服务的,以HTML为核心更科学,而且除了ajax场合,JS文件里很少写相对路径。
而CSS文件,它大多是资源引用,比如引用img和字库和svg等,这些文件是为CSS服务的,它们跟css配合形成了一个整体,所以,当然应该相对于CSS文件所在位置进行计算。假如相对于HTML文件位置做计算,那就真乱套了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 谈谈HTML/CSS/JS代码中的文件相对路径 转载 作者microkof(http://www.jianshu....
    彦佐阅读 1,314评论 0 2
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,845评论 1 92
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,268评论 7 35
  • 清晨五点,巴厘岛的第一个早晨,当雨落青石、轻敲黛瓦的声音骤然落入耳中,在这异国他乡的清晨,在这意想不到的时刻...
    筱泓阅读 259评论 1 2
  • “有时候,操作效率的降低并不是因为功能设计得不够好,或者提示和建议处理得不够好,而是由于强行地塞进了一些用户不想要...
    邮差Vicky阅读 1,100评论 0 0