base标签必须设为绝对url或根相对路径且结尾带斜杠,置于head最顶部唯一声明;仅影响html解析阶段的相对url(如img、script、link、form、css url()),不影响fetch、import、worker、@import等。

base 标签不是“加个前缀就完事”的配置,设错一个字符(比如少个斜杠、多一个点),<img src="logo.png"> 就 404,浏览器还不报错——你只能看到资源加载失败,却找不到原因。
base href 必须是绝对 URL 或根相对路径,否则静默失效
浏览器只认以 https://、http://、// 或 / 开头的 href 值。其他写法一律被丢弃,不警告、不报错、不提示。
-
href="assets/"→ 无效(缺协议和根路径) -
href="../static/"→ 无效(含..) -
href="/myapp"→ 无效(结尾没斜杠,Firefox 会截断成/myappcss/) -
href="https://cdn.example.com/v3/"→ ✅ 推荐(绝对 URL,部署可控) -
href="/myapp/"→ ✅ 合法(根相对路径,结尾必须带斜杠) -
href="//cdn.example.com/v3/"→ ✅ 可用(协议相对,自动继承当前协议)
base 标签必须放在 最顶部,且只能有一个
<base> 的作用是重置 HTML 解析器对后续所有相对 URL 的基准起点,所以它必须是 中第一个元数据类标签。放错位置或重复声明,等于没写。
- 错误顺序:
<title>My Page</title> <link href="style.css"> <base href="/myapp/">→style.css已按原页面 URL 解析完毕,不受控 - 正确顺序:
<base href="/myapp/"> <title>My Page</title> <link href="style.css"> <img src="logo.png"> - 禁止写在
里——浏览器直接忽略 - SSR 模板拼接时 header 和 page 各 render 一个
<base>→ 只有第一个生效,控制台可能提示Multiple base elements detected. Only the first one is used.
哪些属性真受影响,哪些完全不管
<base> 只在 HTML 解析阶段起作用,不是全局代理。很多你以为它能管的,其实根本绕过它。
- ✅ 真受影响:
<img src="icon.svg">、<script src="bundle.js"></script>、<link href="theme.css">、<form action="submit.php"></form>、CSS 中的background: url('avatar.jpg'); - ❌ 完全不受影响:
fetch('./api/data.json')、import('./utils.js')、new Worker('./worker.js')、CSS 中的@import "reset.css";、<iframe src="page.html"></iframe> - ⚠️ 半受影响:
document.baseURI会返回<base href>的值,可用于构造 URL(如new URL('data.json', document.baseURI)),但window.location和document.URL完全不变
SPA 部署在子路径时,base href 和前端路由必须严格对齐
Vue Router 的 base 配置项和 HTML 的 <base href="/subpath/"> 是两套独立机制,不自动同步。只设一个,另一个大概率出问题。
- HTML
<base href="/subpath/">是为了让<script src="js/app.js"></script>正确加载,否则 chunk 文件 404 - Vue Router / React Router v6+ 必须显式配置
base: '/subpath/',否则router.push('/home')会跳到根路径 - Service Worker 缓存策略若依赖
self.location.origin + '/subpath/',而 HTML 没配<base>,则预缓存路径错位 - 微前端场景下,子应用若同时设了 Webpack 的
publicPath和<base>,资源路径可能被拼两次,变成/subpath/subpath/js/app.js
最容易被忽略的是:CSS 中的 url() 函数受 <base> 影响,而 @import 不受影响;本地开发用 file:// 协议时,href 必须是完整绝对路径(如 file:///D:/project/dist/),否则部分浏览器解析失败;还有,千万别用 JS 动态插入 <base> —— 已解析的元素不会重算,只影响之后新创建的 DOM 节点。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











