¿Cómo cambiar el punto de quiebre del navbar colapsable de Bootstrap?

-

Problema: Personalizar el punto de quiebre de la barra de navegación de Bootstrap

El punto de quiebre de colapso de la barra de navegación de Bootstrap determina cuándo el menú de la barra cambia de un diseño horizontal a uno vertical para dispositivos móviles. Es posible que el punto de quiebre predeterminado no se ajuste a las necesidades de diseño o contenido de tu sitio web, por lo que quizás necesites personalizarlo.

Cambio del punto de quiebre del colapso de la barra de navegación

Método de Bootstrap 5

Bootstrap 5 permite controlar el punto de quiebre del colapso de la barra de navegación usando la clase navbar-expand. Así es como funciona:

  • Agrega navbar-expand a tu barra de navegación para un diseño que nunca se colapsa.
  • Elimina la clase navbar-expand para una barra de navegación que siempre permanece en modo colapsado.

Para un mayor control, Bootstrap 5 ofrece estas opciones:

  • navbar-expand-sm: Se expande en pantallas más anchas de 576px
  • navbar-expand-md: Se expande en pantallas más anchas de 768px
  • navbar-expand-lg: Se expande en pantallas más anchas de 992px
  • navbar-expand-xl: Se expande en pantallas más anchas de 1200px
  • navbar-expand-xxl: Se expande en pantallas más anchas de 1400px

Consejo: Uso de navbar-expand-lg

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <div class="container-fluid">
    <a class="navbar-brand" href="#">Brand</a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarNav">
      <ul class="navbar-nav">
        <li class="nav-item">
          <a class="nav-link active" aria-current="page" href="#">Home</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Features</a>
        </li>
        <li class="nav-item">
          <a class="nav-link" href="#">Pricing</a>
        </li>
      </ul>
    </div>
  </div>
</nav>

Enfoque de Bootstrap 4

Bootstrap 4 usa un sistema similar con clases navbar-expand-*, pero con diferentes puntos de quiebre:

  • navbar-expand-sm: Menú móvil en pantallas menores de 576px
  • navbar-expand-md: Menú móvil en pantallas menores de 768px
  • navbar-expand-lg: Menú móvil en pantallas menores de 992px
  • navbar-expand-xl: Menú móvil en pantallas menores de 1200px

Para una barra de navegación que nunca usa el menú móvil, usa navbar-expand. Si quieres el menú móvil en todos los anchos, no uses ninguna clase navbar-expand-*.

También puedes establecer puntos de quiebre personalizados en Bootstrap 4. Por ejemplo, para establecer un punto de quiebre en 1300px, crea una nueva clase como navbar-expand-custom y define su comportamiento usando consultas de medios CSS.

Ejemplo: Punto de quiebre personalizado en Bootstrap 4

Para crear un punto de quiebre personalizado en 1300px, agrega este CSS:

@media (min-width: 1300px) {
  .navbar-expand-custom {
    flex-flow: row nowrap;
    justify-content: flex-start;
  }
  .navbar-expand-custom .navbar-nav {
    flex-direction: row;
  }
  .navbar-expand-custom .navbar-nav .nav-link {
    padding-right: .5rem;
    padding-left: .5rem;
  }
  .navbar-expand-custom .navbar-collapse {
    display: flex!important;
    flex-basis: auto;
  }
  .navbar-expand-custom .navbar-toggler {
    display: none;
  }
}

Luego usa la clase navbar-expand-custom en tu barra de navegación.

Implementación de puntos de quiebre personalizados

Consultas de medios CSS

Las consultas de medios CSS te permiten crear puntos de quiebre personalizados para tu barra de navegación, dándote control sobre cuándo se colapsa. Este método funciona para Bootstrap 4 y 5, y puede usarse con cualquier preprocesador CSS, incluyendo Stylus.

Para implementar un punto de quiebre personalizado usando consultas de medios CSS:

  1. Elige el ancho de tu punto de quiebre (por ejemplo, 1000px).
  2. Escribe una consulta de medios para pantallas por debajo de este ancho.
  3. Añade reglas CSS para cambiar el diseño y comportamiento de la barra de navegación.

Aquí tienes un ejemplo de cómo establecer un punto de quiebre personalizado a 1000px:

@media (max-width: 1000px) {
  .navbar-toggler {
    display: block;
  }
  .navbar-collapse {
    display: none;
  }
  .navbar-collapse.show {
    display: block;
  }
  .navbar-nav {
    flex-direction: column;
  }
}

Este CSS hace lo siguiente:

  • Muestra el botón de alternancia de la barra de navegación (menú hamburguesa) por debajo de 1000px
  • Oculta el contenido de la barra de navegación por defecto
  • Muestra el contenido de la barra de navegación cuando se añade la clase 'show' (típicamente por JavaScript cuando se hace clic en el botón de alternancia)
  • Apila los elementos de navegación verticalmente

