Animaciones CSS: guía básica para empezar desde cero

Las animaciones CSS son una de esas herramientas que pueden transformar una interfaz sencilla en una experiencia más clara, fluida y agradable. Pero también pueden convertirse en ruido visual si se usan sin intención. Por eso, antes de empezar a añadir movimiento a botones, tarjetas, menús o ilustraciones, conviene entender algo importante: animar con CSS no consiste en decorar por decorar, sino en acompañar al usuario.

Una buena animación puede ayudar a explicar qué está pasando en una interfaz. Puede indicar que un botón es interactivo, que un menú se ha abierto, que una tarjeta ha cambiado de estado o que una acción se ha completado correctamente. En cambio, una animación excesiva, lenta o mal planteada puede aumentar la carga cognitiva, distraer y empeorar la experiencia.

En esta guía básica sobre animaciones CSS vamos a ver desde cero qué son, cuándo usarlas, qué diferencia hay entre transition y animation, cómo funcionan los @keyframes, qué propiedades conviene animar y qué buenas prácticas deberías tener presentes si quieres crear animaciones web útiles, accesibles y mantenibles.

La idea de este artículo es que funcione como un post pilar: una página central desde la que puedas entender los conceptos principales y, después, profundizar en temas concretos como microinteracciones, efectos hover, menús animados, loaders, animaciones accesibles o ilustraciones CSS más complejas. Si también te interesa la parte más visual del CSS, puedes complementar esta guía con el artículo sobre cómo dibujar formas básicas con CSS.

Qué son las animaciones CSS

Las animaciones CSS permiten modificar visualmente uno o varios estilos de un elemento a lo largo del tiempo. En lugar de que un cambio ocurra de forma brusca, puedes hacer que ese cambio sea progresivo.

Por ejemplo, imagina un botón que cambia de color cuando pasas el ratón por encima. Sin animación, el color cambia de golpe. Con una transición, ese cambio puede hacerse de forma suave:

.button {
  background-color: #cc2b5e;
  transition: background-color 0.3s ease;
}

.button:hover {
  background-color: #753a88;
}

Este pequeño detalle ya mejora la percepción de la interfaz. El usuario siente que el elemento responde de forma más natural.

CSS permite crear movimiento principalmente de dos formas: mediante transiciones y mediante animaciones con @keyframes. Las transiciones sirven para animar el cambio entre dos estados de un elemento, por ejemplo un estado normal y un estado :hover. Las animaciones con @keyframes, en cambio, permiten definir varios pasos intermedios dentro de una secuencia más controlada.

Por qué usar animaciones CSS en una web

Las animaciones no deberían estar ahí solo porque “quedan bonitas”. En diseño de interfaces, el movimiento tiene sentido cuando ayuda a comunicar mejor.

Una animación puede cumplir varias funciones dentro de una web:

  • Dar feedback visual.
  • Guiar la atención del usuario.
  • Explicar una relación entre elementos.
  • Suavizar cambios de estado.
  • Hacer que una interfaz se sienta más cuidada.
  • Reforzar la personalidad visual de una marca.

Por ejemplo, una tarjeta que se eleva ligeramente al pasar el cursor comunica que es clicable. Un panel que aparece desde un lateral ayuda a entender de dónde viene ese contenido. Un icono que gira al abrir un acordeón indica que algo ha cambiado de estado.

Ahora bien, también hay que tener cuidado. Si todo se mueve, nada destaca. Una web llena de efectos puede generar cansancio visual y hacer que el usuario tarde más en decidir qué hacer. Aquí conviene pensar en algo muy relacionado con la experiencia de usuario: la diferencia entre captar la atención y aumentar la carga cognitiva. Una animación útil reduce fricción. Una animación innecesaria puede añadir ruido.

Si quieres profundizar más en cómo las decisiones visuales afectan a la comprensión de una interfaz, te puede interesar el artículo sobre HTML semántico y accesibilidad web, porque muchas veces la claridad de una interfaz empieza mucho antes de añadir movimiento.

Transiciones CSS: el primer paso para animar con CSS

Las transiciones CSS son la forma más sencilla de empezar a animar con CSS. Sirven para suavizar el cambio entre dos valores de una propiedad.

Cómo funciona una transición

Una transición necesita, como mínimo, dos cosas: una propiedad que vaya a cambiar y una duración para ese cambio.

.card {
  transform: translateY(0);
  transition: transform 0.25s ease;
}

.card:hover {
  transform: translateY(-8px);
}

Aquí estamos diciendo que la tarjeta parte de su posición original y, cuando el usuario pasa el cursor por encima, se desplaza ligeramente hacia arriba. Ese cambio no sucede de golpe, sino durante 0.25s.

La propiedad transition es una forma abreviada de declarar varias cosas a la vez: qué propiedad se anima, cuánto dura, qué curva de aceleración utiliza y si tiene retraso.

Propiedades principales de transition

Cuando trabajes con transiciones, estas son las propiedades que más vas a utilizar:

.element {
  transition-property: transform;
  transition-duration: 0.3s;
  transition-timing-function: ease;
  transition-delay: 0s;
}

También puedes escribirlo de forma abreviada:

.element {
  transition: transform 0.3s ease 0s;
}

La propiedad transition-property indica qué propiedad se va a animar. transition-duration define la duración. transition-timing-function controla el ritmo de la animación. Y transition-delay permite retrasar el inicio.

Cuándo usar transition

Usa transition cuando quieras animar un cambio sencillo entre dos estados. Es ideal para efectos :hover, estados :focus, botones, tarjetas, enlaces, cambios de color, cambios de opacidad o pequeños desplazamientos.

.link {
  color: #020101;
  text-decoration-thickness: 1px;
  transition: color 0.2s ease, text-decoration-thickness 0.2s ease;
}

.link:hover {
  color: #cc2b5e;
  text-decoration-thickness: 3px;
}

Este tipo de microinteracción puede mejorar mucho la experiencia sin añadir complejidad. Además, es una buena puerta de entrada si estás empezando a animar con CSS.

Animaciones CSS con @keyframes

Cuando necesitas más control que una simple transición, entran en juego las animaciones con @keyframes.

Una animación CSS se compone de dos partes principales: una regla @keyframes, donde defines los pasos de la animación, y una propiedad animation, donde aplicas esa animación a un elemento.

Qué es @keyframes

La regla @keyframes define cómo cambia un elemento durante una animación. Puedes usar from y to, o porcentajes como 0%, 50% y 100%.

