Bootstrap

Bootstrap

Tutorial Bootstrap: Modales y ventanas emergentes

Bootstrap CSS 5.3: Aprende a crear y personalizar modales y ventanas emergentes utilizando HTML, CSS y JavaScript en tus proyectos web. Pasos sencillos y claros.

¿Qué es un modal en Bootstrap y para qué sirve?

Un modal en Bootstrap es un componente de interfaz de usuario que se presenta como una ventana emergente sobre el contenido principal de la página. Este componente es utilizado para mostrar contenido adicional sin navegar fuera de la página actual. Los modales son útiles para una variedad de casos de uso, como formularios de inicio de sesión, confirmaciones de acciones, galerías de imágenes, y más.

Los modales en Bootstrap se implementan utilizando una combinación de HTML, CSS y JavaScript. El componente se puede configurar y personalizar mediante clases específicas y atributos de datos proporcionados por Bootstrap. A continuación se detallan algunas de las características principales de los modales:

  • Estructura HTML: Un modal típicamente incluye un contenedor .modal, un contenedor .modal-dialog, un contenedor .modal-content, y elementos opcionales como .modal-header, .modal-body, y .modal-footer.
  • Atributos de datos: Bootstrap permite activar modales utilizando atributos de datos como data-bs-toggle="modal" y data-bs-target="#exampleModal".
  • JavaScript: Bootstrap utiliza JavaScript para manejar la lógica del modal, incluyendo la apertura y el cierre del mismo. Esto se puede hacer de manera nativa utilizando JavaScript o mediante el uso de jQuery.

Ejemplo básico de un modal en Bootstrap:

<!-- Botón para abrir el modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#miModal">
  Abrir modal
</button>

<!-- Estructura del modal -->
<div class="modal fade" id="miModal" tabindex="-1" aria-labelledby="miModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-body">
        Contenido del modal...
      </div>
    </div>
  </div>
</div>

Botón de modal

Modal abierto

En este ejemplo, el botón con la clase .btn-primary y los atributos data-bs-toggle="modal" y data-bs-target="#exampleModal" se utiliza para abrir el modal. La estructura del modal incluye un contenedor .modal, que contiene .modal-dialog, y dentro de este, el .modal-content. El encabezado, el cuerpo y el pie del modal están definidos por las clases .modal-header, .modal-body, y .modal-footer respectivamente.

Los modales en Bootstrap también pueden ser configurados para tener diferentes tamaños (.modal-sm, .modal-lg, .modal-xl) y se pueden hacer desplazables si el contenido es muy largo (.modal-dialog-scrollable). Además, se pueden personalizar con estilos CSS adicionales o mediante la utilización de JavaScript para manejar eventos específicos como la apertura, el cierre, y la interacción con el contenido del modal.

Componentes Bootstrap de un modal y su contenido en Bootstrap

Un modal en Bootstrap está compuesto por varios elementos clave que se organizan en una estructura específica para asegurar su correcto funcionamiento y apariencia. A continuación, se detallan los componentes principales que conforman un modal en Bootstrap y cómo se utilizan para estructurar su contenido.

Contenedor .modal: Este es el contenedor principal que envuelve todo el contenido del modal. La clase .modal asegura que el modal se comporte y se vea de acuerdo con los estilos y comportamientos predeterminados de Bootstrap. Este contenedor también debe incluir el atributo tabindex="-1" para gestionar el foco del teclado y los atributos aria-labelledby y aria-hidden para la accesibilidad.

Contenedor .modal-dialog: Dentro del contenedor .modal, se encuentra el contenedor .modal-dialog, que define el área visible del modal. Este contenedor puede ser modificado con clases adicionales para ajustar su tamaño (.modal-sm, .modal-lg, .modal-xl) y para hacerlo desplazable (.modal-dialog-scrollable).

Contenedor .modal-content: Este es el contenedor que alberga el contenido real del modal, incluyendo el encabezado, el cuerpo y el pie. La clase .modal-content aplica estilos y comportamientos específicos al contenido del modal.

