写在前面:
最近作一个先后端结合的项目时,忽然发现本身被页面中使用的相对路径搞糊涂了(PS:其实已经不是第一次了。。。以前有一次屡清楚了,但发现又忘记了,瞧我者好记性O(∩_∩)O)。因此我要趁此次好好记一下!css
前端开发中使用相对路径的地方无非就两处:html
html
文件中引入资源(js
、css
、img
等)前端
css
文件中引入背景图片background-image
后端
那么,这些相对地址到底相对的是谁,谁,谁 ???
之前我曾经傻傻地觉得:“相对路径在哪里写的就相对于谁!”,只能说仍是太年轻。浏览器
我作了个简单的实验来验证。url
页面地址为:http://example.com/beta/testcode
html
文件中引入资源(js
、css
、img
)时,有些使用的是相对路径,有些使用的是绝对路径:htm
<link rel="stylesheet" href="./index.css"> <script src="/index.js"></script> <img src="../1.png" alt="图片">
css
文件中引入背景图片时,一样的,有些使用的是相对路径,有些使用的是绝对路径:对象
body{ background: red; background-image: url('./2.png'); } div{ width: 200px; height: 200px; background-color: yellow; background-image: url('/3.png'); }
最终查看浏览器发出的请求分别为:图片
http://example.com/beta/index... (html
中引入的 css
)
http://example.com/index.js (html
中引入的 js
)
http://example.com/1.png (html
中引入的图片 )
http://example.com/beta/2.png (css
中引入的图片)
http://example.com/3.png ( css
中引入的图片)
从浏览器最终发出的请求能够看出,html
和css
中引用资源时,无论是相对路径仍是绝对路径,两种使用场景下 相对的对象 是不一样的。
html
中引入的资源(包括js
、css
、img
)
相对路径:相对的是 网页自己的 URL,即 http://example.com/beta/test
绝对路径:相对的是 网页 URL 的根路径,即 http://example.com
css
中引入的资源
相对路径:相对的是 css
文件自己的 URL,即 http://example.com/beta/index...
绝对路径:相对的是 网页 URL 的根路径,即 http://example.com
结论:html
中引入资源的相对路径与 网页的 URL 有关,而css
中则与 css
资源自己 URL 有关。但使用绝对路径时,无论是在 html
中,仍是css
中,都只与 网页 URL的根路径有关。