在微信小程序中实现深色/暗黑模式,虽然不能直接使用CSS的
filter属性(如invert())来全局反转颜色(因为这会导致图片、图标等非文本内容也发生反转,影响用户体验),但是,把不需要反转的,在反转过来。或者用js,给想要反转的,加上反转样式,再对其他的做微调。这样个人觉得,开发成本是最低的。如下代码:
@media (prefers-color-scheme: dark) {
//one
.app{
filter: invert(1) hue-rotate(180deg);
img,button,.active {
//filter: brightness(.8) contrast(1.2);
filter: invert(1) hue-rotate(180deg);
}
}
//two
div:not(.no-invert){
filter: invert(1) hue-rotate(180deg);
}
//three
:not(img) { filter: invert(100%) hue-rotate(180deg); }
}
如果是自己定义类可以这样写:
.dark-mode { filter: invert(1) hue-rotate(180deg); // 不需要反转的,再反转回去比如:图片等 img, iframe, .ntj-button--primary, .ntj-button--primary, .invert-restore{ filter:invert(1)hue-rotate(180deg); } .invert-restore{ // 嵌套反转 img{ filter: none; } }}