Encabezado del modal .modal-header: El encabezado del modal, definido por la clase .modal-header, generalmente contiene el título del modal y un botón de cierre. El botón de cierre utiliza la clase .btn-close y el atributo data-bs-dismiss="modal" para permitir a los usuarios cerrar el modal.

Título del modal .modal-title: Dentro del encabezado, el título del modal se define utilizando la clase .modal-title. Este elemento es típicamente un h5 o h4 y su contenido describe brevemente el propósito del modal.

Cuerpo del modal .modal-body: El cuerpo del modal, definido por la clase .modal-body, contiene el contenido principal del modal. Este puede incluir texto, formularios, imágenes, o cualquier otro tipo de contenido HTML.

Pie del modal .modal-footer: El pie del modal, definido por la clase .modal-footer, generalmente contiene botones de acción, como botones de guardar o cancelar. Estos botones permiten a los usuarios realizar acciones específicas o cerrar el modal.

Ejemplo de código de un modal con todos estos componentes:

<!-- Botón para abrir el modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
  Abrir modal
</button>

<!-- Estructura del modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Título del modal</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        Contenido del modal...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
        <button type="button" class="btn btn-primary">Guardar cambios</button>
      </div>
    </div>
  </div>
</div>

Modal completo

En este ejemplo, el botón con la clase .btn-primary y los atributos data-bs-toggle="modal" y data-bs-target="#exampleModal" se utiliza para abrir el modal. La estructura del modal incluye un contenedor .modal, que contiene .modal-dialog, y dentro de este, el .modal-content. El encabezado, el cuerpo y el pie del modal están definidos por las clases .modal-header, .modal-body, y .modal-footer respectivamente.

Los modales en Bootstrap también pueden ser configurados para tener diferentes tamaños (.modal-sm, .modal-lg, .modal-xl) y se pueden hacer desplazables si el contenido es muy largo (.modal-dialog-scrollable). Además, se pueden personalizar con estilos CSS adicionales o mediante la utilización de JavaScript para manejar eventos específicos como la apertura, el cierre, y la interacción con el contenido del modal.

Configuraciones adicionales como la animación de apertura y cierre del modal se gestionan mediante las clases fade y show. La clase fade añade una transición de opacidad suave, mientras que la clase show se añade dinámicamente cuando el modal se muestra.

Ejemplo de un modal con desplazamiento y tamaño grande:

<!-- Botón para abrir el modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#largeScrollableModal">
  Abrir modal grande y desplazable
</button>

<!-- Estructura del modal -->
<div class="modal fade" id="largeScrollableModal" tabindex="-1" aria-labelledby="largeScrollableModalLabel" aria-hidden="true">
  <div class="modal-dialog modal-lg modal-dialog-scrollable">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="largeScrollableModalLabel">Título del modal grande y desplazable</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        Contenido largo del modal...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
        <button type="button" class="btn btn-primary">Guardar cambios</button>
      </div>
    </div>
  </div>
</div>

Modal grande y desplazable

Este ejemplo muestra cómo se puede configurar un modal grande y desplazable utilizando las clases modal-lg y modal-dialog-scrollable. El contenido del cuerpo puede ser extenso, y el modal permitirá el desplazamiento dentro del área visible.

Lanzar un modal en Bootstrap

Para lanzar un modal en Bootstrap, se pueden utilizar tanto atributos de datos en el HTML como métodos de JavaScript. A continuación, se describen ambas técnicas de manera detallada.

Usando atributos de datos

La forma más sencilla de lanzar un modal es mediante el uso de atributos de datos en el HTML. Esto implica añadir los atributos data-bs-toggle="modal" y data-bs-target="#idDelModal" al elemento que activará el modal, como un botón o un enlace.

Ejemplo de código:

<!-- Botón para abrir el modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#miModal">
  Abrir modal
</button>

<!-- Estructura del modal -->
<div class="modal fade" id="miModal" tabindex="-1" aria-labelledby="miModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="miModalLabel">Título del modal</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        Contenido del modal...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
        <button type="button" class="btn btn-primary">Guardar cambios</button>
      </div>
    </div>
  </div>
