Desarrollo web

Botó de canvi de mode dia/nit: estètica i experiència d''usuari

El mode nit/dia millora la primera impressió, evita la fatiga visual i funciona

4 min de lectura

L'estètica visual: atracció instantània

Augmenta l'atractiu

Una web visualment atractiva és el somni de qualsevol negoci. Amb el mode nit/dia (l'interruptor que canvia l'aspecte del lloc segons l'hora), la teva pàgina s'adapta a les preferències de qui la visita, faci dia o faci nit. Aquesta versatilitat atrau l'atenció de seguida i millora la primera impressió.

L'impacte en l'experiència d'usuari

Personalització i comoditat

La personalització és la clau d'una experiència d'usuari excepcional. En oferir el canvi de mode visual, dones el control als teus visitants: s'adapten el lloc a les seves necessitats i s'hi estan a gust.

Evitar la fatiga visual

A la nit, la llum intensa de les pantalles cansa la vista. El mode nit redueix la llum blava, alleuja la tensió ocular i fa el contingut més llegible.

Optimització per a dispositius mòbils

Adaptabilitat en tot moment

La majoria d'usuaris hi accedeixen des del mòbil. Amb un sol botó pots oferir el canvi entre modes i garantir que la web llueixi bé a qualsevol pantalla i a qualsevol hora.

Implementació pràctica

Accés fàcil

La senzillesa és la clau. Integrar aquest botó a la teva pàgina és fàcil i eficient, i et permet ajustar el disseny a les preferències de cada usuari.

Tendència actual

Estar a l'avantguarda de les tendències web és imprescindible. Oferir aquesta funcionalitat demostra que el teu lloc no només és modern: també es compromet amb una experiència d'usuari excel·lent.

Exemple d'un botó personalitzat de canvi de mode dia/nit

Aquest és el codi que faig servir en un dels meus projectes amb Coreframeworks. Si administres WordPress i vols injectar codi sense tocar el tema, tens una guia a Com eliminar elements del menú d'administració de WordPress amb Code Snippets. I per ordenar i ocultar opcions del tauler, hi ha Adminimize: personalitza el tauler de WordPress.

HTML

<div class="theme-switch">
  <span id="lightModeText">CLARO</span>
  <input type="checkbox" class="checkbox" id="checkbox">
  <label for="checkbox" class="checkbox-label">
    <svg id="moonSvg" class="moon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white" width="24" height="24">
      <!-- Círculo exterior representando la luna -->
      <circle id="outerCircle" cx="12" cy="12" r="8"/>
      <!-- Círculo interior para simular el contorno -->
      <circle id="innerCircle" cx="19" cy="10" r="7" fill="var(--bg-body-l-1)"/>
    </svg>
    <svg class="sun" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="yellow" width="24" height="24">
      <circle cx="12" cy="12" r="8" />
    </svg>
    <span class="ball"></span>
  </label>
  <span id="darkModeText">OSCURO</span>
</div>

L'estructura té els dos textos (CLARO i OSCURO), una casella de verificació oculta i dues imatges SVG (gràfics vectorials): el sol i la lluna. La bolita és el cercle que llisca d'un costat a l'altre quan cliques.

CSS

<style>

.theme-switch {
  display: flex;
  align-items: center;
}

.theme-switch #lightModeText {
  font-size: 14px;
  letter-spacing: 2px;
  color: var(--bg-body-d-2); /* Color predeterminado para el modo claro */
  margin-top: -6px;
  margin-right: 10px;
  margin-left: 10px; /* Ajusta el espacio entre los textos y el interruptor */
}

.theme-switch #darkModeText {
  font-size: 14px;
  letter-spacing: 2px;
  color: var(--bg-body-d-2); /* Color predeterminado para el modo claro */
  margin-top: -6px;
  margin-right: 10px;
  margin-left: 10px; /* Ajusta el espacio entre los textos y el interruptor */
}

.checkbox {
  opacity: 0;
  position: absolute;
}

.checkbox-label {
  background-color: var(--bg-body-l-5);
  width: 50px;
  height: 26px;
  border-radius: 50px;
  position: relative;
  padding: 5px;
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.cf-theme-dark .checkbox-label {
  background-color: var(--bg-body-l-2); /* Fondo gris oscuro para la luna */
}

.cf-theme-light .checkbox-label {
  background-color: var(--bg-body-l-5); /* Fondo gris claro para el sol */
}

.moon {fill: #fff;}
.sun {fill: #f39c12;}

.checkbox-label .ball {
  background-color: #ddd;
  width: 22px;
  height: 22px;
  position: absolute;
  left: 2px;
  top: 2px;
  border-radius: 50%;
  transition: transform 0.2s linear;
}

.checkbox:checked + .checkbox-label .ball {
  transform: translateX(24px);
}

/* Cambios de color de texto según el tema activo */
.cf-theme-light #lightModeText {
  color: var(--text-body);
  font-weight: 700;
}
.cf-theme-dark #lightModeText {
  color: var(--bg-body-l-5);
  font-weight: 300;
  }


.cf-theme-light #darkModeText {
    color: var(--bg-body-d-5);
    font-weight: 300;
  }
.cf-theme-dark #darkModeText {
  color: var(--text-body);
  font-weight: 700;
}

</style>

El CSS dona forma d'interruptor a la pastilla, la mou quan marques la casella i canvia els colors del text segons el tema actiu.

JS

<script>
const checkbox = document.getElementById("checkbox");
const htmlElement = document.documentElement;
const themeText = document.getElementById("themeText"); // Nuevo elemento de texto

checkbox.addEventListener("change", () => {
  if (checkbox.checked) {
    // Si el checkbox está marcado (luna), aplica el tema oscuro
    htmlElement.classList.remove("cf-theme-light");
    htmlElement.classList.add("cf-theme-dark");
    innerCircle.style.fill = "var(--bg-body-l-2)";
    themeText.textContent = "Modo OSCURO";

  } else {
    // Si el checkbox no está marcado (sol), aplica el tema claro
    htmlElement.classList.remove("cf-theme-dark");
    htmlElement.classList.add("cf-theme-light");
    innerCircle.style.fill = "var(--bg-body-l-2)";
    themeText.textContent = "Modo CLARO";

  }
});

</script>

El JavaScript (el codi que s'executa al navegador) escolta el canvi de la casella: si està marcada, activa el tema fosc; si no, el clar. Cada vegada que alternes, la pàgina sencera canvia d'aspecte sense recarregar res.