Diseño de layout en Bootstrap
Uso de Puntos de interrupción en Bootstrap
Los puntos de interrupción son anchos personalizables que determinan cómo se comporta tu diseño responsive en todos los tamaños de dispositivos o viewports en Bootstrap.
Conceptos básicos
-
Los puntos de interrupción son los componentes básicos del diseño responsive. Utilízalos para controlar cuándo se puede adaptar tu diseño a un viewport o tamaño de dispositivo en particular.
-
Utiliza media queries para diseñar su CSS por punto de interrupción. Las media queries son una característica de CSS que te permite aplicar estilos condicionalmente según un conjunto de parámetros del navegador y del sistema operativo. Normalmente utilizamos
min-width
en nuestras media queries. -
El objetivo es el diseño responsive mobile-first. El CSS de Bootstrap tiene como objetivo aplicar el mínimo indispensable de estilos para hacer que un diseño funcione en el punto de interrupción más pequeño, y luego aplicar capas de estilos para ajustar ese diseño a tamaños de dispositivos más grandes. Esto optimiza tu CSS, mejora el tiempo de renderizado y brinda una excelente experiencia a tus visitantes.
Puntos de interrupción disponibles
Bootstrap incluye seis puntos de interrupción predeterminados, a veces denominados niveles de cuadrícula, para crear de manera responsive. Estos puntos de interrupción se pueden personalizar si utilizas nuestros archivos fuente Sass.
Punto de interrupción | Clase infix | Dimensiones |
---|---|---|
Extra pequeño | Ninguno | <576px |
Pequeño | sm |
≥576px |
Medio | md |
≥768px |
Grande | lg |
≥992px |
Extra grande | xl |
≥1200px |
Extra extra grande | xxl |
≥1400px |
Cada punto de interrupción se eligió para contener cómodamente contenedores cuyos anchos son múltiplos de 12. Los puntos de interrupción también son representativos de un subconjunto de tamaños de dispositivos y dimensiones de viewports comunes; no se dirigen específicamente a cada caso de uso o dispositivo. En cambio, las gamas proporcionan una base sólida y consistente sobre la que construir para casi cualquier dispositivo.
Estos puntos de interrupción se pueden personalizar a través de Sass; los encontrarás en un mapa de Sass en nuestra hoja de estilo _variables.scss
.
$grid-breakpoints: (
xs: 0,
sm: 576px,
md: 768px,
lg: 992px,
xl: 1200px,
xxl: 1400px
);
Para obtener más información y ejemplos sobre cómo modificar nuestros mapas y variables de Sass, consulta la sección CSS de la documentación de Grid.
Media queries
Dado que Bootstrap está desarrollado para ser mobile-first, usamos un puñado de media queries para crear puntos de interrupción sensibles para nuestros diseños e interfaces. Estos puntos de interrupción se basan principalmente en anchos mínimos del viewport y nos permiten ampliar los elementos a medida que cambia el viewport.
Min-width
Bootstrap utiliza principalmente los siguientes rangos de media query (o puntos de interrupción) en nuestros archivos Sass fuente para nuestro diseño, sistema de cuadrícula y componentes.
// Source mixins
// No media query necessary for xs breakpoint as it's effectively `@media (min-width: 0) { ... }`
@include media-breakpoint-up(sm) { ... }
@include media-breakpoint-up(md) { ... }
@include media-breakpoint-up(lg) { ... }
@include media-breakpoint-up(xl) { ... }
@include media-breakpoint-up(xxl) { ... }
// Usage
// Example: Hide starting at `min-width: 0`, and then show at the `sm` breakpoint
.custom-class {
display: none;
}
@include media-breakpoint-up(sm) {
.custom-class {
display: block;
}
}
Estos mixins de Sass se traducen en nuestro CSS compilado usando los valores declarados en nuestras variables de Sass. Por ejemplo:
// X-Small devices (portrait phones, less than 576px)
// No media query for `xs` since this is the default in Bootstrap
// Small devices (landscape phones, 576px and up)
@media (min-width: 576px) { ... }
// Medium devices (tablets, 768px and up)
@media (min-width: 768px) { ... }
// Large devices (desktops, 992px and up)
@media (min-width: 992px) { ... }
// X-Large devices (large desktops, 1200px and up)
@media (min-width: 1200px) { ... }
// XX-Large devices (larger desktops, 1400px and up)
@media (min-width: 1400px) { ... }
Max-width
Ocasionalmente usamos media queries que van en la otra dirección (el tamaño de pantalla dado o menor):
// No media query necessary for xs breakpoint as it's effectively `@media (max-width: 0) { ... }`
@include media-breakpoint-down(sm) { ... }
@include media-breakpoint-down(md) { ... }
@include media-breakpoint-down(lg) { ... }
@include media-breakpoint-down(xl) { ... }
@include media-breakpoint-down(xxl) { ... }
// Example: Style from medium breakpoint and down
@include media-breakpoint-down(md) {
.custom-class {
display: block;
}
}
Estos mixins toman esos puntos de interrupción declarados, les restan .02px
y los usan como nuestros valores de max-width
. Por ejemplo:
// `xs` returns only a ruleset and no media query
// ... { ... }
// `sm` applies to x-small devices (portrait phones, less than 576px)
@media (max-width: 575.98px) { ... }
// `md` applies to small devices (landscape phones, less than 768px)
@media (max-width: 767.98px) { ... }
// `lg` applies to medium devices (tablets, less than 992px)
@media (max-width: 991.98px) { ... }
// `xl` applies to large devices (desktops, less than 1200px)
@media (max-width: 1199.98px) { ... }
// `xxl` applies to x-large devices (large desktops, less than 1400px)
@media (max-width: 1399.98px) { ... }
min-
y max-
(prefijos) y viewports con anchos fraccionarios (que pueden ocurrir bajo ciertas condiciones en dispositivos de alta resolución, por ejemplo) usando valores con mayor precisión.
Punto de interrupción único
También existen media queries y mixins para apuntar a un solo segmento de tamaños de pantalla utilizando los anchos de punto de interrupción mínimo y máximo.
@include media-breakpoint-only(xs) { ... }
@include media-breakpoint-only(sm) { ... }
@include media-breakpoint-only(md) { ... }
@include media-breakpoint-only(lg) { ... }
@include media-breakpoint-only(xl) { ... }
@include media-breakpoint-only(xxl) { ... }
Por ejemplo, @include media-breakpoint-only(md) { ... }
dará como resultado:
@media (min-width: 768px) and (max-width: 991.98px) { ... }
Entre puntos de interrupción
De manera similar, las media queries pueden abarcar múltiples anchos de puntos de interrupción:
@include media-breakpoint-between(md, xl) { ... }
Lo cual resulta en:
// Example
// Apply styles starting from medium devices and up to extra large devices
@media (min-width: 768px) and (max-width: 1199.98px) { ... }
Uso de Contenedores en Bootstrap
Los contenedores son un componente fundamental de Bootstrap que contiene, rellena y alinea tu contenido dentro de un dispositivo o viewport determinado.
Cómo funcionan
Los contenedores son el elemento de diseño más básico en Bootstrap y son requeridos cuando usamos nuestro sistema de cuadrícula predeterminado. Los contenedores se utilizan para contener, rellenar y (a veces) centrar el contenido dentro de ellos. Si bien los contenedores pueden anidarse, la mayoría de los diseños no requieren un contenedor anidado.
Bootstrap viene con tres contenedores diferentes:
.container
, que establece unmax-width
en cada punto de interrupción responsive.container-{breakpoint}
, que eswidth: 100%
hasta el punto de interrupción especificado.container-fluid
, que eswidth: 100%
en todos los puntos de interrupción
La siguiente tabla ilustra cómo se compara el max-width
de cada contenedor con el .container
y el .container-fluid
original en cada punto de interrupción.
Velos en acción y compáralos en nuestro ejemplo de cuadrícula.
Extra small <576px |
Small ≥576px |
Medium ≥768px |
Large ≥992px |
X-Large ≥1200px |
XX-Large ≥1400px |
|
---|---|---|---|---|---|---|
.container |
100% | 540px | 720px | 960px | 1140px | 1320px |
.container-sm |
100% | 540px | 720px | 960px | 1140px | 1320px |
.container-md |
100% | 100% | 720px | 960px | 1140px | 1320px |
.container-lg |
100% | 100% | 100% | 960px | 1140px | 1320px |
.container-xl |
100% | 100% | 100% | 100% | 1140px | 1320px |
.container-xxl |
100% | 100% | 100% | 100% | 100% | 1320px |
.container-fluid |
100% | 100% | 100% | 100% | 100% | 100% |
Contenedor predeterminado
Nuestra clase .container
predeterminada es un contenedor responsive de ancho fijo, lo que significa que su max-width
cambia en cada punto de interrupción.
<div class="container">
<!-- Content here -->
</div>
Contenedores responsive
Los contenedores responsive te permiten especificar una clase que tiene un ancho del 100% hasta que se alcanza el punto de interrupción especificado, después de lo cual aplicamos max-width
para cada uno de los puntos de interrupción más altos. Por ejemplo, .container-sm
tiene un ancho 100% para comenzar hasta que se alcance el punto de interrupción sm
, donde se ampliará con md
, lg
, xl
y xxl
.
<div class="container-sm">100% wide until small breakpoint</div>
<div class="container-md">100% wide until medium breakpoint</div>
<div class="container-lg">100% wide until large breakpoint</div>
<div class="container-xl">100% wide until extra large breakpoint</div>
<div class="container-xxl">100% wide until extra extra large breakpoint</div>
Contenedores fluid
Usa .container-fluid
para un contenedor de ancho completo, que abarque todo el ancho del viewport.
<div class="container-fluid">
...
</div>
Personalización del CSS
Variables Sass generales relacionadas
Como se muestra arriba, Bootstrap genera una serie de clases contenedoras predefinidas para ayudarte a crear los diseños que deseas. Puedes personalizar estas clases de contenedores predefinidas modificando el mapa Sass (que se encuentra en _variables.scss
) que las impulsa:
$container-max-widths: (
sm: 540px,
md: 720px,
lg: 960px,
xl: 1140px,
xxl: 1320px
);
Para obtener más información y ejemplos sobre cómo modificar nuestros mapas y variables de Sass, consulta la sección de Sass de la documentación de Grid (cuadrícula).
Sass mixins
Además de personalizar el Sass, también puedes crear tus propios contenedores con nuestro mixin Sass.
// Source mixin
@mixin make-container($padding-x: $container-padding-x) {
width: 100%;
padding-right: $padding-x;
padding-left: $padding-x;
margin-right: auto;
margin-left: auto;
}
// Usage
.custom-container {
@include make-container();
}
Uso de Gutters en Bootstrap
Los gutteres son el relleno entre tus columnas, que se utilizan para espaciar y alinear de manera responsive el contenido en el sistema de cuadrícula de Bootstrap.
Cómo funcionan
-
Los gutters son los espacios entre el contenido de las columnas, creados por el
padding
horizontal. Configuramospadding-right
ypadding-left
en cada columna y usamos unmargin
negativo para compensarlo al principio y al final de cada fila para alinear el contenido. -
Los gutters comienzan en
1.5rem
(24px
) de ancho. Esto nos permite hacer coincidir nuestra cuadrícula con la escala de espaciadores de margin y padding. -
Los gutters se pueden ajustar de forma responsive. Utiliza clases de gutters específicas de puntos de interrupción para modificar gutters horizontales, verticales y todos los gutters.
Gutters horizontales
.gx-*
(clases) se pueden usar para controlar el ancho del gutter horizontal. Es posible que sea necesario ajustar el padre .container
o .container-fluid
si también se utilizan gutters más grandes para evitar desbordamientos no deseados, utilizando una utilidad de relleno coincidente. Por ejemplo, en el siguiente ejemplo hemos aumentado el relleno con .px-4
:
<div class="container px-4 text-center">
<div class="row gx-5">
<div class="col">
<div class="p-3">Relleno de columna personalizado</div>
</div>
<div class="col">
<div class="p-3">Relleno de columna personalizado</div>
</div>
</div>
</div>
Una solución alternativa es agregar un contenedor alrededor del .row
con la clase .overflow-hidden
:
<div class="container overflow-hidden text-center">
<div class="row gx-5">
<div class="col">
<div class="p-3">Relleno de columna personalizado</div>
</div>
<div class="col">
<div class="p-3">Relleno de columna personalizado</div>
</div>
</div>
</div>
Gutters verticales
.gy-*
(clases) se pueden usar para controlar el ancho del canal vertical dentro de una fila cuando las columnas se ajustan a nuevas líneas. Al igual que los márgenes horizontales, los márgenes verticales pueden provocar cierto desbordamiento debajo del .row
al final de una página. Si esto ocurre, agrega un contenedor alrededor de .row
con la clase .overflow-hidden
:
<div class="container overflow-hidden text-center">
<div class="row gy-5">
<div class="col-6">
<div class="p-3">Relleno de columna personalizado</div>
</div>
<div class="col-6">
<div class="p-3">Relleno de columna personalizado</div>
</div>
<div class="col-6">
<div class="p-3">Relleno de columna personalizado</div>
</div>
<div class="col-6">
<div class="p-3">Relleno de columna personalizado</div>
</div>
</div>
</div>
Gutters horizontales y verticales
Usa las clases .g-*
para controlar los gutters horizontales y verticales de la cuadrícula. En el siguiente ejemplo, utilizamos un ancho de gutter más pequeño, por lo que no es necesaria la clase contenedora .overflow-hidden
.
<div class="container text-center">
<div class="row g-2">
<div class="col-6">
<div class="p-3">Relleno de columna personalizado</div>
</div>
<div class="col-6">
<div class="p-3">Relleno de columna personalizado</div>
</div>
<div class="col-6">
<div class="p-3">Relleno de columna personalizado</div>
</div>
<div class="col-6">
<div class="p-3">Relleno de columna personalizado</div>
</div>
</div>
</div>
Gutters filas columnas
Las clases de canal también se pueden agregar a columnas de fila. En el siguiente ejemplo, utilizamos columnas de fila y clases de gutter responsive.
<div class="container text-center">
<div class="row row-cols-2 row-cols-lg-5 g-2 g-lg-3">
<div class="col">
<div class="p-3">Columna fila</div>
</div>
<div class="col">
<div class="p-3">Columna fila</div>
</div>
<div class="col">
<div class="p-3">Columna fila</div>
</div>
<div class="col">
<div class="p-3">Columna fila</div>
</div>
<div class="col">
<div class="p-3">Columna fila</div>
</div>
<div class="col">
<div class="p-3">Columna fila</div>
</div>
<div class="col">
<div class="p-3">Columna fila</div>
</div>
<div class="col">
<div class="p-3">Columna fila</div>
</div>
<div class="col">
<div class="p-3">Columna fila</div>
</div>
<div class="col">
<div class="p-3">Columna fila</div>
</div>
</div>
</div>
Sin gutters
Los márgenes entre columnas en nuestras clases de cuadrícula predefinidas se pueden eliminar con .g-0
. Esto elimina los margin
negativos de .row
y el padding
horizontal de todas las columnas secundarias inmediatas.
¿Necesitas un diseño de borde a borde? Suelta el .container
o .container-fluid
principal y agrega .mx-0
al .row
para evitar el desbordamiento.
En la práctica, así es como se ve. Ten en cuenta que puedes continuar usando esto con todas las demás clases de cuadrícula predefinidas (incluidos anchos de columna, niveles responsive, reordenamientos y más).
<div class="row g-0 text-center">
<div class="col-sm-6 col-md-8">.col-sm-6 .col-md-8</div>
<div class="col-6 col-md-4">.col-6 .col-md-4</div>
</div>
Cambia los gutters
Las clases se construyen a partir del mapa Sass $gutters
que se hereda del mapa Sass $spacers
.
$grid-gutter-width: 1.5rem;
$gutters: (
0: 0,
1: $spacer * .25,
2: $spacer * .5,
3: $spacer,
4: $spacer * 1.5,
5: $spacer * 3,
);
Utilidades para diseño de layout en Bootstrap
Para un desarrollo responsive y compatible con dispositivos móviles más rápido, Bootstrap incluye docenas de clases de utilidad para mostrar, ocultar, alinear y espaciar contenido.
Cambiando display
Utiliza nuestras utilidades de visualización para alternar de forma responsive los valores comunes de la propiedad display
. Mézclalo con nuestro sistema de cuadrícula, contenido o componentes para mostrarlos u ocultarlos en viewports específicos.
Opciones de Flexbox
Bootstrap está construido con flexbox, pero no se ha cambiado el display
de cada elemento a display: flex
ya que esto agregaría muchos elementos innecesarios y sobrescribiría inesperadamente comportamientos clave del navegador. La mayoría de nuestros componentes están construidos con flexbox habilitado.
Si necesitas agregar display: flex
a un elemento, hazlo con .d-flex
o uno de las variantes responsive (por ejemplo .d-sm-flex
). Necesitarás esta clase o valor display
para permitir el uso de nuestras utilidades flexbox adicionales para dimensionar, alinear, espaciar y más.
Margen y relleno
Usa las utilidades margin
y padding
de espaciado para controlar cómo se espacian y dimensionan los elementos y componentes. Bootstrap incluye una escala de seis niveles para utilidades de espaciado, basada en un valor predeterminado de 1rem
para la variable $spacer
. Elige valores para todas los viewports (p. ej., .me-3
para margin-right: 1rem
en LTR) o elige variantes responsive para apuntar a viewports específicas (p. ej., .me-md-3
para margin-right: 1rem
—en LTR— comenzando en el punto de interrupción md
).
Alterna visibility
Cuando no es necesario alternar display
, puedes alternar visibility
de un elemento con nuestras utilidades de visibilidad. Los elementos invisibles seguirán afectando el diseño de la página, pero están visualmente ocultos para los visitantes.
El rol de los valores z-index en Bootstrap
Si bien no forman parte del sistema de cuadrícula de Bootstrap, los índices z juegan un papel importante en cómo nuestros componentes se superponen e interactúan entre sí.
Varios componentes de Bootstrap utilizan z-index
, la propiedad CSS que ayuda a controlar el diseño al proporcionar un tercer eje para organizar el contenido. Utilizamos una escala de índice z predeterminada en Bootstrap que ha sido diseñada para superponer correctamente la navegación, tooltips y ventanas emergentes, modales y más.
Estos valores más altos comienzan en un número arbitrario, lo suficientemente alto y específico como para evitar conflictos idealmente. Necesitamos un conjunto estándar de estos en todos nuestros componentes en capas (tooltips, ventanas emergentes, barras de navegación, menús desplegables, modales) para que podamos ser razonablemente consistentes en los comportamientos. No hay ninguna razón por la que no pudiéramos haber usado 100
+ o 500
+.
No fomentamos la personalización de estos valores individuales; si cambias uno, es probable que debas cambiarlos todos.
$zindex-dropdown: 1000;
$zindex-sticky: 1020;
$zindex-fixed: 1030;
$zindex-offcanvas-backdrop: 1040;
$zindex-offcanvas: 1045;
$zindex-modal-backdrop: 1050;
$zindex-modal: 1055;
$zindex-popover: 1070;
$zindex-tooltip: 1080;
$zindex-toast: 1090;
Para manejar los bordes superpuestos dentro de los componentes (por ejemplo, botones y entradas en grupos de entrada), utilizamos valores bajos de z-index
de un solo dígito de 1
, 2
y 3
para los estados predeterminado, hover y active. Al producirse hover/focus/active, colocamos un elemento en particular en primer plano con un valor de z-index
más alto para mostrar su borde sobre los elementos hermanos.