Modal

Los modales muestran información importante que las personas usuarias deben reconocer. Aparecen en forma de ventana sobre la interfaz y bloquean el flujo de trabajo hasta que se selecciona una acción.


Uso

Cuándo usar

  • Utilizar los modales para confirmar acciones o completar tareas que requieran toda la atención de la persona usuaria.
  • Usar los modales con moderación ya que interrumpen el flujo de trabajo hasta que se seleccione una acción.

Cuándo no usar

  • Evitar usar modales para informar sobre el estado del sistema. En esos casos utilizar Alertas
  • No utilizar modales para mensajes a modo de aviso general. Para esos casos utilizar Banners
  • No usar modales sin la acción de una persona usuaria. Por ejemplo, tocar un botón, un enlace o un ícono.

Tipos

Modal de reconocimiento

Estos modales comunican información importante que las personas usuarias deben reconocer. Poseen un único botón principal que debe estar ubicado del lado derecho del componente.

Los modales de reconocimiento pueden ser descartados haciendo clic en la acción principal, presionando la tecla ESC en el teclado o mismo haciendo clic por fuera del modal.

Modal de reconocimiento

Modal de confirmación

Son utilizados para validar las decisiones de las personas usuarias. Este tipo de modal requiere que se realice una acción para que el mismo se complete y se cierre. Posee botones de cancelación y de acción principal. El botón secundario se debe ubicar a la izquierda y el botón principal a la derecha.

Los modales de confirmación son persistentes hasta que se descartan haciendo clic en la acción principal, en el botón secundario, presionando la tecla ESC en el teclado o mismo haciendo clic por fuera del modal.

Modal de confirmación

Modal de peligro

Son utilizados cuando una persona usuaria necesita confirmar una decisión que afectará su experiencia de manera negativa o irreversible. En este modal el botón principal se reemplaza por un botón de peligro y se descarta de la misma forma que los modales de confirmación.

Modal de peligro

Contexto de uso

Título como único mensaje

El título del modal puede incluír el mensaje completo para asegurar la claridad visual del componente y que la descripción no comunique información repetitiva. Incluso puede cotener una volanta para anteceder el título.

Modal contexto de uso

El tamaño del desplegable se adaptará a la cantidad de caracteres que contenga el mismo. En caso de no poder resumir la información, superando esta el ancho máximo de 4 columnas, se truncará el texto cortando la última palabra y agregando tres (3) puntos que denoten la continuidad de dicha información.

Estado focus

Cuando un modal se abre, el foco inicial debe estar en la primera ubicación que acepte la entrada de información de una persona usuaria. Por ejemplo, si el modal contiene un formulario, el enfoque debe establecerse automáticamente en el primer campo.

Sin embargo, el uso de formularios dentro de los modales es opcional. Si se trata de un modal que no posee campos, el foco debe estar en el botón principal y permanecer en el cuadro de diálogo hasta que la persona usuaria lo cierre.

Modal estado focus

Tipos

Modal de confirmación

<button 
  type="button" 
  class="btn btn-primary" 
  data-bs-toggle="modal" 
  data-bs-target="#exampleModal1"
>
  Modal de confirmación
</button>
<div class="modal fade" tabindex="-1" id="exampleModal1" aria-labelledby="exampleModal1Label" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered modal-sm">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class="modal-title" id="exampleModal1Label">¡Importante!</h4>
      </div>
      <div class="modal-body">
        <p>
          Antes de realizar la ficha de salud, 
          tené en cuenta haber realizado los pasos previos correspondientes.
        </p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-outline-primary" data-bs-dismiss="modal">
          Volver atrás
        </button>
        <button type="button" class="btn btn-primary">Continuar</button>
      </div>
    </div>
  </div>
</div>

Modal de peligro

<button 
  type="button" 
  class="btn btn-primary" 
  data-bs-toggle="modal" 
  data-bs-target="#exampleModal2"
>
  Modal de peligro
