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.