CodeForge

Maquetación Web Dinámica / JavaScript para maquetadores: darle vida al DOM

classList: el interruptor de estilos

Teoría18 min20 XP

Si tuvieras que aprender UN solo patrón de interactividad, sería este: JavaScript agrega o quita una CLASE, y el CSS hace todo lo visual. Un menú que se abre, un tema oscuro, una pestaña activa, un modal que aparece — casi todos son "poner o quitar una clase". classList es ese interruptor, y dominarlo es dominar el 80% de la interfaz.

El llavero de etiquetas

Los cuatro métodos

classlist.js
// AGREGAR una clase (si ya está, no pasa nada)
menu.classList.add("abierto");

// QUITARLA
menu.classList.remove("abierto");

// ALTERNARLA: la pone si falta, la quita si está. Devuelve true/false
const estaAbierto = menu.classList.toggle("abierto");

// PREGUNTAR si la tiene
if (menu.classList.contains("abierto")) { /* ... */ }

toggle es la estrella: una sola línea abre y cierra, enciende y apaga. Y DEVUELVE si la clase quedó puesta (true) o quitada (false) — perfecto para actualizar el texto de un botón o un atributo aria en el mismo paso.

La regla de oro: estado en JS, pintura en CSS

tema.css
/* el CSS define QUÉ significa cada estado (la clase) */
.panel {
background: white; color: #1e293b;
transition: background 250ms ease, color 250ms ease;
}
.panel.oscuro {           /* solo cambia cuando JS cuelga la etiqueta */
background: #0f172a; color: #f1f5f9;
}

JavaScript nunca decide colores; solo pone o quita .oscuro. Toda la apariencia — incluida la transición suave del módulo 10 — vive en el CSS. Esta separación es la misma que sembraste en el menú hamburguesa del módulo 8 ("JS cambia el estado, CSS pinta") y es la clave de un código que no se convierte en espagueti.

Enciende y apaga

Fíjate en dos cosas: JavaScript no menciona ni un color (todos viven en CSS), y el aria-pressed se actualiza junto con la clase — un lector de pantalla anuncia "activado/desactivado" correctamente. El estado visual y el estado accesible siempre en sincronía.

Quieres un botón que abra y cierre un menú con un solo clic cada vez. ¿Cuál es la forma más limpia?

Mini-reto

Añade a "El Observador" una barra de "temas de lectura": tres botones — Claro, Sepia, Oscuro — que pongan la clase correspondiente en el <article> (define .tema-sepia, .tema-oscuro en tu CSS). Truco: antes de agregar la nueva, quita las otras dos (o el tema se apila). Vas a descubrir por qué a veces conviene remove explícito antes de add: cuando las clases son mutuamente excluyentes.

Qué sigue

Hasta ahora reaccionaste al click, pero las páginas responden a mucho más: escribir en un input, enviar un formulario, presionar una tecla. La próxima lección abre el mundo completo de los EVENTOS y del objeto event — la información de "qué acaba de pasar" que hace posible reaccionar con precisión.