仅在html解析阶段重置纯相对路径(如logo.png)的基准url,必须为绝对url或根相对路径(以/开头且结尾带/),否则静默失效;不影响绝对url、协议相对url、根相对路径及js/css运行时行为。

base href 只改纯相对路径,不碰绝对 URL 和协议相对 URL
<base href> 的作用非常具体:它只重写 HTML 解析阶段中「没有协议、没有域名、不以 // 开头」的路径。比如 logo.png、js/app.js、../css/theme.css 这类——但前提是它们没被其他机制提前解析掉。
常见误解是以为它能“代理所有链接”,其实完全不是:
-
https://example.com/api/data→ 不受影响,浏览器直接发起请求 -
//cdn.example.com/img.jpg→ 协议相对 URL,跳过<base>处理 -
/admin/users→ 根相对路径,也不走<base href>,而是按当前域根目录解析 -
../assets/icon.svg→ 含..的路径,会被浏览器静默忽略<base>,按原页面 URL 拼接(极易 404)
base href 必须放在 最前面,且只能有一个
HTML 是顺序解析的。<base href="/app/"> 如果写在 <link href="style.css"> 后面,那这个 CSS 就已经按原始页面 URL 加载完了,<base> 对它毫无作用。
必须满足两个硬性条件:
- 位置:严格位于
内,且是第一个元数据类标签(早于<title></title>、<meta>、<link>) - 数量:整个页面最多一个;多个时仅第一个生效,其余被丢弃(Chrome 控制台会提示
Multiple base elements detected. Only the first one is used.)
写在 里?浏览器直接忽略,不报错也不警告。
base target 不等于“所有链接都新窗口打开”
<base target="_blank"> 只影响三类没显式声明 target 的行为:<a href></a>、<form action></form>、window.open()(未传第二个参数)。但它对以下完全无效:
location.href = "/dashboard"history.pushState()-
<iframe src></iframe>、<img src>、<script src></script> - CSS 中的
background: url(avatar.jpg)(注意:这个 URL 本身受<base href>影响,但跳转行为无关)
更关键的是:只要链接自己写了 target,哪怕只是 target="_self",<base target> 就彻底失效。所以别指望它“兜底”外链跳转——真要统一外链行为,得靠 JS 补全或模板层控制。
href 值不合法时,base 标签被静默忽略
浏览器对 href 值极其挑剔。只要不符合「以 http://、https://、// 或 / 开头」这四条之一,整个 <base> 标签就当不存在——你不会看到任何控制台错误,但所有 <img src="logo.png"> 都会按当前页面 URL 拼接,结果就是批量 404。
典型错误写法:
-
href="static/css/"→ 缺协议和域名,被忽略 -
href="../assets/"→ 含..,被忽略 -
href="https://example.com"→ 结尾没斜杠,Firefox/Opera 会截断成https://example.comcss/
正确写法只有三种:href="https://cdn.example.com/v3/"、href="/myapp/"、href="//cdn.example.com/v3/"。其中结尾的 / 不可省略,这是最容易漏掉又最难排查的一点。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











