本文档记录了如何在 Quartz 中实现多张图片在同一行并排显示的自定义修改。
需求描述
在某些场景下(如对比图、步骤图),我们需要将两张或多张图片水平排列,而不是默认的垂直堆叠。同时需要保证在手机等窄屏设备上能够自动切换为垂直布局。
使用方法
在 Markdown 中,使用 <div class="image-row"> 标签包裹图片。
注意为了确保 Quartz 能正确解析图片语法,请务必在 HTML 标签和图片 Markdown 语法之间保留空行。
<div class="image-row">
![[image1.png]]
![[image2.png]]
</div>CSS 实现
在 quartz/styles/custom.scss 中添加了以下样式:
// 图片并排显示容器
.image-row {
display: flex;
flex-direction: row;
justify-content: center;
gap: 1rem; // 图片间的间距
margin: 1.5rem 0; // 容器上下间距
align-items: flex-start;
// 手机端自适应:宽度小于 600px 时改为垂直排列
@media all and (max-width: 600px) {
flex-direction: column;
align-items: center;
}
// 处理图片包裹容器(如 p, a 等)
& > * {
margin: 0 !important;
flex: 1;
display: flex;
justify-content: center;
max-width: calc(50% - 0.5rem); // 默认为两列布局
@media all and (max-width: 600px) {
max-width: 100%;
width: 100%;
}
// 兼容某些 Markdown 渲染器自动生成的 p 标签
p {
margin: 0;
width: 100%;
display: flex;
justify-content: center;
}
}
// 图片本身样式
img {
display: block;
margin: 0 !important;
max-width: 100%;
height: auto;
border-radius: 8px;
}
}实现原理
- Flexbox 布局: 使用
display: flex轻松实现水平排列,并利用gap控制间距。 - 子元素约束: 通过
& > *选中直接子元素,设置max-width: calc(50% - 0.5rem)确保两张图片平分宽度。 - 响应式设计: 使用
@media查询,在小屏幕上将flex-direction切换为column,使图片恢复为垂直堆叠,避免图片过小。 - Markdown 兼容性: 增加了对
p标签的处理,因为 Quartz (基于 Rehype/Remark) 有时会将孤立的图片包裹在段落标签中。