Windows und MacOS haben jetzt den Dunkelmodus.
Für CSS kann ich verwenden:
@media (prefers-dark-interface) {
color: white; background: black
}
Ich verwende jedoch die Stripe Elements-API, mit der Farben in JavaScript eingefügt werden
Zum Beispiel:
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
}
}
}
Wie kann ich das bevorzugte Farbschema des Betriebssystems in JavaScript erkennen?
javascript
macos-darkmode
Mikemaccana
quelle
quelle
window.matchMedia
@media (prefers-dark-interface)
Medienabfrage in Chrome 80 nicht zum Laufen bringen (wie Sie bereits erwähnt haben),@media (prefers-color-scheme: dark)
tat es aber.Antworten:
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { // dark mode }
So achten Sie auf Änderungen:
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', e => { const newColorScheme = e.matches ? "dark" : "light"; });
quelle
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) { console.log('changed!!');})
prefers-color-scheme: dark
dies in Edge nicht zu funktionieren scheint. Nicht in CSS oder Javasript.Laut MediaQueryList - Web-APIs | MDN ,
addListener
ist der richtige Weg , um die Änderung zu hören.addEventListener
funktioniert bei mir unter iOS 13.4 nicht.window.matchMedia('(prefers-color-scheme: dark)').addListener(function (e) { console.log(`changed to ${e.matches ? "dark" : "light"} mode`) });
quelle
Sie können die CSS- Medienabfragen direkt mit Javascript überprüfen
Um zu überprüfen, ob die Medienabfrage wahr ist, kann die
matches
Eigenschaft verwendet werden// 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) }
Um das Farbschema dynamisch zu aktualisieren, wenn der Benutzer seine Präferenz ändern würde, kann Folgendes verwendet werden:
function setColorScheme(scheme) { switch(scheme){ case 'dark': // Dark break; case 'light': // Light break; default: // Default break; } } function getPreferredColorScheme() { 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())); }
quelle