</button>
<div class="modal fade" tabindex="-1" id="exampleModal2" aria-labelledby="exampleModal2Label" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered modal-sm">
    <div class="modal-content">
      <div class="modal-header">
        <h4 class="modal-title" id="exampleModal2Label">Eliminar documento</h4>
      </div>
      <div class="modal-body">
        <p>El documento que seleccionaste será eliminado.</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-outline-secondary" data-bs-dismiss="modal">
          Cancelar
        </button>
        <button type="button" class="btn btn-danger">Eliminar</button>
      </div>
    </div>
  </div>
</div>

Modal de reconocimiento

<button 
  type="button" 
  class="btn btn-primary" 
  data-bs-toggle="modal" 
  data-bs-target="#exampleModal3"
>
  Modal de reconocimiento
</button>
<div class="modal fade" tabindex="-1" id="exampleModal3" aria-labelledby="exampleModal3Label" aria-hidden="true">
  <div class="modal-dialog modal-dialog-centered modal-sm">
    <div class="modal-content">
      <div class="modal-header unbordered">
        <small>CARGA EXITOSA</small>
        <h4 class="modal-title" id="exampleModal3Label">Los archivos se cargaron correctamente</h4>
      </div>
      <div class="modal-footer">
        <button 
          type="button" 
          class="btn btn-primary" 
          data-bs-dismiss="modal"
        >
          Aceptar
        </button>
      </div>
    </div>
  </div>
</div>

Anatomía

Modal anotomia
ElementoCarácter
1. Volanta (Opcional)Texto breve de contexto que antecede al título. Se utiliza para reforzar la categoría, estado o tipo de acción del modal (por ejemplo: Advertencia, Confirmación, Paso 2 de 3).
2. TítuloTítulos simples que comuniquen claramente el efecto principal de la acción que esté a punto de realizar una persona. Lo ideal es que los títulos usen la misma frase o una similar a la llamada a la acción que llevó a alguien al cuadro de diálogo en primer lugar.
3. DescripciónTexto explicativo que amplía el contexto del título. Brinda información adicional, instrucciones o consecuencias de la acción
4. AccionablesIncluye una acción primaria (destacada) y, opcionalmente, una secundaria para cancelar o realizar una alternativa.

Navegación alternativa

El componente de modal está construido para ser accesible mediante navegación por teclado y reconocible por lectores de pantalla, comunicando su estado de forma clara.

TABSHIFT + TABENTERSPACESCAPE
  • Tab / Shift + Tab
    Permiten navegar únicamente entre los elementos interactivos dentro del modal. El foco queda atrapado mientras el modal esté abierto (focus trap).
  • Enter / Space
    Activan el elemento enfocado, como botones de acción.
  • Escape (ESC)
    Cierra el modal y devuelve el foco al elemento que lo activó, siempre que el cierre esté habilitado.
Modal navegacion alternativa

Al abrirse el modal, el foco debe posicionarse automáticamente en el primer elemento interactivo relevante (generalmente el botón primario si es un modal sin campos).

Mientras el modal esté visible, el contenido de fondo no debe ser navegable ni interactivo.

Cuando se cierra el modal, el foco debe volver al elemento que activó el modal. Esto permite a los usuarios de teclados y lectores de pantalla continuar el contexto en el que abrieron originalmente el modal.

Etiquetado descriptivo

Para cumplir con buenas prácticas de accesibilidad (WCAG + WAI-ARIA), recomendamos proporcionar etiquetas accesible alternativa que comunique claramente el estado del componente.

Recomendamos:

  • Role="dialog". Define el contenedor del modal como un cuadro de diálogo.
  • Vincular el título del modal con el contenedor del diálogo con aria-labelledby, permitiendo que los lectores de pantalla anuncien correctamente el encabezado al abrirse.
  • Asociar la descripción adicional (opcional) mediante aria-describedby, cuando exista contenido explicativo y simple. Es aconsejable omitir la especificación aria-describedby si el contenido del modal incluye estructuras semánticas, como listas, tablas o varios párrafos, que deben percibirse para comprender fácilmente el contenido, es decir, si el contenido sería difícil de entender cuando se anuncia como una sola cadena ininterrumpida.
