Switchmode
10/04/2020
Usando apenas CSS para alterar um tema

O modo escuro (dark mode) está sendo incluído cada vez mais nas aplicações, seja para economizar a bateria dos aparelhos, para agradar os olhos de quem já está cansado de olhar para telas brilhantes ou apenas para melhorar o visual da aplicação.

Quer fazer isso na sua aplicação usando apenas CSS? Aqui você encontra um material de boa qualidade sobre o tema e a seguir apresento um exemplo do código e de como ele funciona.

<style>
    :root {
        /* Modo Claro*/
        --light-switch-shadow: #171332;
        --light-switch-icon: "?";
        --light-switch-text: "modo escuro?";
        --light-text: #2a5d67;
        --light-bg: #eeeeee;
        --light-theme: #4ae3b5;

        /* Modo Escuro */
        --dark-switch-shadow: #f78536;
        --dark-switch-icon: "☀️";
        --dark-switch-text: "modo claro?";
        --dark-text: #dfebed;
        --dark-bg: #2b4450;
        --dark-theme: #497285;

        /* Modo Padrão (Claro) */
        --switch-shadow-color: var(--light-switch-shadow);
        --switch-icon: var(--light-switch-icon);
        --switch-text: var(--light-switch-text);
        --text-color: var(--light-text);
        --bg-color: var(--light-bg);
        --theme-color: var(--light-theme);
    }

    /* Trocando o modo quando o checkbox é marcado */
    .theme-switch:checked~#pagina {
        --switch-shadow-color: var(--dark-switch-shadow);
        --switch-icon: var(--dark-switch-icon);
        --switch-text: var(--dark-switch-text);
        --text-color: var(--dark-text);
        --bg-color: var(--dark-bg);
        --theme-color: var(--dark-theme);
    }

    /* Theme switcher */
    /* ocultar o checkbox */
    .theme-switch {
        position: absolute !important;
        height: 1px;
        width: 1px;
        overflow: hidden;
        clip: rect(1px, 1px, 1px, 1px);
    }

    .switch-label {
        cursor: pointer;
        display: flex;
    }

    .switch-label::before {
        content: var(--switch-icon);
        font-size: 20px;
        transition: text-shadow .2s;
    }

    .switch-label::after {
        align-self: center;
        content: var(--switch-text);
        color: var(--switch-shadow-color);
        font-size: 20px;
        line-height: 20px;
        opacity: 0;
        padding-left: 15px;
        transition: opacity .2s;
    }

    .theme-switch:focus~#pagina .switch-label::before,
    .switch-label:hover::before {
        text-shadow: 0 0 15px var(--switch-shadow-color);
    }

    .theme-switch:focus~#pagina .switch-label::after,
    .switch-label:hover::after {
        opacity: 1;
    }

    #pagina {
        border: 1px solid #ccc;
        border-radius: 15px;
        background: var(--bg-color);
        color: var(--text-color);
        font: normal 125%/1.4 Georgia, 'Times New Roman', Times, serif;
        min-height: 100%;
        transition: color .2s, background-color .2s;
    }

    #conteudo {
        margin: auto;
        padding: 20px;
    }

    #pagina a {
        color: var(--theme-color);
    }
</style>

<input type="checkbox" class="theme-switch" id="theme-switch" />

<div id="pagina">
    <div id="conteudo">

        <label for="theme-switch" class="switch-label"></label>

        <h1>Título</h1>
        <p>Texto Texto Texto</p>
        <a href="#">Link</a>

    </div>
</div>

Título

Texto Texto Texto

Link

Clique no emoji para alterar o tema.


O código original você encontra aqui: https://github.com/alexandersandberg/theme-switcher

Quer ver algumas combinações legais de cores? Se liga: https://colorsinspo.com/
E os emojis você encontra aqui: https://emojipedia.org/

Postagens relacionadas
Usando JQuery para alterar tema no Bootstrap Ver

Muitas aplicações possuem a opção de alterar o tema, geralmente indo de um modo claro para um modo escuro (dark mode). Isso pode servir para economizar a bateria dos dispositivos, para melhorar o estilo da aplicação ou até para agradar os olhos de quem já está cansado de olhar para aplicações claras demais. Há diversas formas de […]

Gerador de gradiente Ver

Selecione duas cores e clique na direção que deseja gerar um gradiente. 😀 Selecione a primeira cor Selecione a segunda cor Cor 1 Gostou? Caso queira ajuda e mais opções para trabalhar com gradientes, acesse os links:– https://www.w3schools.com/cssref/func_linear-gradient.asp– https://stackoverflow.com/questions/15071062/using-javascript-to-edit-css-gradient– https://webgradients.com/– https://mycolor.space/

Gerador de cores Ver

Clique no botão para receber uma paleta de cores aleatória. 😀 gerar Cor 1 Cor 2 Cor 3 Cor 3 Cor 3 Cor 3 Um trecho usado neste gerador, teve como base o código disponível aqui.