Criando um Interruptor de Modo Claro/Escuro com Variáveis CSS

Criando um Interruptor de Modo Claro/Escuro com Variáveis CSS

A personalização da interface para a preferência do usuário é uma grande vitória para a experiência do usuário. Aqui, vamos fornecer ao usuário um simples interruptor para alternar entre o modo escuro e o modo claro e também tentaremos lembrar sua preferência para visitas futuras.

Adicionando o CSS

Vamos adicionar propriedades personalizadas CSS, também conhecidas como variáveis CSS, que podemos referenciar e modificar em todo o documento.

Primeiro, adicionaremos nossas variáveis CSS de modo claro ou padrão à pseudo classe :root. Ela corresponde ao elemento raiz em sua árvore de documentos, geralmente a tag <html>. Usaremos :root porque queremos disponibilizar as variáveis globalmente.

:root {
  --primary-color: #302AE6;
  --secondary-color: #536390;
  --font-color: #424242;
  --bg-color: #fff;
  --heading-color: #292922;
}

Em segundo lugar, adicionaremos nossas variáveis CSS de modo escuro.

[data-theme="dark"] {
  --primary-color: #9A97F3;
  --secondary-color: #818cab;
  --font-color: #e1e1ff;
  --bg-color: #161625;
  --heading-color: #818cab;
}

Aqui, [data-theme="dark"] significa que estamos referenciando um atributo de dados chamado data-theme com um valor "dark".

Então, podemos referenciar essas variáveis em nossas folhas de estilo assim:

body {
  background-color: var(--bg-color);
  color: var(--font-color);
  /*outros estilos*/
}

h1 {
  color: var(--secondary-color);
  /*outros estilos*/
}

a {
  color: var(--primary-color);
  /*outros estilos*/
}

Adicionando o HTML “marcação de interruptor de alternância”

Essencialmente, é apenas uma caixa de seleção, no entanto, adicionaremos alguma marcação adicional para estilizá-la como um interruptor de alternância.

<div class="theme-switch-wrapper">
  <label class="theme-switch" for="checkbox">
    <input type="checkbox" id="checkbox" />
    <div class="slider round"></div>
  </label>
  <em>Ativar Modo Escuro!</em>
</div>

E aqui está um simples CSS para estilizá-lo como um interruptor de alternância:

.theme-switch-wrapper {
  display: flex;
  align-items: center;
  em {
    margin-left: 10px;
    font-size: 1rem;
  }
}

.theme-switch {
  display: inline-block;
  height: 34px;
  position: relative;
  width: 60px;
}

.theme-switch input {
  display:none;
}

.slider {
  background-color: #ccc;
  bottom: 0;
  cursor: pointer;
  left: 0;
  position: absolute;
  right: 0;
  top: 0;
  transition: .4s;
}

.slider:before {
  background-color: #fff;
  bottom: 4px;
  content: "";
  height: 26px;
  left: 4px;
  position: absolute;
  transition: .4s;
  width: 26px;
}

input:checked + .slider {
  background-color: #66bb6a;
}

input:checked + .slider:before {
  transform: translateX(26px);
}

.slider.round {
  border-radius: 34px;
}

.slider.round:before {
  border-radius: 50%;
}

E é isso! Agora você tem um interruptor de modo claro/escuro funcional em seu site.

Acesse a versão completa
Sair da versão mobile