在创建这个网站之前,我曾见过一个把 Butterfly 卡片改出毛玻璃质感的网站。最近我也想尝试类似的效果,发现这其中最大的难点居然是找到各种卡片的 CSS 类。如果只是单独修改一个类而不是整个类群的话,效果就不会应用到全部地方。我想作者在设计时应该考虑到所有卡片颜色,因此有一个专门的代码。
关于每个卡片的模糊程度,可以直接将导航栏的 blur(7px) 作为基本参考,这样能确保所有地方的模糊程度都是一致的:
1 2 3 4
| .cardHover, .type-404 .error-content, .layout > div:first-child:not(.nc), #recent-posts .recent-post-item, #article-container .shuoshuo-item, #aside-content .card-widget, .layout .pagination > *:not(.space) { background: transparent; backdrop-filter: blur(7px); }
|
这段代码的类是从控制台的 CSS 提取的,原理是让所有卡片的背景颜色都设置了透明,最后给每个卡片的模糊设置为 7px。但是我发现这样做会出现一个大问题,如果我们处于暗色模式下,没有基础颜色的毛玻璃会让卡片和漆黑的背景糊成一团,因为暗色模式下卡片没有阴影边界,但如果为此硬加一条白边反而破坏了原有的主题和谐。说实话这个模糊功能我还真挺想要的,但只能委屈一下暗色模式的朋友们了(包括我):
1 2 3 4 5 6
| @media (prefers-color-scheme: light) { .cardHover, .type-404 .error-content, .layout > div:first-child:not(.nc), #recent-posts .recent-post-item, #article-container .shuoshuo-item, #aside-content .card-widget, .layout .pagination > *:not(.space) { background: transparent; backdrop-filter: blur(7px); } }
|
上面这段的 CSS 代码 @media (prefers-color-scheme: light) 使得毛玻璃卡片仅在浏览器设置为亮色主题时生效,但这样终究只能是掩耳盗铃。况且,就算是在亮色模式下,如果不注意阴影的话,卡片和背景也是糊成一团,这也是之前那个网站的效果。后来,经过几天下来的折腾,有一次我不小心把光标放到了导航栏上,居然不小心得到了主题作者最初为了模糊设计的十六位色,于是便有了下面这段新代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| .cardHover, .type-404 .error-content, .layout > div:first-child:not(.nc), #recent-posts .recent-post-item, #article-container .shuoshuo-item, #aside-content .card-widget, .layout .pagination > *:not(.space) { backdrop-filter: blur(7px); }
@media (prefers-color-scheme: light) { .cardHover, .type-404 .error-content, .layout > div:first-child:not(.nc), #recent-posts .recent-post-item, #article-container .shuoshuo-item, #aside-content .card-widget, .layout .pagination > *:not(.space) { background: #FFFFFFB3; } }
@media (prefers-color-scheme: dark) { .cardHover, .type-404 .error-content, .layout > div:first-child:not(.nc), #recent-posts .recent-post-item, #article-container .shuoshuo-item, #aside-content .card-widget, .layout .pagination > *:not(.space) { background: #121212CC; } }
|
第一部分是让所有的卡片保持 7px 的模糊,第二部分是让卡片在亮色模式下颜色为 #FFFFFFB3,第三部分是让卡片在暗色模式下颜色为 #121212CC。这两个都是有 A 通道的十六位色,它们本来就定义了透明度,不需要再为卡片写 transparent。
现在我便不再需要焦虑卡片和背景混合的事情了,暗色模式下的小伙伴也可以看到这些若隐若现的毛玻璃效果(如果没有效果,记得清理缓存),重点是它一点也不干扰网站原本的扁平化设计语言!接下来只需要修改 Butterfly 的主题配置文件应用它,使其生效:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| inject: head: - <meta name="msvalidate.01" content="418AEC41299D1A70760AD5404E9AD5CC" /> - <link rel="stylesheet" href="/assets/css/fonts.css"> - <link rel="stylesheet" href="/assets/css/svg.css"> - <link rel="stylesheet" href="/assets/css/description.css"> - <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/[email protected]/css/all.min.css"> - <link rel="stylesheet" href="/assets/css/pagination.css"> - <link rel="stylesheet" href="/assets/css/social.css"> - <link rel="stylesheet" href="/assets/css/align.css"> - <link rel="stylesheet" href="/assets/css/blur.css"> bottom: - <script src="/assets/js/reload.js"></script> - <script src="/assets/js/stroll.js"></script> - <script src="/assets/js/blindbox.js"></script> - <script src="/assets/js/fans.js"></script> - <script src="/assets/js/mourn.js"></script> - <script src="/assets/js/birthday.js"></script>
|
最后把网站上传到 Cloudflare Pages 完成更新:
1
| npm run backup && npm run build && npm run deploy
|
有时候答案就在眼前,可是我却没有注意到……