在微信小程序中实现深色/暗黑模式,虽然不能直接使用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(
180
deg);
// 不需要反转的,再反转回去比如:
图片等
img,
iframe,
.ntj-button--primary, .ntj-button--primary,
.invert-restore{
filter:invert(1)
hue-rotate(180deg);
}
.invert-restore{
// 嵌套反转
img{
filter: none;
}
}
}