Modal

Overlay de contenido sin cambiar de página

stable v1.0.0

Preview

Modal real del canon: backdrop, focus trap, cierre por Escape / click en backdrop / botón "Cerrar", scroll bloqueado y Lenis stop/start. El trigger es un <button> con data-modal apuntando al id.

Props

PropTipoNota
idstringRequerida. Los triggers usan data-modal="id".
titlestringRequerida. Se renderiza como <p>, no heading.
image, imageAltstringOpcional. Una imagen máximo, arriba, recorta a las esquinas del panel.
metadatastringOpcional. Inline con "·".
closeLabelstringDefault "Cerrar".
slot bodyn/aPárrafos del cuerpo (máximo 3).

Anatomía

ElementoFamiliaDesktopMobile
Backdropn/a#000 al 60%Igual
Paneln/amax-width 720px, radius 16pxIgual
TitleAleo28px / 40022px
BodyGeorama16px / 40016px
MetadataGeorama12px / 400, secondary (--text-caption)12px
Close buttonAleo"Cerrar", 18px, bottom-rightFull width, centered

Comportamiento

AcciónAnimación
AbrirBackdrop + panel fade in, panel scale 0.98→1, 0.3s ease-out
CerrarFade out 0.2s ease-in
Cerrar víasClick backdrop, botón "Cerrar", tecla Escape

Body scroll se bloquea. Focus trap dentro del modal. Lenis stop/start.

Restricciones

  • Máximo 3 párrafos de body.
  • Una imagen máximo. Sin galería.
  • Sin formularios, sin video, sin modales anidados.
  • Sin navegación entre modales.
  • Sin cambio de URL. Modales son efímeros.
  • display: none cuando cerrado, no opacity: 0 (evita precargar imágenes).

Decisiones

DecisiónPor qué
Texto "Cerrar", no icono ×Enfoque tipográfico. Más explícito.
Cerrar abajo, no arriba-derechaEl lector termina el contenido y encuentra el cierre
Max 3 párrafosFuerza curación. Contenido largo merece su página
display:none, no opacity:0Evita que el browser precargue imágenes en modales ocultos
<button> como trigger, no <a>Modales no navegan. <a> con href vacío falla accesibilidad