base标签对绝对路径完全无效,只作用于纯相对路径(如logo.png);合法href值仅限绝对url(如https://example.com/)或根相对路径(如/subapp/),其他写法均被静默忽略。

<base> 标签对绝对路径完全无效——这不是 bug,是规范行为。它只接管纯相对路径(如 logo.png、app.js),对任何以 http://、https://、// 或 / 开头的 URL 都不干预。
哪些 URL 会被 <base> 忽略?
浏览器在 HTML 解析阶段直接跳过以下写法,不作拼接:
-
<img src="https://cdn.com/logo.png?x-oss-process=image/resize,p_40">—— 含协议,走原始地址 -
<script src="//unpkg.com/react@18"></script>—— 协议相对,不依赖<base> -
<link href="/css/main.css">—— 根相对路径,直接拼到当前 origin,<base>不介入 -
<iframe src="/admin/frame.html"></iframe>—— 同上,<base>完全绕过
href 值写成 assets/ 或 ../static/ 为什么会失效?
这类值不是“配置错误”,而是被浏览器静默丢弃:<base href="assets/"> 等同于没写。后续所有 src="logo.png" 仍按当前页面 URL 解析,404 风险陡增且控制台无提示。
合法 href 值只有两种:
-
https://example.com/subapp/(绝对 URL,协议+域名+路径全明确) -
/subapp/(根相对路径,必须以/开头,且结尾带/)
常见无效写法:subapp/、./css/、../、%PUBLIC_URL%/(未被构建时替换就发到浏览器)。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
<base> 影响哪些属性?哪些常被误认为受控?
它只作用于 HTML 解析时的硬编码资源定位属性,且仅限纯相对路径:
- ✅ 真正生效:
<img src="logo.png">、<script src="app.js"></script>、<link href="style.css">、<form action="submit.php"></form>、CSS 文件内background: url(icon.svg)(注意:这是 HTML 解析时计算的,不是 CSS 引擎自己 resolve) - ❌ 完全不受控:
fetch('./api/user')、import('./utils.js')、new Worker('./worker.js')、@import "reset.css"、<source srcset="logo-2x.png 2x"></source>
CSS 中的 url() 是相对于 CSS 文件自身位置解析的;JS 运行时构造的路径(如 new URL('data.json', document.baseURI))虽可读取 document.baseURI,但不会自动改写 fetch 行为。
部署子路径 SPA 时最易踩的坑
当应用部署在 https://example.com/a/b/c/ 时,<base> 和框架配置必须严格对齐:
- Vue Router / React Router v6+ 必须显式设
base: '/a/b/c/',否则router.push('/home')会跳到根路径 - Webpack 的
publicPath和<base href="/a/b/c/">若同时配置且值相同,资源路径可能被拼两次(如/a/b/c//a/b/c/js/app.js) - Vite 构建时若已设
base: '/a/b/c/',HTML 中就不该再手动加<base>标签
最关键的复杂点在于:浏览器对 href 值的校验是静默的——写错就失效,不报错也不警告;而 JS 运行时路径和 HTML 解析路径是两套独立机制,混用必然导致行为割裂。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