Para ajustar los estilos de la barra de navegación para diferentes tamaños de pantalla, puedes añadir más reglas dentro de tu consulta de medios:

@media (max-width: 1000px) {
  /* Reglas anteriores */

  .navbar-nav .nav-item {
    margin-bottom: 10px;
  }
  .navbar-brand {
    margin-right: auto;
  }
  .navbar .container {
    flex-wrap: wrap;
  }
}

Estas reglas adicionales:

  • Añaden espacio entre los elementos de navegación cuando están apilados
  • Mueven la marca al lado izquierdo
  • Permiten que el contenedor de la barra de navegación envuelva su contenido

Ejemplo: Ajuste fino de los puntos de quiebre

Comienza con un punto de quiebre más grande y redúcelo gradualmente mientras pruebas en diferentes dispositivos. Esto te ayuda a encontrar el punto óptimo donde el diseño de tu barra de navegación se ve bien tanto en pantallas de escritorio como en móviles. Usa las herramientas de desarrollo del navegador para simular diferentes tamaños de pantalla y ajusta tu consulta de medios en consecuencia.

Métodos Alternativos

Enfoque JavaScript

JavaScript ofrece otra forma de controlar el comportamiento de colapso de la barra de navegación, dándote más control sobre la capacidad de respuesta de tu barra de navegación.

Para usar JavaScript para el colapso de la barra de navegación:

  1. Elimina las clases de colapso predeterminadas de Bootstrap de tu barra de navegación.
  2. Agrega una clase personalizada a tu barra de navegación para la selección con JavaScript.
  3. Escribe una función JavaScript para manejar el comportamiento de colapso.

Aquí tienes un ejemplo de cómo implementar esto:

function handleNavbarCollapse() {
  const navbar = document.querySelector('.custom-navbar');
  const toggleButton = navbar.querySelector('.navbar-toggler');
  const navbarContent = navbar.querySelector('.navbar-collapse');

  function toggleNavbar() {
    navbarContent.classList.toggle('show');
  }

  function checkWidth() {
    if (window.innerWidth <= 1000) {
      navbar.classList.add('navbar-collapsed');
      navbarContent.classList.remove('show');
    } else {
      navbar.classList.remove('navbar-collapsed');
      navbarContent.classList.add('show');
    }
  }

  toggleButton.addEventListener('click', toggleNavbar);
  window.addEventListener('resize', checkWidth);
  checkWidth(); // Comprobación inicial
}

handleNavbarCollapse();

Este código JavaScript:

  • Selecciona una barra de navegación con la clase 'custom-navbar'
  • Alterna una clase 'show' en el contenido de la barra de navegación cuando se hace clic en el botón de alternancia
  • Comprueba el ancho de la ventana y agrega/elimina clases en consecuencia
  • Utiliza un detector de eventos para responder a los cambios de tamaño de la ventana

Ejemplo: Consejo para una Transición Suave

Agrega transiciones CSS a los elementos de tu barra de navegación para un efecto de colapso/expansión más suave:

.navbar-collapse {
  transition: max-height 0.3s ease-out;
  max-height: 0;
  overflow: hidden;
}

.navbar-collapse.show {
  max-height: 500px; /* Ajusta según el contenido de tu barra de navegación */
}

Variables SASS/SCSS

Si usas SASS o SCSS en tu proyecto, puedes cambiar las variables de origen de Bootstrap para modificar el punto de quiebre de la barra de navegación. Aunque este método no se aplica directamente a Stylus, es útil saberlo para proyectos que usan SASS/SCSS.

Para cambiar el punto de quiebre de la barra de navegación usando SASS:

  1. Crea un archivo SASS personalizado (por ejemplo, _custom-variables.scss).
  2. Sobrescribe las variables de punto de quiebre predeterminadas de Bootstrap.
  3. Importa tu archivo de variables personalizadas antes de los archivos SASS de Bootstrap.

Aquí tienes un ejemplo de cómo establecer un punto de quiebre personalizado:

// _custom-variables.scss
$grid-breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  lg: 992px,
  xl: 1200px,
  xxl: 1400px,
  custom: 1000px  // Agrega tu punto de quiebre personalizado
);

$navbar-expand-breakpoint: custom;

// Archivo SASS principal
@import "custom-variables";
@import "bootstrap/scss/bootstrap";

Este método:

  • Agrega un punto de quiebre personalizado al sistema de cuadrícula de Bootstrap
  • Establece que la barra de navegación se expanda en el punto de quiebre personalizado
  • Requiere recompilar los archivos SASS de Bootstrap con tus variables personalizadas

Aunque este enfoque ofrece una integración profunda con Bootstrap, requiere más configuración y puede no ser adecuado para todos los proyectos, especialmente aquellos que no usan SASS/SCSS.