Manipular Clases CSS con JavaScript Usando classList

Manipular clases CSS con JavaScript es una técnica esencial para controlar el estilo visual de los elementos del DOM de forma dinámica y limpia. En lugar de modificar propiedades CSS directamente con .style, una práctica mucho más escalable consiste en trabajar con clases —por ejemplo, para mostrar u ocultar un menú, cambiar el estado de un botón o aplicar validaciones visuales.

La mejor forma de hacerlo es con el objeto classList, una API moderna y robusta que permite añadir, eliminar, alternar o verificar clases con una sintaxis clara y segura.

En este artículo aprenderás cómo usar classList con todos sus métodos (add(), remove(), toggle(), contains()), qué ventajas ofrece sobre className y cómo aplicarlo correctamente para construir componentes web más escalables, legibles y mantenibles.

¿Qué es classList y para qué sirve?

classList es una propiedad que pertenece a cualquier nodo del DOM que soporte clases, como div, button, p, etc. Al acceder a ella, obtenemos un objeto de tipo DOMTokenList, que representa la lista de clases aplicadas al elemento.

Esto nos permite usar métodos específicos para añadir, eliminar, verificar o alternar clases, sin necesidad de manipular cadenas de texto directamente.

javascript
const caja = document.getElementById("caja");
console.log(caja.classList); // DOMTokenList(2) ['azul', 'sombra']

Aunque se parece a un array, classList no lo es. Para usar métodos funcionales como map(), primero deberías convertirlo con Array.from().

Agregar clases con classList.add()

Agregar clases a un elemento HTML es una de las formas más comunes de aplicar estilos desde JavaScript. Usar classList.add() te permite hacerlo de manera precisa y sin sobrescribir las clases ya existentes.

javascript
element.classList.add("clase1", "clase2", ...);

Este método agrega una o más clases al elemento. Si la clase ya está presente, no se duplicará. Es ideal para estados como "activo", "error", "seleccionado", etc.

javascript
boton.classList.add("activo");
boton.classList.add("resaltado", "grande");

Agregar múltiples clases en una sola llamada mejora el rendimiento y hace el código más legible.

Eliminar clases con classList.remove()

Cuando un estado visual ya no es necesario o quieres revertir un estilo aplicado por una clase, classList.remove() es la herramienta adecuada. Permite eliminar una o más clases específicas sin afectar otras que puedan estar presentes.

javascript
element.classList.remove("clase1", "clase2", ...);

Puedes pasar una o varias clases. Si alguna no existe, simplemente se ignora sin lanzar error.

javascript
caja.classList.remove("rojo");
caja.classList.remove("sombra", "resaltado");

Esta seguridad (no lanzar errores) hace que el método sea confiable incluso si no conoces con certeza el estado actual de las clases.

Alternar clases con classList.toggle()

En muchos casos no necesitamos solo agregar o quitar una clase, sino alternar su presencia según una acción del usuario. Eso es precisamente lo que hace classList.toggle(): añade una clase si no está y la elimina si ya existe. Es especialmente útil en patrones de diseño como menús desplegables, paneles colapsables o pestañas interactivas.

javascript
element.classList.toggle("clase");
element.classList.toggle("clase", true);  // fuerza agregar
element.classList.toggle("clase", false); // fuerza eliminar

Este método agrega una clase si no está presente o la elimina si ya lo está. El segundo argumento (opcional) permite forzar el resultado.

javascript
menu.classList.toggle("abierto");
menu.classList.toggle("abierto", true);  // fuerza visible
menu.classList.toggle("abierto", false); // fuerza oculto

toggle() es muy útil para elementos tipo “acordeón”, menús desplegables o switches visuales, donde se alterna entre estados como "activo" y "inactivo".

Verificar clases con classList.contains()

Antes de modificar un estado visual es frecuente que queramos saber si una clase ya está aplicada. classList.contains() permite hacer exactamente eso: verificar si una clase existe en el elemento, devolviendo un valor booleano.

javascript
element.classList.contains("clase");

Devuelve true si el elemento tiene la clase especificada, o false si no.

javascript
if (panel.classList.contains("visible")) {
  console.log("El panel está activo");
}

Este método es ideal para validar condiciones visuales antes de aplicar cambios adicionales en el DOM.

Comparación con className

Aunque también puedes manipular clases con element.className, este devuelve una cadena que representa todas las clases aplicadas al elemento lo que puede provocar sobrescritura accidental si no tienes cuidado.

javascript
element.className = "nueva-clase"; // ❌ elimina todas las anteriores

Nota: className se debe usar solo cuando vas a reemplazar por completo todas las clases del elemento. Para manipulaciones seguras e incrementales, classList es mucho más recomendable.

Ventajas clave de classList

✔ No sobrescribe otras clases
✔ Sintaxis limpia, segura y fácil de entender
✔ Compatible con múltiples clases simultáneamente
✔ Soporta alternancia de clases de forma sencilla
✔ Mantiene la separación entre lógica (JS) y estilo (CSS)


Conclusión

classList es la herramienta moderna y segura para manipular clases CSS con JavaScript. Gracias a sus métodos específicos puedes modificar la apariencia de los elementos del DOM sin tocar los estilos directamente, evitando errores y manteniendo un código limpio y modular.

En este artículo aprendiste a:

  • Agregar, eliminar y alternar clases con .add(), .remove() y .toggle()
  • Verificar clases aplicadas con .contains()
  • Evitar errores comunes al usar .className
  • Aplicar buenas prácticas con clases CSS dinámicas

En el siguiente artículo analizaremos className: cómo funciona internamente, en qué casos es útil, y cuándo deberías evitarlo en favor de classList.

+1
0
+1
0