在深色模式下自动切换 SVG 的颜色
在之前的几何相关的文章中,我把图片格式从 png/webp 切换到了 svg,这样得到的图片更清晰,而且还可以无损缩放,但图片大小反而更小。
具体的工作流程如下:
graph LR
A(TikZ) --> |lualatex| B([PDF])
B --> |pdftoppm| E([PNG]) --> |cwebp| F(WebP)
B --> |pdf2svg| C([SVG]) --> |svgo| D(minified SVG)
以上一篇文章中的第一个图片为例,得到的图片大小如下:
格式 | 大小 |
---|---|
PNG | 19371 |
WebP | 10610 |
SVG | 14389 |
minified SVG | 5798 |
可以看到,生成的 svg 图片大小介于 png 和 webp 之间,而使用 svgo 精简过的 svg 图片大小最小。
但是这里面有一个问题。pdf2svg 生成的 svg 图片的背景是透明的,在浅色模式下一切都正常,但是在深色模式下,图形里面的线段和标记依然是黑色的,根本看不清。
之前的解决方法是把 svg 变为白色背景,这能解决看清楚的问题,但是在暗色模式下不是很协调。另外,在浅色模式的 note 中也比较突兀。
最近在 stackoverflow 上找到了新的解决办法,就是利用 css 让 svg 图片在暗色模式下自动反色。
首先,在 source/_data/styles.styl
中添加如下配置:
1 | @media (prefers-color-scheme: dark) { |
然后在文章中引入 svg 图片的时候,指定为 svg 类:
1 | {.svg} |
这样加载的 svg 图片在暗色模式下会自动反色,就能够看清楚了。