css文件必须放在src/main/resources/static/下,因spring boot仅从classpath:/static、/public、/resources、/meta-inf/resources加载静态资源,且仅/static支持目录结构1:1映射为url路径,如static/css/style.css对应访问路径/css/style.css。

Spring Boot中CSS文件必须放在哪里
必须放在 src/main/resources/static/ 目录下,否则浏览器 404。Spring Boot 只从 classpath 下四个位置加载静态资源:classpath:/static、classpath:/public、classpath:/resources、classpath:/META-INF/resources,但只有 /static 支持目录结构 1:1 映射为 URL 路径。
常见错误包括:
- 把 CSS 放在
src/main/resources/css/style.css(漏了static) - 误放至
src/main/java/或其子包(Maven 不拷贝源码目录下的非.java文件) - 用 Maven 构建但跳过
process-resources阶段,导致static内容没进target/classes
HTML 中怎么写 href 才能正确加载
路径以 / 开头,且**不能包含 /static**。因为 Spring Boot 把 classpath:/static 当作 Web 根路径处理,所以 src/main/resources/static/css/style.css 对应的访问 URL 就是 /css/style.css。
正确写法示例:
<link rel="stylesheet" href="/css/style.css">
错误写法(必然 404):
-
href="css/style.css"(相对路径,易受当前 URL 影响,比如在/admin/user页面下会尝试请求/admin/user/css/style.css) -
href="/static/css/style.css"(Spring Boot 不暴露/static这层路径) -
href="static/css/style.css"(同上,且是相对路径)
Thymeleaf 模板里引用 CSS 的注意事项
用 th:href 是安全做法,它会自动补全上下文路径(如部署在 /myapp 下时,@{/css/style.css} 会生成 /myapp/css/style.css)。
推荐写法:
<link th:href="@{/css/style.css}" rel="stylesheet">
不推荐硬编码:
-
href="/css/style.css"—— 本地开发没问题,但部署到子路径(如 Tomcat 的 context-path)时会 404 -
href="css/style.css"—— iframe 场景下极易失效(路径被拼接到 iframe 当前 URL 后)
如果用了 Freemarker,需显式拼接上下文路径:${springMacroRequestContext.contextPath}/css/style.css。
为什么有时候 CSS 加载了但样式不生效
不是路径问题,而是缓存或 MIME 类型问题:
- 浏览器强缓存了旧版 CSS:加版本号或禁用缓存(开发期设
spring.resources.cache.period=0) - 服务器返回了错误的
Content-Type(如text/plain):确保文件后缀是.css,且未被其他配置拦截(比如 Spring Security 拦截了/css/**) - CSS 里引用了字体或图片,而这些资源路径写错了(例如
url(../fonts/icon.woff)在/css/style.css中实际要解析为/fonts/icon.woff,不是/css/../fonts/icon.woff)
最常被忽略的一点:Spring Boot 默认对 /static 下资源不做任何处理,但如果你自定义了 WebMvcConfigurationSupport 或重写了 addResourceHandlers,却没调用 super.addResourceHandlers(registry),静态资源注册会被完全覆盖——这时连 /css/style.css 都 404。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











