Ok.. Tem um pouco de CSS envolvido?, mas foi muito mais fácil do que as respostas que encontrei na internet.
O que estou tentando alcançar?
Estou tentando conseguir duas coisas com este método.
Portanto, teremos um site que carregará o tema esperado pelo usuário e permitirá que ele o altere quando quiser.
Etapa 1: Criar botão para alternar
Estou usando uma imagem como botão que tem uma imagem SVG de uma lua. Você pode adicionar seu botão ou caixa de seleção que lhe pareça adequado para alternar entre duas opções.
Etapa 2: coloque os detalhes de suas cores em CSS como propriedades personalizadas
:root{ color-scheme: light dark; --light-bg: ghostwhite; --light-color: darkslategray; --light-code: tomato; --dark-bg: darkslategray; --dark-color: ghostwhite; --dark-code: gold; } .light{ color-scheme: light; } .dark{ color-scheme: dark; }
Ok.. Então, na raiz, você está vendo uma propriedade chamada esquema de cores e isso será nossa virada de jogo.
Como você pode ver, são necessários valores claros ou escuros. Também criei duas classes, .light e .dark, que definem o valor do esquema de cores como escuro ou claro.
Etapa 3: adicione cores a várias partes do seu código
body{ background-color: light-dark(var(--light-bg), var(--dark-bg)); }
Agora, sempre que uma propriedade solicitar uma cor (como plano de fundo, propriedades de cor), você pode usar a função chamada claro-escuro().
Esta função assume dois valores, o primeiro é usado quando o esquema de cores está definido como claro e o segundo é usado quando o esquema de cores está definido como escuro.
Sim... Esta é uma função lançada em maio de 2024. É relativamente nova, mas será adaptada em breve. E está no suporte básico no momento da redação deste artigo. Aqui estão os documentos para isso
Se você usar isso, o CSS detectará automaticamente a preferência do usuário no sistema operacional e definirá a cor desejada.
Atingimos nosso primeiro objetivo, o site carregará com o modo de cores já desejado pelo usuário em seu sistema operacional.
Etapa 4: use Javascript para alternar entre o modo claro e escuro
// mode is the toggle button mode.addEventListener("click", ()=>{ // we are getting the color scheme here let theme = document.documentElement.style.colorScheme; /* when a website is first loaded it will have null as its color-scheme value*/ if(theme == null){ // this window.matchMedia() checks if the user prefers the dark theme if(window.matchMedia("(prefers-color-scheme:dark)").matches){ /* if they prefer dark, clicking on our button should turn everything to light, the color-scheme will be given a value as light */ document.documentElement.style.colorScheme = "light"; } // Or else the color-scheme will be set to dark document.documentElement.style.colorScheme = "dark"; } /* Now since our toggle button set the color scheme, we can simply change light to dark and dark to light using below code */ else{ document.documentElement.style.colorScheme = (theme == "light")? "dark": "light"; } });
Aqui, document.documentElement.style.colorScheme na verdade se refere ao elemento :root do CSS.
Como já conseguimos abrir o site no modo preferido do usuário na etapa anterior, aqui quando o botão de alternância é clicado ele executa os seguintes trabalhos.
*PS: * Este é meu primeiro post e ainda sou iniciante em desenvolvimento web. Mas quando procurei por esse método, não vi nenhuma postagem relacionada a ele. Se você já sabe disso, sinto muito por clicar em atrair você? Achei que este post me ajudaria a lembrar desse processo toda vez que estiver trabalhando em um novo projeto.
Se você está trabalhando para que seu site funcione em navegadores antigos, esse método definitivamente não é para você. Conte-me nos comentários sobre este post. Obrigado pela leitura.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3