标签重置相对 url 基准起点,必须为绝对 url 或根相对路径(结尾带斜杠),且须置于 最前、唯一;仅影响其后 html 属性中的纯相对路径,不作用于 js/css 运行时。

<base> 标签不是“简化路径”的快捷键,而是重置 HTML 解析器对相对 URL 的基准起点——设错一个字符,<img src="logo.png"> 就 404,且浏览器通常不报错,只静默失败。
base href 必须是绝对 URL 或根相对路径(结尾带斜杠)
浏览器只认以 https://、http://、// 或 / 开头的 href 值。其他写法如 assets/、../static/、%PUBLIC_URL%/ 全部被静默忽略,资源退回到按当前页面 URL 解析,上线后批量 404。
-
https://cdn.example.com/v3/:最稳妥,协议、域名、路径明确,适合 CDN 场景 -
/myapp/:合法根相对路径,等价于当前协议 + 域名 +/myapp/,但缺尾斜杠(如/myapp)在 Firefox 中可能被截断成/myappcss/,导致style.css请求错乱 -
//cdn.example.com/v3/:协议相对,自动继承当前页 http/https,适合多协议环境 -
file:///D:/project/dist/:仅限本地调试,部分浏览器对file://协议下<base>支持不一致
base 标签必须放在 最前面,且只能有一个
<base> 影响的是 HTML 解析阶段的顺序逻辑:它只对它之后出现的相对 URL 生效。放错位置或重复声明,等于没写。
- 正确顺序:
<base href="/myapp/"> <title>App</title> <link href="style.css"> - 错误示例:
<link href="main.css"> <base href="/myapp/">→main.css已解析完毕,不受控 - 禁止放在
里——浏览器直接忽略 - 多个
<base>时,只有第一个生效;Chrome 控制台会提示Multiple base elements detected. Only the first one is used. - 用 JavaScript 动态插入(如
document.head.appendChild())完全无效——解析阶段早已结束
base 只影响 HTML 属性中的纯相对路径,不穿透到 JS/CSS 运行时
这是最容易误判的一点:<base href="/cdn/"> 不会让 fetch('./api/data.json') 或 import('./utils.js') 自动带上前缀。它只作用于 HTML 解析时的属性值。
- ✅ 真受影响:
<img src="icon.svg">、<script src="bundle.js"></script>、<link href="theme.css">、<form action="submit.php"></form>、CSS 中的background: url(avatar.jpg)(注意:这是 HTML 解析时计算的,不是 CSS 引擎自己 resolve) - ❌ 完全不受影响:
fetch('./api/user')、import('./utils.js')、new Worker('./worker.js')、CSS 中的@import "reset.css"、<iframe src="page.html"></iframe>(它的src相对于 iframe 当前 URL) - ⚠️ 特别注意:
href="/admin"这种根相对路径根本不受<base>控制——它直接拼到当前域名下
真正麻烦的地方不在写法本身,而在它和前端路由、构建工具、Service Worker 的隐式耦合:比如 Vite 已设 base: '/a/b/c/',HTML 里再手动加 <base href="/a/b/c/">,资源路径可能被拼两次;Vue Router 的 base 参数也不读 document.baseURI,必须显式传入。这些地方不校验,上线后 404 很难定位。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











