标签重置html解析器对后续纯相对url的基准起点,非加前缀;href必须为绝对url或根相对路径(结尾带/),且须置于最前唯一存在,否则静默404;仅影响img/src、script/src等html属性及css中url(),不影响fetch、import等js运行时路径。

<base> 标签不是“加前缀”,而是重置 HTML 解析器对后续所有相对 URL 的基准起点;设错一个字符,<img src="logo.png"> 就 404,且浏览器通常不报错,只静默失败。
base href 值必须是绝对 URL 或根相对路径(结尾带斜杠)
浏览器只接受 href 值以 https://、http://、// 或 / 开头。其他写法(如 assets/、../static/、%PUBLIC_URL%/)会被静默忽略——控制台无提示,但所有纯相对路径都退回到按当前页面 URL 解析,上线后批量 404。
-
✅ 推荐写法:
https://cdn.example.com/v3/(协议+域名+路径,结尾斜杠不能少) -
✅ 合法写法:
/myapp/(根相对路径,结尾斜杠必须存在;缺斜杠在 Firefox 中可能被截断为/myappcss/) -
✅ 可用写法:
//cdn.example.com/v3/(协议相对,自动继承当前页 http/https) -
❌ 无效写法:
static/(无协议无根)、../assets/(含..)、https://example.com(结尾没斜杠)、%PUBLIC_URL%/(未被服务端替换就发到浏览器)
base 标签必须放在 最顶部且只能有一个
<base> 的作用发生在 HTML 解析阶段,它只对它之后出现的标签生效。位置或数量错,等于没写。
- 必须早于
<title></title>、<link>、<script></script>等任何依赖路径的标签 - 放错位置示例:
<link href="main.css"> <base href="/app/">→main.css已按原始页面 URL 解析完毕,不受控 - 放
<base>到里?浏览器直接忽略,不警告也不报错 - 多个
<base>?只有第一个生效;Chrome 控制台会提示Multiple base elements detected. Only the first one is used. - 禁止用 JS 动态插入:
document.head.appendChild(baseEl)—— 解析阶段早已结束,已加载的资源不会重算
哪些属性真受影响,哪些完全不管
<base> 只影响 HTML 解析阶段的纯相对路径(即不以 /、: 或协议开头的字符串),不是全局路径代理。很多你以为它能管的,其实完全不管。
-
✅ 明确受影响:
<img src="logo.png">、<script src="app.js"></script>、<link href="style.css">、<form action="submit.php"></form>、CSS 中的background: url(avatar.jpg)(注意:这是 HTML 解析时计算的,非 CSS 运行时) -
❌ 完全不受影响:
fetch('./api/data.json')、import('./utils.js')、new Worker('./worker.js')、CSS 中的@import "reset.css"、<iframe src="page.html"></iframe>(它的src相对于 iframe 当前 URL) -
⚠️ 特别注意:
href="/admin"这类根相对路径根本不受<base>控制,它直接拼到当前域名下,和href值无关
最容易被忽略的是:它不影响 JS/CSS 运行时路径,却会影响 CSS 里的 url() —— 这个边界非常窄,但一旦误以为“所有 url 都统一了”,调试时就会卡很久。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











