Windows et macOS ont désormais un mode sombre.
Pour CSS, je peux utiliser:
@media (prefers-dark-interface) {
color: white; background: black
}
Mais j'utilise l'API Stripe Elements, qui met les couleurs en JavaScript
Par exemple:
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
}
}
}
Comment puis-je détecter le jeu de couleurs préféré du système d'exploitation en JavaScript?
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
// dark mode
}
Vous pouvez vérifier le CSS Media-Queries directement avec Javascript
La méthode window.matchMedia () renvoie un objet MediaQueryList représentant les résultats de la chaîne de requête multimédia CSS spécifiée. La valeur de la méthode matchMedia () peut être n'importe laquelle des fonctionnalités multimédias de la règle CSS @media, comme min-height, min-width, orientation, etc.
Pour vérifier si la Media-Query est vraie, la propriété matches
peut être utilisée
// 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)
}
Pour mettre à jour le schéma de couleurs de manière dynamique si l'utilisateur change sa préférence, les éléments suivants peuvent être utilisés:
function setColorScheme(scheme) {
switch(scheme){
case 'dark':
// Dark
break;
case 'light':
// Light
break;
default:
// Default
break;
}
}
function getPreferedColorScheme() {
if (window.matchMedia) {
if(window.matchMedia('(prefers-color-scheme: dark)').matches){
return 'dark';
} else {
return 'light';
}
}
return 'light';
}
if(window.matchMedia){
var colorSchemeQuery = window.matchMedia('(prefers-color-scheme: dark)');
colorSchemeQuery .addEventListener('change', setColorScheme(getPreferedColorScheme()));
}