<div class="modal fade" tabindex="-1" id="exampleModal1" role=”dialog” aria-modal=”true” aria-labelledby="exampleModal1Label" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered modal-sm">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title" id="exampleModal1Label">¡Importante!</h4> </div>
            <div class="modal-body">
                <p id=”exampleModal1Label”> Antes de realizar la ficha de salud, tené en cuenta haber realizado los pasos previos correspondientes. </p>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-outline-primary" data-bs-dismiss="modal"> Volver atrás </button>
                <button type="button" class="btn btn-primary">Continuar</button>
            </div>
        </div>
    </div>
</div>

Criterios WCAG aplicados

Success Criterion 1.3.1 Info and Relationships (Level A)

La información, la estructura y las relaciones transmitidas a través de la presentación pueden determinarse mediante programación o están disponibles en el texto.

Success Criterion 1.4.11 Non-Text Contrast (Level AA)

La presentación visual de elementos de la interfaz de usuario y objetos gráficos tiene por lo menos una relación de contraste de 3:1 con respecto a los colores adyacentes.

Success Criterion 1.4.3 Contrast (Minimum) (Level AA)

La presentación visual de texto y de imágenes de texto tiene una relación de contraste de por lo menos 4.5:1, excepto textos grandes e imágenes de texto grande que tienen un contraste de por lo menos 3:1, textos o imágenes que son parte de un componente inactivo de interfaz de usuario o son pura decoración, o logotipos.

Success Criterion 1.4.4 Resize Text (Level AA)

Excepto por los subtítulos e imágenes de texto, el texto puede redimensionarse hasta un 200 % sin tecnología de asistencia, sin pérdida de contenido ni funcionalidad.

Success Criterion 1.4.10 Reflow (Level AA)

El contenido puede presentarse sin pérdida de información o funcionalidad y sin necesidad de desplazarse en dos dimensiones, siempre que el desplazamiento vertical se ajuste a un ancho equivalente a 320 píxeles CSS y el desplazamiento horizontal a una altura equivalente a 256 píxeles CSS, excepto en aquellas partes del contenido que requieran un diseño bidimensional para su uso o significado.

Success Criterion 2.1.1 Keyboard (Level A)

Todas las funcionalidades del contenido se puede operar a través de una interfaz de teclado.

Success Criterion 2.1.2 No Keyboard Trap (Level A)

Si el foco del teclado puede moverse a un componente de la página utilizando una interfaz de teclado, también debe ser posible mover el foco fuera de ese componente usando únicamente la misma interfaz de teclado. Si se requiere algo más que las teclas de flecha, tabulador u otros métodos estándar para salir, se debe informar al usuario sobre el método necesario para mover el foco.

Success Criterion 2.4.3 Focus Order (Level A)

Si una página web puede navegarse de forma secuencial y las secuencias de navegación afectan el significado o la operación, los componentes enfocables reciben el foco en un orden que preserve el significado y la operabilidad.

Success Criterion 2.4.7 Focus Visible (Level AA)

Cualquier interfaz de usuario operable por teclado tiene un modo de operación donde el indicador de enfoque del teclado es visible.

Success Criterion 3.2.3 Consistent Navigation (Level AA)

Los mecanismos de navegación que se repiten en varias páginas web dentro de un conjunto de páginas aparecen en el mismo orden relativo cada vez que se repiten, a menos que el usuario inicie un cambio.

Success Criterion 4.1.2 Name, Role, Value (Level A)

Para todos los componentes de la interfaz de usuario (incluidos, entre otros: elementos de formulario, enlaces y componentes generados por scripts), el nombre y la función se pueden determinar mediante programación; los estados, propiedades y valores que puede establecer el usuario se pueden configurar mediante programación; y la notificación de cambios en estos elementos está disponible para los agentes de usuario, incluidas las tecnologías de asistencia.

Navegación de pie de página