@keyframes fadeIn {
  from {
    opacity: 0;
    transform: translateY(16px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.hero-title {
  animation: fadeIn 0.6s ease-out both;
}

En este caso, el título aparece progresivamente y sube ligeramente desde abajo. Es una animación típica para introducir contenido en pantalla.

Diferencia entre from/to y porcentajes

Puedes escribir una animación sencilla así:

@keyframes scaleIn {
  from {
    transform: scale(0.9);
    opacity: 0;
  }

  to {
    transform: scale(1);
    opacity: 1;
  }
}

Pero si necesitas más control, puedes usar porcentajes:

@keyframes bounceSoft {
  0% {
    transform: translateY(0);
  }

  50% {
    transform: translateY(-10px);
  }

  100% {
    transform: translateY(0);
  }
}

Los porcentajes permiten definir puntos intermedios. Esto es útil para animaciones más elaboradas, como rebotes, loaders, entradas escalonadas o pequeños efectos decorativos.

Propiedades principales de animation

La propiedad animation también puede escribirse de forma abreviada. Agrupa propiedades como animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, animation-fill-mode y animation-play-state.

.badge {
  animation: pulse 1.5s ease-in-out infinite;
}

Aquí estamos diciendo que el elemento usará la animación pulse, durará 1.5s, tendrá una curva ease-in-out y se repetirá infinitamente.

La versión extendida sería:

.badge {
  animation-name: pulse;
  animation-duration: 1.5s;
  animation-timing-function: ease-in-out;
  animation-iteration-count: infinite;
}

Transition vs animation: cuándo usar cada una

Una de las dudas más habituales al empezar con CSS animation es cuándo usar transition y cuándo usar animation.

Usa transition cuando hay un cambio de estado

Las transiciones son perfectas cuando el elemento cambia como respuesta a una interacción o a una clase añadida con JavaScript.

.menu {
  opacity: 0;
  transform: translateY(-8px);
  transition: opacity 0.25s ease, transform 0.25s ease;
}

.menu.is-open {
  opacity: 1;
  transform: translateY(0);
}

Aquí el menú cambia entre cerrado y abierto. La transición suaviza ese cambio.

Usa animation cuando necesitas una secuencia propia

Las animaciones con @keyframes son más adecuadas cuando el movimiento tiene una secuencia definida que no depende únicamente de un cambio entre dos estados.

Por ejemplo, usarías animation para crear un loader, un icono que pulsa, una ilustración animada, una entrada de contenido o una animación que se repite.

@keyframes rotate {
  to {
    transform: rotate(360deg);
  }
}

.loader {
  animation: rotate 1s linear infinite;
}

En resumen: si solo necesitas suavizar un cambio, usa transition; si necesitas definir una secuencia, usa animation y @keyframes.

Propiedades recomendadas para animar

No todas las propiedades CSS se comportan igual cuando las animas. Algunas son más eficientes y otras pueden afectar al rendimiento de la página.

Prioriza transform y opacity

Cuando sea posible, conviene animar transform y opacity. Son dos propiedades especialmente útiles porque permiten crear muchos efectos visuales sin obligar al navegador a recalcular constantemente la estructura de la página.

.element {
  transition: transform 0.3s ease, opacity 0.3s ease;
}

Con transform puedes crear desplazamientos, escalados, rotaciones e inclinaciones:

.box:hover {
  transform: translateY(-6px) scale(1.02);
}

Con opacity puedes crear apariciones y desapariciones suaves:

.tooltip {
  opacity: 0;
  transition: opacity 0.2s ease;
}

.tooltip.is-visible {
  opacity: 1;
}

Evita animar propiedades costosas

Siempre que puedas, evita animar propiedades como width, height, top, left, margin o padding. No significa que estén prohibidas, pero sí que deberías usarlas con cuidado.

Por ejemplo, en lugar de animar top, suele ser mejor animar transform: translateY().

Menos recomendable:

.modal {
  top: -40px;
  transition: top 0.3s ease;
}

.modal.is-open {
  top: 0;
}

Mejor:

.modal {
  transform: translateY(-40px);
  transition: transform 0.3s ease;
}

.modal.is-open {
  transform: translateY(0);
}

Visualmente el resultado puede ser parecido, pero la segunda opción suele ser más eficiente y más fácil de mantener.

Curvas de animación: el papel del easing

La duración de una animación importa, pero el ritmo también. Ahí entra en juego el concepto de easing, que define cómo progresa la animación a lo largo del tiempo.

No es lo mismo una animación completamente lineal que una animación que empieza despacio, acelera y termina suavemente.

Valores habituales de timing-function

Algunos valores comunes son:

.element {
  transition-timing-function: ease;
}
.element {
  transition-timing-function: linear;
}
.element {
  transition-timing-function: ease-in;
}
.element {
  transition-timing-function: ease-out;
}
.element {
  transition-timing-function: ease-in-out;
}

Cuándo usar cada curva

Para interfaces, ease y ease-out suelen funcionar bien en muchas situaciones porque hacen que el movimiento se sienta más natural.

  • linear: útil para loaders o rotaciones constantes.
  • ease: buena opción general.
  • ease-in: empieza lento y termina más rápido.
  • ease-out: empieza rápido y termina suave.
  • ease-in-out: suaviza tanto la entrada como la salida.
.toast {
  animation: slideIn 0.35s ease-out both;
}

En una notificación, ease-out suele tener sentido porque queremos que aparezca con cierta agilidad y se asiente de forma suave.

Ejemplos básicos de animaciones CSS

Veamos algunos ejemplos prácticos que puedes usar como punto de partida. La idea no es copiar y pegar sin pensar, sino entender el patrón para adaptarlo después a tus propios componentes.

Botón con hover suave

.button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 0.85rem 1.25rem;
  border-radius: 999px;
  background: #cc2b5e;
  color: #ffffff;
  font-weight: 700;
  text-decoration: none;
  transition: transform 0.2s ease, background-color 0.2s ease;
}

.button:hover {
  transform: translateY(-2px);
  background: #753a88;
}

Este patrón es sencillo, pero muy útil. El botón responde visualmente sin resultar exagerado.

Tarjeta que aparece al cargar

@keyframes cardEnter {
  from {
    opacity: 0;
    transform: translateY(24px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.card {
  animation: cardEnter 0.5s ease-out both;
}

Aquí usamos both para que el elemento conserve los estilos del primer y último fotograma cuando corresponda.

Loader circular

@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

.loader {
  width: 2rem;
  height: 2rem;
  border: 3px solid #f8e0ea;
  border-top-color: #cc2b5e;
  border-radius: 50%;
  animation: spin 0.8s linear infinite;
}

En este caso, linear tiene sentido porque queremos una rotación constante.

Aparición escalonada de elementos

@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(16px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.list-item {
  animation: fadeUp 0.45s ease-out both;
}

.list-item:nth-child(2) {
  animation-delay: 0.1s;
}

.list-item:nth-child(3) {
  animation-delay: 0.2s;
}

.list-item:nth-child(4) {
  animation-delay: 0.3s;
}

Este recurso es útil para listas, grids de tarjetas o bloques de contenido. Eso sí: úsalo con moderación. Si una página tiene muchos elementos y todos aparecen con retraso, la experiencia puede volverse lenta.

Si estás trabajando con ilustraciones CSS, este tipo de animaciones también puede combinarse con técnicas como pseudo-elementos o recortes visuales. En ese caso, puedes ampliar el tema con el artículo sobre pseudo-elementos en CSS o con la guía sobre clip-path en CSS.

Accesibilidad en animaciones CSS

La accesibilidad es un punto fundamental cuando hablamos de animaciones web. No todas las personas perciben el movimiento de la misma manera. Para algunos usuarios, ciertas animaciones pueden provocar mareo, incomodidad o dificultad para concentrarse.

Por eso, CSS ofrece la media feature prefers-reduced-motion, que permite detectar si una persona ha activado en su sistema una preferencia para reducir el movimiento no esencial.

Cómo usar prefers-reduced-motion

Una forma habitual de aplicarlo es reducir o eliminar animaciones cuando el usuario ha indicado esa preferencia:

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-duration: 0.01ms !important;
  }
}

Este enfoque es bastante global. En proyectos reales, también puedes crear alternativas más cuidadas en lugar de eliminar todo de golpe.

@media (prefers-reduced-motion: reduce) {
  .hero-title {
    animation: none;
  }

  .card:hover {
    transform: none;
  }
}

Animar no debería bloquear la comprensión

Una animación accesible debería cumplir estas ideas:

  • No debe ser imprescindible para entender el contenido.
  • No debe impedir usar la interfaz.
  • No debe ejecutarse de forma infinita sin motivo.
  • No debe parpadear agresivamente.
  • No debe generar desplazamientos inesperados.
  • Debe poder reducirse si el usuario lo necesita.

Una buena regla práctica es esta: si quitas la animación, la interfaz debería seguir funcionando y entendiéndose perfectamente.

También es importante no olvidar los estados de teclado. Si una animación acompaña el estado :hover, muchas veces debería contemplar también :focus-visible. Puedes profundizar en esta parte en el artículo sobre focus visible y navegación con teclado.

Buenas prácticas para crear animaciones CSS

Crear buenas animaciones no depende solo de saber escribir @keyframes. También implica criterio visual, intención de diseño y cuidado técnico.

1. Empieza con movimientos pequeños

Cuando estás empezando, es fácil pasarse. Una tarjeta no necesita volar por la pantalla para comunicar que es interactiva. A menudo basta con un pequeño cambio de opacidad, color o posición.

.card:hover {
  transform: translateY(-4px);
}

Un movimiento pequeño suele sentirse más elegante y menos invasivo.

2. Usa duraciones cortas

En interfaces, muchas animaciones funcionan bien entre 150ms y 400ms. No es una regla absoluta, pero sí un buen punto de partida.

  • Microinteracciones: 150ms250ms.
  • Entradas de elementos: 300ms500ms.
  • Animaciones decorativas: depende del caso, pero conviene usarlas con cuidado.

Una animación demasiado rápida puede pasar desapercibida. Una demasiado lenta puede hacer que la web parezca pesada.

3. Mantén consistencia

Si cada botón, tarjeta y modal usa una duración diferente, la interfaz puede sentirse caótica. Es mejor definir un pequeño sistema de tiempos:

:root {
  --duration-fast: 150ms;
  --duration-base: 250ms;
  --duration-slow: 400ms;
  --ease-base: ease;
}

Y después reutilizarlo:

.button {
  transition: transform var(--duration-base) var(--ease-base);
}

Esto ayuda a que el proyecto sea más mantenible.

4. No animes todo

Una web con demasiadas animaciones puede parecer menos profesional. El movimiento debe tener jerarquía. Antes de añadir una animación, pregúntate si ayuda a entender algo, si aporta feedback, si guía la atención o si simplemente está ahí porque se puede hacer.

Si no cumple ninguna función clara, probablemente sobra.

Errores comunes al empezar con CSS animation

Cuando empiezas a trabajar con CSS animation, es normal cometer algunos errores. Lo importante es detectarlos pronto para que las animaciones no perjudiquen la experiencia.

Animar propiedades equivocadas

Uno de los errores más frecuentes es animar propiedades que afectan al layout cuando podrías usar transform.

Menos recomendable:

.box:hover {
  width: 120%;
}

Mejor:

.box:hover {
  transform: scale(1.05);
}

Usar infinite sin necesidad

Las animaciones infinitas deben reservarse para casos concretos, como loaders o pequeños indicadores de actividad. Si un elemento decorativo se mueve todo el tiempo, puede distraer mucho.

.icon {
  animation: pulse 1s infinite;
}

Antes de usar algo así, pregúntate si realmente necesita repetirse siempre.

Crear animaciones demasiado largas

Una animación larga puede parecer elegante en una demo, pero molesta en una interfaz real. El usuario no quiere esperar a que la web termine de “presentarse” para poder interactuar.

Olvidar el estado focus

Muchas veces se anima :hover, pero se olvida :focus-visible. Esto deja fuera a quienes navegan con teclado.

.button:hover,
.button:focus-visible {
  transform: translateY(-2px);
}

Las animaciones también deben acompañar la accesibilidad de la interacción, no solo el uso con ratón.

Cómo organizar animaciones CSS en un proyecto real

Cuando un proyecto crece, conviene evitar animaciones sueltas y repetidas por todo el CSS. Puedes crear una pequeña arquitectura de movimiento para que todo sea más coherente.

Variables para tiempos y curvas

:root {
  --motion-duration-fast: 150ms;
  --motion-duration-base: 250ms;
  --motion-duration-slow: 400ms;

  --motion-ease-standard: ease;
  --motion-ease-enter: ease-out;
  --motion-ease-exit: ease-in;
}

Clases reutilizables

.animate-fade-up {
  animation: fadeUp var(--motion-duration-slow) var(--motion-ease-enter) both;
}

.transition-base {
  transition-duration: var(--motion-duration-base);
  transition-timing-function: var(--motion-ease-standard);
}

Keyframes centralizados

@keyframes fadeUp {
  from {
    opacity: 0;
    transform: translateY(16px);
  }

  to {
    opacity: 1;
    transform: translateY(0);
  }
}

Este enfoque hace que las animaciones sean más coherentes y fáciles de ajustar. Si más adelante decides que las entradas son demasiado lentas, puedes cambiar una variable en lugar de revisar decenas de componentes.

Una nota sobre diseño responsive

También conviene probar las animaciones en distintos tamaños de pantalla. Un desplazamiento que se ve sutil en escritorio puede sentirse excesivo en móvil. Si trabajas mucho con composición visual en CSS, te recomiendo revisar también el artículo sobre cómo adaptar ilustraciones CSS a distintos tamaños de pantalla.

Animaciones CSS como parte de una estrategia de contenidos

Este artículo está pensado como una guía base sobre animaciones CSS, pero el tema da para mucho más. Por eso tiene sentido usarlo como página central de un cluster de contenidos.

Desde aquí puedes enlazar, por ejemplo, a artículos más específicos sobre:

  • Cómo usar transition en CSS.
  • Cómo crear animaciones con @keyframes.
  • Efectos hover modernos con CSS.
  • Animaciones CSS para botones.
  • Cómo animar menús responsive.
  • Loaders CSS sin JavaScript.
  • Animaciones accesibles con prefers-reduced-motion.
  • Errores de rendimiento al animar con CSS.
  • Microinteracciones CSS para mejorar la UX.
  • Diferencias entre animaciones CSS y animaciones JavaScript.

Esta estructura ayuda tanto al usuario como al SEO. El usuario encuentra una ruta de aprendizaje clara. Y Google puede entender mejor la relación semántica entre los artículos del sitio.

Un post pilar no debería intentar resolver todos los temas con profundidad extrema. Su función es ordenar el mapa, explicar los conceptos base y derivar hacia contenidos complementarios más concretos.

Preguntas frecuentes sobre animaciones CSS

¿Qué diferencia hay entre transition y animation en CSS?

transition sirve para suavizar el cambio entre dos estados de un elemento, por ejemplo cuando un botón pasa de su estado normal a :hover. animation, en cambio, permite crear una secuencia más completa mediante @keyframes, con pasos intermedios, repeticiones, retrasos y mayor control.

¿Qué propiedades CSS conviene animar?

Siempre que sea posible, conviene animar transform y opacity, porque suelen ser más eficientes para el navegador. Con transform puedes crear desplazamientos, escalados y rotaciones. Con opacity puedes controlar apariciones y desapariciones suaves.

¿Las animaciones CSS son mejores que las animaciones con JavaScript?

No siempre. Las animaciones CSS son ideales para microinteracciones, transiciones sencillas, loaders básicos y efectos visuales ligados a estilos. JavaScript puede ser más adecuado cuando necesitas controlar una animación de forma dinámica, responder a eventos complejos, sincronizar estados o crear interacciones avanzadas. La mejor opción depende del problema que quieras resolver.

Movimiento con intención

Las animaciones CSS son una herramienta poderosa, pero su valor no está en el movimiento por sí mismo. Su valor está en cómo ese movimiento ayuda a que una interfaz se entienda mejor.

Una buena animación no interrumpe. No compite con el contenido. No obliga al usuario a esperar. Simplemente acompaña: guía la mirada, suaviza los cambios, refuerza la interacción y hace que la experiencia se sienta más cuidada.

Si estás empezando desde cero, no necesitas memorizar todas las propiedades de golpe. Empieza con transition, practica con transform y opacity, crea tus primeros @keyframes y observa cómo cambia la percepción de una interfaz cuando el movimiento tiene intención.

Animar con CSS no es añadir efectos porque sí. Es tomar decisiones pequeñas, pero importantes, sobre cómo se comporta una web. Y cuando esas decisiones están bien pensadas, las animaciones dejan de ser un adorno para convertirse en parte de la experiencia de usuario.

Cómo crear tu primera newsletter responsive con MJML

Crear una newsletter responsive puede parecer sencillo hasta que llega el momento de maquetarla de verdad. En una página web trabajas con CSS moderno, media queries, flexbox, grid y navegadores bastante predecibles. En cambio, cuando diseñas un email, entras en un entorno mucho más delicado: cada cliente de correo interpreta el HTML y el CSS a su manera.

Gmail, Outlook, Apple Mail o Yahoo Mail no siempre se comportan igual. Algunas propiedades CSS funcionan bien en unos clientes y fallan en otros. Además, muchos emails siguen dependiendo de estructuras basadas en tablas para garantizar una visualización aceptable. Por eso, crear un email responsive HTML desde cero puede ser bastante más complejo de lo que parece.

Aquí es donde entra en juego MJML, una herramienta pensada para simplificar la maquetación de emails responsive. En lugar de escribir directamente todo el HTML final, puedes trabajar con una sintaxis más clara, basada en componentes, y dejar que MJML genere el código compatible con email.

Antes de continuar: si todavía no tienes claro qué es esta herramienta o por qué se utiliza tanto en email marketing, te recomiendo leer primero el artículo Qué es MJML y por qué facilita la maquetación de emails responsive. Te ayudará a entender mejor el contexto antes de empezar con este tutorial práctico.

En esta guía vamos a ver cómo crear tu primera newsletter responsive con MJML paso a paso, desde la estructura inicial hasta algunas buenas prácticas para que el resultado sea más limpio, legible y fácil de adaptar.

Qué necesitas antes de crear una newsletter responsive con MJML

Antes de abrir el editor y empezar a escribir etiquetas, conviene aclarar una idea importante: una newsletter no es una página web en miniatura. Aunque utilice HTML, CSS, imágenes y enlaces, sus reglas son diferentes.

En una web puedes apoyarte en muchas propiedades modernas y confiar en que los navegadores actuales las van a interpretar correctamente. En email marketing, en cambio, tienes que pensar en compatibilidad, peso del archivo, legibilidad, estructura, accesibilidad y comportamiento en móvil.

MJML ayuda precisamente porque reduce parte de esa complejidad. En vez de escribir tablas anidadas, estilos inline y condicionales específicos, puedes trabajar con componentes como <mj-section>, <mj-column>, <mj-text>, <mj-image> o <mj-button>.

Después, MJML se encarga de convertir ese marcado en un HTML más preparado para clientes de correo. Esto no significa que puedas olvidarte por completo de las pruebas, pero sí que partes de una base mucho más cómoda.

Herramientas que puedes utilizar

Para crear tu primera newsletter responsive con MJML tienes varias opciones. Puedes usar el editor online de MJML, instalarlo en tu equipo con Node.js o integrarlo en un flujo de trabajo con npm scripts.

Si estás empezando, el editor online puede ser suficiente para probar la sintaxis y entender cómo se comportan los componentes. Si ya trabajas habitualmente con desarrollo web, probablemente te resulte más cómodo instalar MJML en local y compilar tus archivos desde la terminal.

Un flujo básico de instalación podría ser este:

npm install mjml

Después, podrías compilar un archivo .mjml a HTML con un comando como este:

npx mjml newsletter.mjml -o newsletter.html

De esta forma puedes trabajar sobre un archivo más limpio y generar el HTML final cuando lo necesites para pegarlo en tu plataforma de email marketing.

Estructura básica de una newsletter en MJML

Una newsletter responsive suele tener una estructura bastante reconocible. Normalmente incluye un texto de previsualización, una cabecera, un bloque principal, contenido destacado, una llamada a la acción y un footer con información legal o enlace de baja.

La ventaja de MJML es que esta estructura se puede traducir de forma bastante natural a bloques visuales organizados dentro de <mj-body>.

El esqueleto mínimo de una newsletter con MJML

Este sería un ejemplo muy básico para empezar:

<mjml>
  <mj-head>
    <mj-title>Mi primera newsletter responsive</mj-title>
    <mj-preview>Una newsletter sencilla creada con MJML</mj-preview>
  </mj-head>

  <mj-body background-color="#f5f5f5">
    <mj-section background-color="#ffffff" padding="32px">
      <mj-column>
        <mj-text font-size="24px" font-weight="bold" color="#020101">
          Mi primera newsletter responsive
        </mj-text>

        <mj-text font-size="16px" line-height="1.6" color="#333333">
          Hola, esta es una newsletter creada con MJML para verse bien en escritorio y móvil.
        </mj-text>

        <mj-button background-color="#CC2B5E" color="#ffffff" href="https://tusitio.com">
          Leer más
        </mj-button>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>

Este ejemplo ya contiene las piezas fundamentales de una newsletter sencilla:

  • <mjml>: etiqueta raíz del documento.
  • <mj-head>: zona para metadatos, estilos globales y vista previa.
  • <mj-preview>: texto que algunos clientes muestran junto al asunto.
  • <mj-body>: cuerpo visual del email.
  • <mj-section>: bloque horizontal de contenido.
  • <mj-column>: columna dentro de una sección.
  • <mj-text>: bloque de texto.
  • <mj-button>: botón de llamada a la acción.

La idea principal es sencilla: tú escribes una estructura más semántica y mantenible, y MJML genera el HTML final necesario para que el email se comporte mejor en diferentes clientes de correo.

Cómo planificar el contenido de tu primera newsletter responsive

Antes de añadir más bloques, conviene detenerse en la estrategia de contenido. Una newsletter no funciona solo porque sea responsive. También necesita tener una jerarquía clara.

El diseño debe ayudar a que la persona entienda rápidamente qué le estás contando, por qué le interesa y qué puede hacer a continuación. Si el mensaje no está claro, el código puede estar perfecto y aun así la newsletter no cumplirá su objetivo.

Define un único objetivo principal

Una buena newsletter suele tener un objetivo dominante. Puede ser llevar tráfico a un artículo, presentar un nuevo servicio, anunciar una promoción, invitar a un evento o compartir novedades de marca.

El problema aparece cuando intentas incluir demasiados objetivos en el mismo email. Si hay muchos mensajes compitiendo entre sí, la persona que recibe la newsletter tiene que hacer más esfuerzo para decidir dónde mirar o en qué enlace hacer clic.

Por eso, para una primera newsletter responsive con MJML, lo ideal es empezar con una estructura sencilla:

  • Un título claro.
  • Una introducción breve.
  • Una imagen o bloque visual si aporta valor.
  • Un cuerpo de texto directo.
  • Un botón de acción principal.
  • Un cierre breve.

Esta estructura permite que el email sea fácil de leer, fácil de escanear y más sencillo de adaptar a móvil.

Piensa primero en móvil

Aunque MJML facilite la adaptación responsive, las decisiones de diseño siguen siendo tuyas. Por eso es importante pensar desde el principio en pantallas pequeñas.

En móvil, una newsletter debe leerse sin esfuerzo. Los titulares tienen que ser claros, los párrafos no deberían ser demasiado largos y los botones deben tener un tamaño cómodo para pulsar con el dedo.

También conviene evitar composiciones demasiado complejas. Las columnas pueden funcionar bien en escritorio, pero en móvil suelen apilarse. Si cada bloque no tiene sentido por sí mismo, la lectura puede volverse confusa.

Un buen email se escanea antes de leerse

Muchas personas no leen una newsletter de arriba abajo. Primero la escanean. Miran el asunto, el preheader, el título principal, algún elemento visual, los subtítulos y el botón.

Por eso, cada bloque debería responder a una pregunta concreta:

  • ¿De qué trata este email?
  • ¿Por qué debería importarme?
  • ¿Qué puedo hacer ahora?
  • ¿Dónde tengo que hacer clic?

Si estas respuestas no están claras, el diseño puede resultar atractivo, pero la newsletter no será tan efectiva.

Ejemplo completo de newsletter responsive con MJML

Ahora vamos a crear una newsletter algo más realista. Imaginemos que quieres enviar un email para compartir un nuevo artículo de tu blog sobre MJML.

<mjml>
  <mj-head>
    <mj-title>Nuevo artículo sobre MJML</mj-title>
    <mj-preview>Aprende a crear tu primera newsletter responsive con MJML.</mj-preview>

    <mj-attributes>
      <mj-all font-family="Arial, sans-serif" />
      <mj-text color="#333333" font-size="16px" line-height="1.6" />
      <mj-button border-radius="8px" font-size="16px" font-weight="bold" />
    </mj-attributes>
  </mj-head>

  <mj-body background-color="#f5f5f5">
    <mj-section background-color="#ffffff" padding="24px 32px 16px">
      <mj-column>
        <mj-text font-size="14px" color="#753A88" font-weight="bold">
          Marta González · Desarrollo web
        </mj-text>
      </mj-column>
    </mj-section>

    <mj-section background-color="#ffffff" padding="16px 32px 24px">
      <mj-column>
        <mj-text font-size="28px" line-height="1.3" font-weight="bold" color="#020101">
          Cómo crear tu primera newsletter responsive con MJML
        </mj-text>

        <mj-text>
          Si alguna vez has intentado maquetar un email responsive a mano, sabrás que no siempre se comporta como una web normal. Por eso MJML puede ayudarte a crear newsletters más limpias, mantenibles y adaptadas a móvil.
        </mj-text>

        <mj-button background-color="#CC2B5E" color="#ffffff" href="https://martagonzalez.dev/blog/como-crear-tu-primera-newsletter-responsive-con-mjml/">
          Leer el artículo completo
        </mj-button>
      </mj-column>
    </mj-section>

    <mj-section background-color="#F8E0EA" padding="24px 32px">
      <mj-column>
        <mj-text font-size="20px" font-weight="bold" color="#020101">
          Qué aprenderás en esta guía
        </mj-text>

        <mj-text>
          Verás cómo funciona la estructura básica de MJML, qué componentes necesitas para empezar y qué buenas prácticas conviene aplicar antes de exportar el HTML final de tu newsletter.
        </mj-text>
      </mj-column>
    </mj-section>

    <mj-section background-color="#ffffff" padding="24px 32px">
      <mj-column>
        <mj-text font-size="18px" font-weight="bold" color="#020101">
          Consejo rápido
        </mj-text>

        <mj-text>
          No empieces diseñando una newsletter demasiado compleja. Primero crea una versión sencilla, comprueba que se lee bien en móvil y después añade bloques secundarios solo si aportan valor.
        </mj-text>
      </mj-column>
    </mj-section>

    <mj-section background-color="#020101" padding="24px 32px">
      <mj-column>
        <mj-text color="#ffffff" font-size="13px" line-height="1.5">
          Recibes este email porque te has suscrito a las novedades del blog.
          Puedes darte de baja en cualquier momento.
        </mj-text>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>

Este ejemplo ya se parece mucho más a una newsletter real. Tiene identidad, título, introducción, CTA, bloque destacado, consejo adicional y footer. No es una estructura recargada, pero sí suficiente para comunicar un mensaje con claridad.

Si quieres profundizar en la lógica que hay detrás de estos componentes, puedes complementar esta guía con el artículo sobre qué es MJML y cómo facilita la maquetación de emails responsive, donde se explica mejor por qué esta herramienta resulta tan útil frente a la maquetación manual de emails.

Buenas prácticas para una newsletter responsive con MJML

Crear el archivo MJML es solo una parte del proceso. Para que la newsletter funcione bien, también tienes que cuidar la experiencia de lectura, la accesibilidad y la compatibilidad.

Utiliza una anchura segura

En email marketing es habitual trabajar con un ancho aproximado de 600 píxeles para el contenedor principal. Esta medida ayuda a mantener una lectura cómoda en escritorio y facilita la adaptación posterior a móvil.

MJML ya está pensado para trabajar con convenciones habituales en email, pero aun así conviene evitar diseños excesivamente anchos o estructuras con demasiadas columnas.

En una primera newsletter, menos suele ser mejor. Una sección principal, una llamada a la acción y uno o dos bloques secundarios pueden ser más efectivos que una composición demasiado larga.

Cuida el texto alternativo de las imágenes

Si incluyes imágenes en tu newsletter, no dependas de ellas para comunicar todo el mensaje. Algunos clientes de correo pueden bloquearlas por defecto o cargarlas con retraso.

Por eso es importante usar el atributo alt de forma descriptiva:

<mj-image
  src="https://tusitio.com/imagen-newsletter.jpg"
  alt="Ilustración sobre newsletter responsive creada con MJML"
/>

El texto alternativo ayuda a contextualizar la imagen cuando no se carga y mejora la accesibilidad del email.

No abuses de los botones

Una newsletter puede tener varios enlaces, pero debería tener una acción principal muy clara. Si todos los botones tienen el mismo peso visual, ninguno destaca realmente.

Una buena práctica es reservar el botón principal para la acción más importante y utilizar enlaces de texto para acciones secundarias. Así ayudas a que la persona entienda qué esperas que haga después de leer el email.

Revisa el preheader

El preheader es el texto de vista previa que muchos clientes de correo muestran junto al asunto. Es una pieza pequeña, pero puede influir mucho en la apertura del email.

Un preheader genérico como este aporta poco:

<mj-preview>Newsletter de marzo</mj-preview>

En cambio, este otro resulta más concreto:

<mj-preview>Aprende a crear una newsletter responsive con MJML paso a paso.</mj-preview>

La diferencia está en que el segundo anticipa el valor del contenido y refuerza la promesa del asunto.

Errores comunes al crear tu primera newsletter con MJML

Aunque MJML simplifica mucho la maquetación, hay algunos errores habituales que conviene evitar desde el principio.

Tratar el email como si fuera una landing page

Una newsletter no debería tener la misma densidad visual que una página de venta completa. La persona que recibe el email está dentro de su bandeja de entrada, probablemente revisando mensajes de forma rápida.

Por eso conviene reducir la fricción. Menos bloques, menos mensajes simultáneos y una llamada a la acción más clara suelen funcionar mejor que una newsletter demasiado cargada.

No probar el HTML final

MJML genera HTML responsive, pero eso no significa que debas enviar la newsletter sin revisarla. Siempre conviene hacer pruebas antes del envío real.

Revisa especialmente cómo se ve el email en Gmail, Outlook, Apple Mail y en móvil. Comprueba también el modo oscuro, la carga de imágenes, los enlaces, el texto del botón y el footer.

El objetivo no es buscar la perfección visual absoluta en todos los clientes, sino asegurarte de que el mensaje se entiende, se puede leer bien y la acción principal funciona.

Usar imágenes demasiado pesadas

Las imágenes grandes pueden ralentizar la carga del email y empeorar la experiencia, sobre todo en móvil. Además, si el contenido depende demasiado de una imagen, el mensaje puede perder sentido cuando esa imagen no se muestra.

Lo recomendable es optimizar las imágenes antes de subirlas, utilizar dimensiones adecuadas y acompañarlas siempre con texto suficiente.

Olvidar la accesibilidad

Una newsletter responsive también debería ser accesible. No basta con que se adapte al móvil. Tiene que poder leerse con comodidad.

Algunas pautas básicas son utilizar buen contraste entre texto y fondo, elegir tamaños de fuente legibles, escribir botones descriptivos y evitar enlaces poco claros como “haz clic aquí”.

También es importante no comunicar información únicamente mediante color. Si algo es importante, debe quedar claro también por el texto o por la estructura del contenido.

Cómo pasar de MJML a HTML para enviar tu newsletter

Cuando termines tu archivo .mjml, tendrás que convertirlo a HTML. Ese será el código que podrás pegar o importar en tu herramienta de email marketing.

Si trabajas desde la terminal, el proceso puede ser tan sencillo como este:

npx mjml newsletter.mjml -o newsletter.html

Después puedes abrir el archivo newsletter.html, revisar el resultado y llevar ese código a la plataforma desde la que vayas a enviar tu campaña.

Checklist antes de enviar tu newsletter

Antes de enviar tu primera newsletter responsive con MJML, revisa esta lista:

  • El asunto es claro y concreto.
  • El preheader complementa el asunto.
  • El diseño se entiende bien en móvil.
  • El CTA principal destaca sin resultar invasivo.
  • Todos los enlaces funcionan correctamente.
  • Las imágenes tienen texto alternativo.
  • El email no depende únicamente de imágenes.
  • El footer incluye la información necesaria.
  • El HTML final se ha probado antes del envío.
  • La newsletter tiene un objetivo principal bien definido.

Esta revisión puede parecer básica, pero evita muchos errores de última hora. En email marketing, los pequeños detalles importan mucho porque, una vez enviado el correo, ya no puedes corregirlo como harías con una página web.

Preguntas frecuentes sobre crear una newsletter responsive con MJML

¿MJML sustituye al HTML en email marketing?

No exactamente. MJML no sustituye al HTML final, sino que te permite escribir una versión más sencilla y legible que después se compila a HTML. Es decir, tú trabajas con MJML, pero la herramienta genera el email responsive HTML que utilizarás en tu plataforma de envío.

¿Necesito saber programar para usar MJML?

No necesitas ser una persona experta, pero sí ayuda tener nociones básicas de HTML y CSS. MJML es más accesible que maquetar emails responsive directamente con tablas, pero sigue siendo una herramienta técnica. Si entiendes la lógica de etiquetas, atributos, secciones y columnas, puedes empezar con ejemplos sencillos e ir avanzando poco a poco.

¿Puedo usar MJML para cualquier tipo de newsletter?

Sí, puedes utilizar MJML para newsletters editoriales, emails promocionales, comunicaciones internas, emails transaccionales o avisos automatizados. Aun así, cada tipo de email necesita una estructura diferente. Una newsletter de blog no debería plantearse igual que una campaña comercial o un email de recuperación de carrito.

Una última idea antes de crear tu primera newsletter

Crear tu primera newsletter responsive con MJML es una forma muy práctica de entrar en el mundo del email marketing sin tener que pelearte desde el primer minuto con tablas anidadas, estilos inline y comportamientos extraños entre clientes de correo.

MJML te permite trabajar con una sintaxis más limpia, ordenar mejor tus bloques y generar un HTML más preparado para email. Sin embargo, la herramienta no lo hace todo por ti.

La calidad de una newsletter depende también de tus decisiones de comunicación: qué mensaje priorizas, cómo estructuras el contenido, qué acción quieres que realice la persona que recibe el email y cómo reduces la fricción para que pueda hacerlo.

Una buena newsletter no es la que tiene más bloques, más botones o más elementos visuales. Es la que se entiende rápido, se lee bien en móvil y acompaña a la persona hacia una acción clara.

Por eso, si estás empezando, mi recomendación es sencilla: crea una primera versión mínima, pruébala, ajústala y aprende de cada envío. Y si quieres reforzar la base antes de seguir avanzando, puedes volver al artículo sobre qué es MJML y por qué facilita la maquetación de emails responsive para entender mejor cómo encaja esta herramienta dentro de un flujo de trabajo de email marketing.

Qué es MJML y por qué facilita la maquetación de emails responsive

Ilustración sobre qué es MJML con un portátil mostrando código MJML y vista previa de un email responsive en móvil.
MJML permite escribir código más limpio y generar emails responsive compatibles con distintos dispositivos.

Maquetar un email responsive puede parecer, al principio, una tarea parecida a crear una pequeña página web: tienes una estructura, imágenes, textos, botones, enlaces y una serie de estilos visuales que quieres respetar. Sin embargo, cuando empiezas a llevar ese diseño a código, aparece una realidad bastante incómoda: el email no funciona igual que la web.

En una página web moderna puedes apoyarte en CSS Grid, Flexbox, hojas de estilo externas, JavaScript, componentes reutilizables y un soporte bastante estable entre navegadores. En cambio, en la maquetación de emails, cada cliente de correo interpreta el HTML y el CSS a su manera. Gmail, Outlook, Apple Mail, Yahoo, Thunderbird o las apps móviles pueden comportarse de forma diferente ante el mismo código.

Aquí es donde entra en juego MJML, una herramienta pensada para simplificar la creación de emails responsive sin tener que pelearte línea por línea con todas las rarezas del HTML para email.

Dicho de forma sencilla: MJML te permite escribir una estructura más limpia, semántica y legible, y después la convierte en el HTML complejo que necesitan muchos clientes de correo.

Qué es MJML

MJML significa Mailjet Markup Language. Es un lenguaje de marcado específico para crear emails responsive de forma más sencilla. No sustituye al HTML en el resultado final, sino que actúa como una capa intermedia.

Tú escribes una estructura más clara, como esta:

<mjml>
  <mj-body>
    <mj-section>
      <mj-column>
        <mj-text>
          Hola, este es mi primer email responsive con MJML.
        </mj-text>
        <mj-button href="https://martagonzalez.dev">
          Leer más
        </mj-button>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>

Después, MJML compila ese código y lo transforma en un HTML mucho más extenso, con tablas, estilos inline, estructuras específicas y ajustes necesarios para que el email se visualice correctamente en diferentes clientes de correo.

La gran ventaja es que no tienes que escribir todo ese HTML manualmente. MJML se encarga de generar buena parte de la estructura técnica que normalmente hace que la maquetación de emails sea lenta, repetitiva y propensa a errores.

MJML no es HTML tradicional

Aunque visualmente se parece a HTML porque utiliza etiquetas, MJML tiene sus propios componentes: mj-section, mj-column, mj-text, mj-image, mj-button, mj-divider, mj-wrapper, entre muchos otros.

Estas etiquetas están pensadas para describir la intención del diseño:

  • mj-section define una sección horizontal del email.
  • mj-column permite dividir una sección en columnas.
  • mj-text añade texto.
  • mj-image inserta imágenes.
  • mj-button crea botones compatibles con email.
  • mj-spacer añade separación vertical.

La idea se parece bastante al trabajo por componentes que usamos habitualmente en desarrollo frontend. Si te interesa este enfoque más estructurado, también puedes profundizar en cómo organizar mejor tus flujos de trabajo con herramientas como Visual Studio Code en el artículo Atajos y trucos para usar Visual Studio Code desde la terminal en Mac.

Por qué maquetar emails responsive es tan complicado

Para entender por qué MJML resulta tan útil, primero conviene comprender el problema que intenta resolver.

La maquetación de emails no sigue las mismas reglas que el desarrollo web moderno. En web, si quieres crear un layout responsive, puedes usar media queries, unidades flexibles, CSS Grid, Flexbox, variables CSS, imágenes adaptativas y componentes reutilizables. En email, muchas de esas herramientas tienen soporte limitado, parcial o directamente inconsistente.

Por eso, un email puede verse perfecto en un cliente de correo y romperse en otro.

El problema de los clientes de correo

Cuando maquetas una web, sueles pensar en navegadores: Chrome, Firefox, Safari o Edge. Aunque cada uno tiene sus particularidades, el soporte de estándares web suele ser razonablemente estable.

En email, el escenario es más complejo. Un mismo correo puede abrirse en Gmail desde navegador, Gmail en Android, Gmail en iOS, Outlook de escritorio, Outlook web, Apple Mail, Yahoo Mail, Thunderbird o incluso clientes corporativos antiguos.

Cada uno puede aplicar reglas distintas. Algunos respetan determinadas propiedades CSS. Otros las ignoran. Algunos eliminan partes del <head>. Otros gestionan las media queries de forma parcial.

Esto obliga a trabajar con mucho más cuidado. No basta con que el diseño se vea bien en una previsualización inicial: también hay que comprobar que la experiencia se mantiene de forma razonable en distintos dispositivos y clientes de correo.

El regreso de las tablas

Una de las cosas que más sorprende cuando vienes del desarrollo web es descubrir que muchos emails todavía se maquetan con tablas.

Sí, tablas.

No porque sean modernas, elegantes o semánticamente ideales, sino porque siguen siendo una de las formas más estables de conseguir layouts compatibles en clientes de correo. Especialmente cuando Outlook entra en escena, las tablas continúan siendo una herramienta habitual para controlar estructuras, anchos, alineaciones y columnas.

Esto hace que el HTML final de un email pueda ser bastante difícil de leer. Incluso un diseño aparentemente sencillo, con una cabecera, una imagen, un bloque de texto y un botón, puede convertirse en muchas líneas de código repetitivo.

Aquí MJML aporta una ventaja clara: te permite escribir con una sintaxis más limpia mientras genera por debajo el HTML necesario para email.

Cómo funciona MJML en la práctica

MJML funciona mediante un proceso de compilación. Tú creas un archivo .mjml, escribes tu estructura con componentes MJML y después generas el HTML final.

Ese HTML es el que puedes utilizar en una plataforma de email marketing, integrar en un sistema transaccional o adaptar a una plantilla concreta.

Estructura básica de un email con MJML

Un documento MJML suele tener esta estructura:

<mjml>
  <mj-head>
    <mj-title>Email de ejemplo</mj-title>
    <mj-preview>Texto de previsualización del email</mj-preview>
  </mj-head>

  <mj-body>
    <mj-section>
      <mj-column>
        <mj-text>
          Contenido principal del email.
        </mj-text>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>

La parte mj-head permite definir información general, como el título, el texto de previsualización, estilos globales o atributos reutilizables. La parte mj-body contiene el contenido visual del email.

Esta separación ayuda a trabajar de forma más ordenada, sobre todo cuando la plantilla empieza a crecer.

Un ejemplo sencillo de layout responsive

Imagina una newsletter con dos columnas: a la izquierda una imagen y a la derecha un texto con un botón.

En HTML tradicional para email, esto puede implicar tablas anidadas, anchos concretos, estilos inline y condiciones específicas para Outlook. En MJML, la estructura podría verse así:

<mj-section background-color="#F8E0EA" padding="32px">
  <mj-column>
    <mj-image src="imagen.jpg" alt="Ejemplo de email responsive" />
  </mj-column>

  <mj-column>
    <mj-text font-size="20px" font-weight="bold">
      Aprende a crear emails responsive
    </mj-text>

    <mj-text font-size="16px" line-height="1.6">
      Con MJML puedes crear campañas más consistentes sin escribir todo el HTML manualmente.
    </mj-text>

    <mj-button href="https://martagonzalez.dev" background-color="#CC2B5E">
      Leer el artículo
    </mj-button>
  </mj-column>
</mj-section>

En escritorio, esas columnas pueden mostrarse una al lado de la otra. En móvil, MJML puede apilarlas para mejorar la lectura. Esta es una de las razones por las que resulta tan interesante para crear emails responsive sin empezar desde cero cada vez.

Ventajas de utilizar MJML

MJML no elimina por completo la necesidad de entender cómo funciona el email HTML, pero sí reduce mucho la fricción inicial. Para proyectos donde se envían newsletters, campañas promocionales, emails transaccionales o comunicaciones periódicas, puede ahorrar tiempo y mejorar la consistencia.

1. Sintaxis más legible

La primera gran ventaja de MJML es su legibilidad.

Un email escrito directamente en HTML puede volverse enorme muy rápido. Si además tienes que añadir estilos inline, tablas, condicionales y estructuras de compatibilidad, el código deja de ser cómodo de mantener.

MJML permite trabajar con una estructura más declarativa:

<mj-button href="#">Comprar ahora</mj-button>

En lugar de tener que escribir manualmente toda la estructura de tablas y estilos necesaria para que ese botón se comporte razonablemente bien en diferentes clientes de correo.

2. Facilita la creación de emails responsive

El objetivo principal de MJML es ayudar a crear emails responsive. Es decir, emails que se adapten mejor a distintos tamaños de pantalla.

Esto es fundamental porque muchas personas leen el correo desde el móvil. Si el email tiene texto demasiado pequeño, columnas que no se adaptan, botones difíciles de pulsar o imágenes que desbordan el ancho de pantalla, la experiencia empeora.

Este punto conecta directamente con la usabilidad. Un email no solo debe verse bien: debe entenderse rápido, facilitar la lectura y guiar hacia una acción clara. Si quieres profundizar en este enfoque, puedes leer también Qué es la usabilidad web: claves para facilitar la navegación de usuario.

3. Reduce errores repetitivos

Cuando maquetas emails a mano, hay muchos pequeños detalles que pueden fallar:

  • Un ancho mal calculado.
  • Un padding que Outlook interpreta de forma diferente.
  • Una imagen sin ancho definido.
  • Un botón que no se centra.
  • Un bloque que se rompe en móvil.
  • Una media query que no se aplica donde esperabas.

MJML no garantiza perfección absoluta en todos los clientes, pero sí ayuda a evitar muchos errores comunes porque parte de componentes ya pensados para email.

4. Mejora la reutilización de plantillas

Otra ventaja importante es que puedes crear bloques reutilizables.

Por ejemplo, puedes tener una estructura base para newsletters con cabecera, hero principal, bloque de contenido, llamada a la acción, artículos destacados y footer. A partir de ahí, solo cambias textos, imágenes, enlaces y colores.

Esto resulta especialmente útil si trabajas con campañas frecuentes o si necesitas mantener una identidad visual coherente.

5. Es más amable para quien viene del desarrollo frontend

Si ya tienes experiencia con HTML y CSS, MJML resulta bastante intuitivo. No tienes que aprender una lógica completamente ajena, sino una sintaxis específica orientada al email.

Para una persona acostumbrada a componentes, secciones, columnas y atributos de estilo, MJML se siente más cercano que escribir tablas anidadas manualmente.

Además, te permite seguir pensando en estructura, jerarquía y experiencia de usuario, algo esencial tanto en páginas web como en emails.

Limitaciones de MJML que conviene conocer

Aunque MJML facilita mucho el trabajo, no conviene presentarlo como una solución mágica. Sigue habiendo límites.

MJML no elimina la necesidad de testear

Un email debería probarse antes de enviarse. Especialmente si forma parte de una campaña importante, un flujo de venta, un lanzamiento o una comunicación transaccional.

Aunque MJML genere HTML responsive, los clientes de correo siguen teniendo diferencias. Por eso, después de compilar tu MJML a HTML, sigue siendo recomendable probar el resultado en distintos entornos.

El objetivo realista no es que el email se vea exactamente igual en todas partes. El objetivo es que sea legible, funcional y coherente en los clientes principales para tu audiencia.

No todo lo que haces en web sirve en email

Este punto es clave.

MJML facilita la maquetación, pero el medio sigue siendo el email. Eso significa que no deberías plantear un email como si fuera una landing page moderna con animaciones complejas, JavaScript, layouts avanzados o interacciones sofisticadas.

En email conviene priorizar la claridad, la compatibilidad, el contraste, el peso razonable, los botones fáciles de pulsar y una jerarquía visual muy clara.

También es importante pensar en accesibilidad. Un email debería tener textos legibles, enlaces comprensibles, buen contraste y alternativas para las imágenes. Si este tema te interesa, puedes ampliar con el artículo La importancia de la accesibilidad web: haciendo Internet accesible para todos.

Puede generar HTML extenso

El HTML resultante de MJML puede ser bastante largo. Esto es normal, porque está generando estructuras compatibles con email.

No deberías valorar MJML por si el HTML final es bonito de leer, sino por si el archivo fuente MJML es mantenible y si el resultado renderiza correctamente.

La ventaja está en trabajar sobre una fuente más limpia y delegar en MJML la parte más repetitiva del marcado final.

MJML frente a maquetar emails a mano

La pregunta lógica es: ¿merece la pena usar MJML o es mejor aprender a maquetar emails directamente con HTML y CSS?

La respuesta depende del contexto.

Si estás aprendiendo desde cero cómo funciona el email HTML, puede ser útil entender las bases: tablas, estilos inline, imágenes, anchos, media queries, compatibilidad y limitaciones. Ese conocimiento te ayudará incluso cuando uses MJML.

Pero si necesitas producir emails responsive de forma eficiente, MJML puede ser una opción muy práctica.

Cuándo tiene sentido usar MJML

MJML tiene mucho sentido cuando necesitas crear newsletters recurrentes, mantener una plantilla base, trabajar con emails transaccionales, reducir errores de compatibilidad o entregar HTML final para una plataforma de email marketing.

También es una buena opción si estás creando un sistema interno de plantillas o si quieres documentar componentes visuales de email para reutilizarlos.

En proyectos donde el contenido se repite con frecuencia, trabajar con una estructura base puede ahorrarte mucho tiempo y ayudarte a mantener una identidad visual más consistente.

Cuándo quizá no necesitas MJML

Puede que no lo necesites si solo vas a crear un email muy puntual y extremadamente simple, o si ya utilizas un editor visual dentro de una plataforma de email marketing y no necesitas tocar código.

También puede no ser ideal si tu equipo ya tiene un sistema propio de plantillas HTML muy probado y mantenido.

Aun así, incluso en esos casos, MJML puede servir para prototipar más rápido y entender mejor la estructura de una plantilla responsive.

Buenas prácticas para crear emails responsive con MJML

Usar MJML no significa olvidarse de las buenas prácticas. Al contrario: cuanto mejor entiendas el diseño para email, mejores resultados obtendrás.

Diseña primero para la lectura

Un email no se consume igual que una página de blog. La persona suele revisarlo rápido, muchas veces desde el móvil y en medio de otras tareas.

Por eso, antes de pensar en efectos visuales, conviene hacerse algunas preguntas:

  • ¿Se entiende el mensaje principal en pocos segundos?
  • ¿El título es claro?
  • ¿El botón principal destaca?
  • ¿El texto se puede leer cómodamente?
  • ¿La imagen aporta información o solo decora?
  • ¿El email tiene una única acción principal?

Un buen email responsive no es solo el que se adapta al ancho de pantalla. Es el que reduce la carga cognitiva y ayuda a tomar una decisión sin esfuerzo.

Esta idea también se puede aplicar al diseño web en general. Por eso, si estás trabajando contenidos, interfaces o landings, puede resultarte útil leer Por qué diseñar primero lo esencial mejora la experiencia de usuario.

Mantén una estructura sencilla

En MJML es fácil crear secciones, columnas y bloques. Pero no conviene abusar.

Para muchos emails, una estructura sencilla funciona mejor:

  • Logo o cabecera.
  • Título principal.
  • Texto introductorio.
  • Imagen o bloque destacado.
  • CTA principal.
  • Contenido secundario.
  • Footer.

Cuantas más columnas, variaciones y bloques añadas, más posibilidades hay de que algo se complique en clientes de correo concretos.

Cuida los botones y los enlaces

Los botones son uno de los elementos más importantes en un email. Si quieres que la persona lea un artículo, confirme una cuenta, compre un producto o descargue un recurso, el CTA debe ser claro.

Con MJML puedes usar mj-button, pero deberías prestar atención al texto, al contraste, al tamaño en móvil, al espaciado alrededor y al enlace final.

Un botón que dice “Leer más” puede funcionar, pero uno que dice “Leer la guía completa” aporta más contexto. Lo mismo ocurre con los enlaces dentro del texto: es mejor usar textos descriptivos que fórmulas genéricas. Sobre este tema, te recomiendo revisar Links accesibles: “haz click aquí” es un crimen.

No dependas solo de las imágenes

Muchos clientes de correo pueden bloquear imágenes por defecto o cargarlas con retraso. Por eso, el mensaje principal no debería depender exclusivamente de una imagen.

Incluye siempre texto real, no solo texto dentro de imágenes. Añade atributos alt descriptivos y asegúrate de que el email sigue teniendo sentido aunque las imágenes no se muestren.

Revisa el peso y la longitud

Un email demasiado pesado puede cargar lento o incluso recortarse en algunos clientes. Aunque MJML facilite la estructura, debes seguir cuidando el contenido final.

Comprime imágenes, evita bloques innecesarios, no añadas estilos excesivos y mantén el mensaje enfocado. En email, menos suele ser más.

MJML en español: por qué puede ser una buena puerta de entrada

Si estás buscando información sobre MJML en español, probablemente vienes de uno de estos escenarios: quieres aprender a crear emails responsive desde cero, te has cansado de pelearte con tablas HTML, necesitas adaptar diseños de newsletter a código o trabajas con marketing, frontend o automatizaciones.

MJML puede ser una muy buena puerta de entrada porque te permite entender la lógica de la maquetación de emails sin empezar directamente por el lado más áspero.

En lugar de escribir una estructura enorme de tablas desde el minuto uno, puedes empezar con componentes comprensibles. Después, poco a poco, puedes ir revisando el HTML compilado para entender qué está generando MJML por debajo.

Este enfoque es especialmente útil si ya tienes base de HTML y CSS, pero todavía no has trabajado en profundidad con email HTML.

Ejemplo de plantilla básica con MJML

A continuación tienes una estructura sencilla para una newsletter introductoria:

<mjml>
  <mj-head>
    <mj-title>Newsletter responsive con MJML</mj-title>
    <mj-preview>Aprende a crear emails responsive de forma más sencilla.</mj-preview>
    <mj-attributes>
      <mj-all font-family="Arial, sans-serif" />
      <mj-text font-size="16px" line-height="1.6" color="#020101" />
      <mj-button background-color="#CC2B5E" color="#ffffff" border-radius="6px" />
    </mj-attributes>
  </mj-head>

  <mj-body background-color="#F5F5F5">
    <mj-section background-color="#ffffff" padding="32px">
      <mj-column>
        <mj-text font-size="24px" font-weight="bold">
          Qué es MJML y por qué deberías conocerlo
        </mj-text>

        <mj-text>
          MJML facilita la creación de emails responsive mediante una sintaxis más clara y componentes pensados para email.
        </mj-text>

        <mj-button href="https://martagonzalez.dev">
          Leer artículo completo
        </mj-button>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>

Esta plantilla es básica, pero muestra la idea principal: defines una estructura clara, aplicas algunos estilos globales y trabajas con componentes específicos para email.

Errores comunes al empezar con MJML

Aunque MJML sea más amable que el HTML para email escrito a mano, hay algunos errores frecuentes que conviene evitar.

Creer que todo será idéntico en todos los clientes

La consistencia absoluta en email es difícil. La consistencia funcional, en cambio, sí es una meta razonable.

Tu email no tiene que verse milimétricamente igual en todos los clientes, pero sí debe ser comprensible, legible y funcional en los entornos principales.

Diseñar emails demasiado complejos

A veces se intenta llevar al email una lógica visual propia de una web completa. Eso puede generar problemas.

Un email debería tener una jerarquía clara y un objetivo concreto. Si necesitas explicar muchas cosas, quizá lo mejor sea llevar a la persona a una landing o a un artículo, no meterlo todo dentro del correo.

No revisar el HTML final

Aunque trabajes en MJML, el resultado final será HTML. Conviene revisarlo, probarlo y asegurarse de que se integra bien con la herramienta desde la que vas a enviar el email.

Algunas plataformas pueden modificar el código, añadir etiquetas propias o interpretar ciertos estilos de forma particular.

Preguntas frecuentes sobre MJML

¿Qué es MJML?

MJML es un lenguaje de marcado creado para facilitar la creación de emails responsive. Permite escribir una estructura más limpia mediante componentes como mj-section, mj-column, mj-text, mj-image o mj-button, y después compilar ese código a HTML compatible con email.

¿MJML sirve para crear emails responsive?

Sí. De hecho, ese es uno de sus principales objetivos. MJML ayuda a crear estructuras que se adaptan mejor a distintos tamaños de pantalla, especialmente mediante secciones y columnas que pueden reorganizarse en móvil.

¿Necesito saber HTML y CSS para usar MJML?

No necesitas ser experta en email HTML para empezar, pero sí es recomendable conocer las bases de HTML y CSS. MJML simplifica mucho la maquetación, pero entender conceptos como estructura, jerarquía, estilos, imágenes, enlaces y responsive design te ayudará a crear mejores emails.

MJML no hace magia, pero sí reduce mucho la fricción

MJML no convierte la maquetación de emails en algo perfecto ni elimina todas las peculiaridades de los clientes de correo. El email sigue siendo un entorno complejo, con reglas propias y muchas diferencias respecto al desarrollo web moderno.

Pero precisamente por eso MJML resulta tan valioso.

En lugar de obligarte a escribir desde cero estructuras largas, repetitivas y difíciles de mantener, te permite trabajar con una sintaxis más clara y orientada a componentes. Esto reduce errores, acelera el desarrollo y hace que crear emails responsive sea una tarea más accesible.

Si estás empezando con la maquetación de emails, MJML puede ser una excelente herramienta para entender cómo se estructuran las plantillas, cómo se organizan las columnas y cómo se prepara un email para verse correctamente en distintos dispositivos.

La clave está en usarlo con criterio: estructura sencilla, buen contenido, diseño claro, pruebas reales y una mentalidad adaptada al medio. Porque un buen email no es el más complejo, sino el que llega, se entiende y funciona.