Windows和macOS现在有黑暗模式。
对于CSS,我可以使用:
@media (prefers-dark-interface) {
color: white; background: black
}
但是我使用的是Stripe Elements API,它把颜色放在JavaScript中
例如:
const stripeElementStyles = {
base: {
color: COLORS.darkGrey,
fontFamily: `-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"`,
fontSize: '18px',
fontSmoothing: 'antialiased',
'::placeholder': {
color: COLORS.midgrey
},
':-webkit-autofill': {
color: COLORS.icyWhite
}
}
}
如何在JavaScript中检测操作系统的首选配色方案?
你可以直接用JavaScript检查CSS Media-Queries
window.matchMedia()方法返回一个MediaQueryList对象
表示指定CSS媒体查询字符串的结果。的
的任何媒体特性
CSS @media规则,如min-height, min-width, orientation等。
要检查Media-Query是否为真,可以使用matches属性
// Check to see if Media-Queries are supported
if (window.matchMedia) {
// Check if the dark-mode Media-Query matches
if(window.matchMedia('(prefers-color-scheme: dark)').matches){
// Dark
} else {
// Light
}
} else {
// Default (when Media-Queries are not supported)
}
要根据用户的偏好动态更新配色方案,可以使用以下方法:
function setColorScheme(scheme) {
switch(scheme){
case 'dark':
console.log('dark');
break;
case 'light':
console.log('light');
// Light
break;
default:
// Default
console.log('default');
break;
}
}
function getPreferredColorScheme() {
if (window.matchMedia) {
if(window.matchMedia('(prefers-color-scheme: dark)').matches){
return 'dark';
} else {
return 'light';
}
}
return 'light';
}
function updateColorScheme(){
setColorScheme(getPreferredColorScheme());
}
if(window.matchMedia){
var colorSchemeQuery = window.matchMedia('(prefers-color-scheme: dark)');
colorSchemeQuery.addEventListener('change', updateColorScheme);
}
updateColorScheme();