Quarto 图片居中样式
1 总结
若希望在 Quarto Website 中实现:
- 使用 rem 控制图片宽度
- 交叉引用悬浮预览正常显示
- 图片居中
- 图片标题居中
可采用以下方案。
1.1 第一步:外部 CSS
.quarto-float.quarto-figure.quarto-figure-center.anchored {
width: 100% !important;
}并在 _quarto.yml 中挂载:
format:
html:
css:
- path/to/style.css1.2 第二步:页面级 Internal CSS
在页面最上方 (yaml块的下方) 添加 <style> 标签:
<style>
figcaption {
text-align: center;
}
</style>1.3 第三步:图片行内样式
{#fig-a style="width:20rem;"}
{#fig-b style="width:15rem;"}本文即采用上述方案实现,点击页面右上角
</> 代码可查看完整源代码。
下面是具体实现过程:
2 图片大小控制
2.1 传统方法
在 Quarto Website 撰写过程中,最初,我通过 Quarto 内置的 width 属性控制图片大小:
{#fig-title width="15%"}这种方式简洁直观,无需额外编写 style="width:15%" 等行内样式,显示效果也较为理想。
2.2 问题1:引用悬浮预览异常
在正文中使用交叉引用(如 @fig-title)后,我发现图片悬浮预览会继承 width 百分比设置,导致预览显示异常。
为了解决这个问题,我尝试改用 rem 作为图片宽度单位,以兼顾页面缩放和悬浮预览。
首先尝试:
{#fig-title width="7rem"}但并未生效,因为 Quarto 的 width 属性不支持 rem 单位(支持 px、百分比等)。
随后改为:
{#fig-title style="width:7rem;"}2.3 问题2:图片无法居中
新的问题随之出现:图片不再居中,即使设置 {fig-align="center"} 也无效。
使用浏览器 DevTools 排查后发现,设置 style="width:7rem" 时,Quarto 会同步将父容器宽度限制为 7rem。
移除父容器宽度限制后,图片即可重新居中。
期间我还尝试过多种方案,例如:
# 尝试1
:::{#fig-title width="100%"}
{style="width:7rem;"}
图片标题
:::
# 尝试2
:::{#fig-title style="width:100% !important;"}
{style="width:7rem;"}
:::
# 尝试3
:::{#fig-title style="text-align:center; width:100% !important;"}
{style="width:7rem;"}
图片标题
:::
# ...但都未达到理想效果。
最终,我决定直接修改 css 样式,在 style.css 里添加了针对父容器的设置:
.quarto-float.quarto-figure.quarto-figure-center.anchored {
width: 100% !important;
}再配合图片设置:
{#fig-title style="width:7rem;"}成功实现图片居中的同时,引用悬浮预览正常:
3 图片和标题同时居中
解决图片居中后,图片标题仍然默认左对齐。
虽然 Quarto 提供了 fig-cap-location 属性,可将标题放置在 top 、 bottom 或 margin ,但无法控制标题对齐方式。
经过测试,最简单的方案是在图片样式中直接设置:
# 方法1
{#fig-title style="text-align:center; width:7rem;"}该方案无需额外容器,也无需拆分标题。
其他可行方案如下:
# 方法2
:::{#fig-title fig-cap="此处写标题"}
{style="text-align:center; width:7rem;"}
:::
# 方法3
:::{#fig-title}
{style="text-align:center; width:7rem;"}
<注意此处必须空一行>
图片标题
:::相比之下,方法1语法最简洁,代码高亮效果也最好;方法2和方法3不仅结构更复杂,还增加了额外的容器层级。
如果希望当前页面所有图片标题均居中,则可直接添加 Internal CSS:
<style>
figcaption {
text-align: center;
}
</style>对应图片写法保持不变:
{#fig-title style="width:7rem;"}






