Um recurso de dispositivo e aplicativo que passei a apreciar é a capacidade de alternar entre os modos claro e escuro. Se o senhor já fez codificação ou leitura até tarde da noite, sabe como um tema escuro pode ser incrível para evitar o cansaço visual e as dores de cabeça resultantes. O macOS implementou recentemente um modo escuro nativo, mas esse modo não converte os sites em uma interface escura, de modo que o usuário continua a ter um site claro, independentemente do tema nativo. Não seria incrível se os sites também ficassem escuros ou claros com base na preferência do sistema do usuário?

O grupo de trabalho do CSS concorda, e é por isso que eles criou um prefers-color-scheme consulta de mídiauma consulta de mídia que sinaliza qual é a preferência de tema do usuário e permite que o senhor codifique seu site para corresponder a essa preferência!

O prefers-color-scheme tem dois valores efetivos que podem ser especificados: light e dark:

/* Light mode */
@media (prefers-color-scheme: light) {
    html {
        background: white;
        color: black;
    }
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
    html {
        background: black;
        color: white;
    }
}

Juntamente com o design padrão do site, o senhor poderia oferecer três designs diferentes: padrão (no-preference), modificações claras e modificações escuras.

Para facilitar o gerenciamento das cores em cada modo, o senhor pode simplesmente modificar as variáveis CSS dentro da consulta de mídia:

/* Defaults */
:root {
    --color-scheme-background: pink;
    --color-scheme-text-color: red;
}

/* Light mode */
@media (prefers-color-scheme: light) {
    :root {
        --color-scheme-background: white;
        --color-scheme-text-color: black;
    }
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
    :root {
        --color-scheme-background: black;
        --color-scheme-text-color: white;
    }
}

/* Usage */
html {
    background: var(--color-scheme-background);
    color: var(--color-scheme-text-color);
}

Se quiser usar o JavaScript para saber qual modo o usuário prefere, pode fazer isso facilmente com obtendo um valor de variável CSS:

html {
    content: ""; /* (ab)using the content property */
}

/* Light mode */
@media (prefers-color-scheme: light) {
    html {
        content: "light"; /* (ab)using the content property */
    }
}

/* Dark mode */
@media (prefers-color-scheme: dark) {
    html {
        content: "dark"; /* (ab)using the content property */
    }
}
const mode = getComputedStyle(document.documentElement).getPropertyValue('content');

// mode: "dark"

Estou satisfeito com a existência de uma consulta de mídia oficial para preferência de cor/tema. Como alguém que sofre de pequenas dores de cabeça a enxaquecas que entorpecem o crânio, minha preferência é sempre por um tema escuro e aprecio os aplicativos que fazem um esforço extra para me proporcionar uma experiência de usuário indolor. Já usamos media queries para acomodar impressão e diferentes tamanhos de viewport, então vamos dar um passo a mais para fornecer cores com base na preferência do usuário!

Observação: no momento da publicação, somente o Safari Preview 68 implementou essa consulta de mídia. Acompanhe Bugzilla bug 1494034 para saber o status de suporte do Firefox.