Modo Claro/Oscuro

Ejercicio para practicar habilidades de HTML y CSS. Incorporamos el modo claro/oscuro teniendo en cuenta las preferencias del sistema sin framework.

Podés visitar el ejercicio que desarrollaremos aquí

💻 Ver explicación en video de youtube.

HTML

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="style.css">
    <title>Modo claro/oscuro</title>
</head>
<body>
    <input type="checkbox"  id="cambiar-color">
    <div class="contenedor-app">
        <header>
            <nav class="contenedor">
                <a href="#inicio" id="logo">🤖 LOGO</a>
                <ul class="opciones">
                    <li><a href="#inicio">inicio</a></li>
                    <li><a href="#productos">productos</a></li>
                    <li><a href="#contacto">contacto</a></li>
                </ul>
                <div class="iconos">
                    <label for="cambiar-color" id="sol">
                        <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="var(--color-texto)"><path d="M440-760v-160h80v160h-80Zm266 110-55-55 112-115 56 57-113 113Zm54 210v-80h160v80H760ZM440-40v-160h80v160h-80ZM254-652 140-763l57-56 113 113-56 54Zm508 512L651-255l54-54 114 110-57 59ZM40-440v-80h160v80H40Zm157 300-56-57 112-112 29 27 29 28-114 114Zm113-170q-70-70-70-170t70-170q70-70 170-70t170 70q70 70 70 170t-70 170q-70 70-170 70t-170-70Zm283-57q47-47 47-113t-47-113q-47-47-113-47t-113 47q-47 47-47 113t47 113q47 47 113 47t113-47ZM480-480Z"/></svg>
                    </label>
                    <label for="cambiar-color" id="luna">
                        <svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="var(--color-texto)"><path d="M480-120q-150 0-255-105T120-480q0-150 105-255t255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q55 0 101-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120Zm0-80q88 0 158-48.5T740-375q-20 5-40 8t-40 3q-123 0-209.5-86.5T364-660q0-20 3-40t8-40q-78 32-126.5 102T200-480q0 116 82 198t198 82Zm-10-270Z"/></svg>
                    </label>
                </div>
            </nav>
        </header>
        <main>
            <section id="inicio">inicio</section>
            <section id="productos">productos</section>
            <section id="contacto">contacto</section>
        </main>
        <footer></footer>
    </div>   
</body>
</html>

CSS

    :root{
        --color-fondo:#fff;
        --color-texto:#050505;
        --color-sombra: rgba(0,0,0,0.3);
        --color-resaltador:chartreuse;
    }
    @media(prefers-color-scheme: dark){
        .contenedor-app{
            --color-fondo:#050505;
            --color-texto:#fff;
            --color-sombra: rgba(255,255,255,0.3);
            --color-resaltador:orangered;
        }
        #cambiar-color:checked ~ .contenedor-app{
        --color-fondo:#fff;
        --color-texto:#050505;
        --color-sombra: rgba(0,0,0,0.3);
        --color-resaltador:chartreuse;
    }
    }
    @media(prefers-color-scheme: light){
        #cambiar-color:checked ~ .contenedor-app{
            --color-fondo:#050505;
            --color-texto:#fff;
            --color-sombra: rgba(255,255,255,0.3);
            --color-resaltador:orangered;
        }
    }

    *{
        margin: 0;
        padding: 0;
        box-sizing: border-box;
    }
    ::selection{
        background-color: var(--color-texto);
        color: var(--color-fondo);
    }
    html{
        scroll-behavior: smooth;
        scroll-padding-top: 5rem;
    }

    a{
        text-decoration: none;
        color: inherit;
    }
    ul{
        list-style: none;
    }
    body{
        font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
        font-size: 1.5rem;
    }
    #cambiar-color{
        display: none;
    }

    .contenedor-app{

        background-color: var(--color-fondo);
        color: var(--color-texto);
    }
    .contenedor{
        width: min(calc(100% - 32px), 1200px);
        margin: 0 auto;
        padding-block: 1.5rem;
    }
    header{
        position: sticky;
        top:0;
        right: 0;
        left: 0;
        box-shadow: 2px 2px 2px var(--color-sombra);
        background-color: var(--color-fondo);
    }


    header nav {
        display: flex;
        justify-content: space-between;
        align-items: center;
        position: relative;
    }
    header nav ul{
        display: flex;
        justify-content: center;
        gap:2rem;
        text-transform: capitalize;
    }

    section{
        min-height: 100vh;
        display: grid;
        place-items: center;
        text-transform: uppercase;
        font-size: 4rem;
        border-bottom: 5px solid var(--color-resaltador);
    }
    .iconos label{
        position: absolute;
        transform: translate(-100%,-50%);
        cursor: pointer;
    }
    #luna{
        visibility: hidden;
        opacity: 0;
    }
    #cambiar-color:checked ~ .contenedor-app .iconos #sol{
        visibility: hidden;
        opacity: 0;
    }
    #cambiar-color:checked ~ .contenedor-app .iconos #luna{
        visibility: visible;
        opacity: 1;
    }

Recursos

Íconos sol y luna : https://fonts.google.com