</div>

En este ejemplo, al hacer clic en el botón con la clase .btn-primary, se abrirá el modal identificado por #miModal.

Usando JavaScript

También es posible controlar la apertura y el cierre de un modal mediante JavaScript. Bootstrap proporciona una API JavaScript para este propósito, con métodos como .modal('show') y .modal('hide').

Ejemplo de código:

<!-- Botón para abrir el modal -->
<button type="button" class="btn btn-primary" id="abrirModal">
  Abrir modal
</button>

<!-- Estructura del modal -->
<div class="modal fade" id="miModalJS" tabindex="-1" aria-labelledby="miModalJSLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="miModalJSLabel">Título del modal</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        Contenido del modal...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
        <button type="button" class="btn btn-primary">Guardar cambios</button>
      </div>
    </div>
  </div>
</div>

<!-- Script para controlar el modal con JavaScript -->
<script>
  document.getElementById('abrirModal').addEventListener('click', function () {
    var miModal = new bootstrap.Modal(document.getElementById('miModalJS'));
    miModal.show();
  });
</script>

En este ejemplo, se utiliza un evento click en el botón con el ID abrirModal para crear una instancia del modal y mostrarlo mediante el método show().

Métodos adicionales de la API de JavaScript

Bootstrap incluye varios métodos adicionales para trabajar con modales mediante JavaScript:

  • show: muestra el modal.
  • hide: oculta el modal.
  • toggle: alterna entre mostrar y ocultar el modal.
  • handleUpdate: ajusta el modal si el contenido cambia dinámicamente.

Ejemplo de uso de varios métodos:

<!-- Botones para controlar el modal -->
<button type="button" class="btn btn-primary" id="mostrarModal">Mostrar modal</button>
<button type="button" class="btn btn-secondary" id="ocultarModal">Ocultar modal</button>
<button type="button" class="btn btn-info" id="alternarModal">Alternar modal</button>

<!-- Estructura del modal -->
<div class="modal fade" id="miModalControlado" tabindex="-1" aria-labelledby="miModalControladoLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="miModalControladoLabel">Título del modal</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        Contenido del modal...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cerrar</button>
        <button type="button" class="btn btn-primary">Guardar cambios</button>
      </div>
    </div>
  </div>
</div>

<!-- Script para controlar el modal con JavaScript -->
<script>
  var miModalControlado = new bootstrap.Modal(document.getElementById('miModalControlado'));

  document.getElementById('mostrarModal').addEventListener('click', function () {
    miModalControlado.show();
  });

  document.getElementById('ocultarModal').addEventListener('click', function () {
    miModalControlado.hide();
  });

  document.getElementById('alternarModal').addEventListener('click', function () {
    miModalControlado.toggle();
  });
</script>

En este ejemplo, se crean tres botones que utilizan los métodos show(), hide() y toggle() para controlar la visibilidad del modal.

Estas técnicas permiten lanzar y controlar modales en Bootstrap de manera flexible y eficiente, adaptándose a diferentes necesidades y escenarios.

Certifícate en Bootstrap con CertiDevs PLUS

Ejercicios de esta lección Modales y ventanas emergentes

Evalúa tus conocimientos de esta lección Modales y ventanas emergentes con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de Bootstrap

Accede a todas las lecciones de Bootstrap y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Certificados de superación de Bootstrap

Supera todos los ejercicios de programación del curso de Bootstrap y obtén certificados de superación para mejorar tu currículum y tu empleabilidad.

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender qué es un modal en Bootstrap y sus casos de uso.
  • Implementar la estructura HTML básica de un modal en Bootstrap.
  • Utilizar atributos de datos para lanzar modales.
  • Manejar modales mediante la API de JavaScript de Bootstrap.
  • Personalizar tamaños y estilos de modales.
  • Incorporar accesibilidad en la creación de modales.
  • Aplicar configuraciones avanzadas como deslizamiento de contenido y animaciones.