Modificar Clases CSS con className en JavaScript
Modificar clases CSS con JavaScript es una necesidad frecuente cuando queremos actualizar la apariencia de un elemento dinámicamente. Si bien classList ofrece métodos modernos y recomendados para gestionar clases, existe una alternativa más antigua y directa, la propiedad className
.
En este artículo aprenderás qué es className
, cómo funciona, en qué se diferencia de classList
, cuándo conviene usarlo y qué precauciones debes tener para evitar sobrescribir clases importantes o introducir errores visuales.
¿Qué es className en JavaScript?
La propiedad className
representa la lista de clases CSS de un elemento como una única cadena de texto. A diferencia de classList
que trabaja con métodos específicos, className
es simplemente un valor asignable directamente.
Esto significa que puedes ver todas las clases aplicadas, o reemplazarlas por completo.
element.className
Esta instrucción devuelve una cadena que contiene todas las clases asignadas al elemento separadas por espacios.
const elemento = document.getElementById("banner");
console.log(elemento.className); // "encabezado sombreado grande"
El valor devuelto es un string plano. Si necesitas trabajar con clases individualmente, deberás dividirlo manualmente con .split(” “).
Asignar clases con className
Este método reemplaza por completo todas las clases existentes con una nueva cadena. Es útil cuando deseas sobrescribir todas las clases deliberadamente.
element.className = "nueva-clase";
Por ejemplo:
const tarjeta = document.getElementById("producto");
tarjeta.className = "resaltado grande";
Nota: Este enfoque sobrescribe cualquier clase anterior. Si el elemento ya tenía clases importantes para su diseño o funcionalidad, estas se perderán.
Agregar una clase sin borrar las existentes
Si decides usar className
y quieres mantener las clases anteriores, puedes hacerlo concatenando manualmente:
element.className += " nueva-clase";
Pero este enfoque tiene riesgos:
- Puede duplicar clases.
- Depende del manejo correcto de espacios.
- No verifica si la clase ya existe.
Este patrón fue común antes de classList
, pero hoy se considera frágil y propenso a errores. Solo se recomienda si estás seguro del estado actual de las clases.
Eliminar una clase manualmente con className
Para quitar una clase específica, puedes dividir el string y filtrarlo:
const clases = element.className.split(" ");
element.className = clases.filter(c => c !== "oculto").join(" ");
Aunque funcional, este enfoque es más complejo y menos seguro que simplemente usar classList.remove("oculto")
.
Diferencias clave entre className y classList
className
y classList
permiten modificar clases CSS, pero su funcionamiento y nivel de control son distintos.
className
trabaja con una cadena completa. Cualquier cambio requiere manipular el string entero.classList
es una API especializada, con métodos como.add()
,.remove()
,.toggle()
y.contains()
que permiten modificar clases de forma granular y segura.
En entornos modernos, classList es la opción preferida porque evita errores por sobrescritura, espacios duplicados o lógica manual.
Cuándo usar className
Aunque classList
es superior en la mayoría de los casos, className
puede ser útil cuando:
- Quieres reemplazar completamente todas las clases de un elemento.
- Trabajas en entornos muy antiguos donde
classList
no está disponible (como IE9 o anterior). - Estás generando elementos dinámicamente y conoces exactamente la estructura de clases que deseas aplicar.
Errores comunes al usar className
- Sobrescribir accidentalmente otras clases que afectan la presentación o comportamiento.
- Duplicar clases si no se valida antes de agregar una nueva.
- Manipular strings sin verificar espacios puede causar fallos sutiles en el diseño.
Conclusión
className
es una herramienta válida para modificar clases CSS con JavaScript, pero requiere más cuidado que classList
. Aunque útil en ciertos escenarios, especialmente cuando se desea reemplazar todas las clases de un elemento, su uso debe hacerse con precaución para no introducir errores de estilo.
En este artículo aprendiste a:
- Leer y asignar clases con
className
. - Manipular clases como texto.
- Entender las diferencias y riesgos frente a
classList
. - Aplicar este enfoque de forma segura y controlada.
En el siguiente artículo continuaremos con la manipulación de estilos CSS en JavaScript, explorando cómo usar la propiedad .style
para cambiar directamente propiedades como color
, margin
, o display
.