深色模式
无需th:fragment引用片段
得益于「标记选择器(Markup Selector)」的强大能力,我们甚至可以引入没有定义 th:fragment 属性的内容片段——哪怕这段代码来自完全不了解 Thymeleaf 的其他应用,也能轻松复用。
html
<!-- footer.html 中的原生 HTML 片段(无 th:fragment) -->
<div id="copy-section">
© 2011 The Good Thymes Virtual Grocery
</div>无需修改原代码,直接通过 id 选择器(#copy-section)引用这段片段,语法和 CSS 选择器完全一致:
html
<body>
<!-- 页面主体内容 -->
...
<!-- 引用 footer.html 中 id 为 copy-section 的元素 -->
<div th:insert="~{footer :: #copy-section}"></div>
</body>核心说明
- 选择器类型:除了
id选择器(#xxx),还支持 CSS 风格的其他选择器:- 类选择器:
footer :: .copyright(引用footer.html中 class 为copyright的元素); - 标签选择器:
footer :: div(引用footer.html中所有div元素); - 复合选择器:
footer :: div#copy-section.copyright(id 为copy-section且 class 为copyright的div)。
- 类选择器:
- 无侵入性:无需给原代码添加任何 Thymeleaf 专属属性(如
th:fragment),即可复用第三方/原生 HTML 代码,极大提升灵活性; - 简化写法:依然可以省略片段表达式的
~{}包裹符,简写为:html<div th:insert="footer :: #copy-section"></div>
实用价值
这种方式特别适合以下场景:
- 复用老旧系统/第三方提供的 HTML 代码(无需改造原代码);
- 快速复用页面中未提前定义
th:fragment的局部内容; - 拆分大型静态 HTML 页面为可复用的片段,无需重构原代码结构。
总结
- 借助标记选择器,可直接引用无
th:fragment的 HTML 片段,选择器语法兼容 CSS 风格(id、class、标签等); - 核心语法为
~{模板名 :: 选择器}(如footer :: #copy-section),无需修改原代码,无侵入性; - 该特性让 Thymeleaf 能复用任意原生 HTML 代码,大幅提升模板复用的灵活性。
