之前采用的是 waterfall.jsimgStatus.js 方案,明显的一个弊端是得所有图片完全加载之后才会显示为瀑布流布局。

现已改用 column-countp:has(> img:nth-child) 的纯 CSS 方案,代码少得不得了!

缺点呢,图片是从上往下、从左往右顺序排列,会导致各列高度明显不一致。试用之后,可以接受!

效果如下

两张

三张

四张

更多图片横竖随机

同样会出现各列高度不一致的情况,但可以接受。

突破文章宽度,全屏展示图片

结合 Hugo 短代码实现(已人工调顺序,所以整齐了)。

折腾三步曲

编辑器内如下格式插入图片即可

图片之间 可以换行但不空行 ,这样 CSS 会匹配到 p 元素内有几个 img 标签,就显示几列一行。

提醒,图片少的时候一般都是横的和横的一行,竖的管竖的。当然,如果多了,也可以不管不顾,随便排。

TinySnap-2023-08-24-17.08.16

相关 CSS 丢入主题

其中 .post-content 需匹配自己主题。

.post-content p:has(> img:nth-child(2)){column-count:2;column-gap:8px;margin:6px 0;}
.post-content p:has(> img:nth-child(3)){column-count:3;}
.post-content p:has(> img:nth-child(4)){column-count:4;}
.post-content p:has(> img:nth-child(5)){column-count:5;}
.post-content p:has(> img:nth-child(6)){column-count:4;}
.post-content p:has(> img:nth-child(2)) img{display:inherit;}
.post-content p:has(> img:nth-child(6)) img{margin-bottom:8px;}

进阶全屏图片短代码模版和 CSS

可跳过。因为仅适合单栏主题。

其中的 490px 是这样计算出来的,主题的文章宽度为 960px,所以:960/2 + 10

短代码模板:shortcodes/fullscreen.html

相关 CSS:

.fullscreen{margin-left:calc(490px - 50vw);width:calc(100vw - 20px);column-count:4;column-gap:6px;}
.fullscreen img{display:inherit;margin-bottom:8px;}
@media (max-width: 980px){
	.fullscreen{margin-left: 0;width:auto;column-count:3;}
}

文章内容调用格式如图:

TinySnap-2023-08-24-17.33.04