Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1 - ¿Qué es Bootstrap?
Bootstrap es un framework de CSS que nos facilita y estandariza
el desarrollo de sitios web.
Está pensando para que se adapte tanto a las pantallas de equipos de
escritorio como a móviles y tablets.
Bootstrap es desarrollado y mantenido por la empresa Twitter y la ha liberado
como un producto Open Source.
Tiene una filosofía muy intuitiva para el maquetado de sitios web que puede
ser rápidamente aprendida por desarrolladores que no vienen del mundo del
diseño web.
La versión estable actual es la 5.x
El corazón de este framework es un archivo CSS que lo podemos descargar
del sitio http://getbootstrap.com.
Luego debemos enlazar a nuestra página con el archivo boottrap.min.css y
ya podemos utilizar esta librería.
La primera clase que podemos probar es class="container" (esta muestra
todo el contenido del div centrado), además el framework ya define estilos por
defecto para una gran cantidad de elementos HTML de la página, por ejemplo
define la tipografía de tipo Helvética.
El código mínimo de nuestra página es:
<!DOCTYPE html>
<html>
<head>
<title>Prueba de Bootstrap</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container" style="background-color:#ccc">
<h1>Titulo</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
</body>
</html>
2 - Emplear un CDN para cargar Bootstrap 5
En el concepto anterior vimos que para trabajar con el framework
Bootstrap 5 debemos descargarlo del sitio http://getbootstrap.com.
Hay una segunda forma de trabajar con Bootstrap sin tener que descargar el
framework y consiste en utilizar un servidor donde se alojan todos los archivos
de Bootstrap.
Si vamos a utilizar un CDN (Content Delivery Network - red de entrega de
contenidos) luego nuestro esqueleto de página html tendrá una estructura
similar a esta:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link href="../css/bootstrap.min.css" rel="stylesheet">
<title>Hola Mundo</title>
</head>
<body>
<div class="container" style="background-color:#ccc">
<h1>Hola Mundo!</h1>
</div>
Reduce la latencia.
1. bootstrap.bundle.min.js
<hr>
<div class="row">
<div class="col-xl-4" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-xl-4" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-xl-4" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
</div>
<hr>
<div class="row">
<div class="col-lg-4" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-lg-4" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-lg-4" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
</div>
<hr>
<div class="row">
<div class="col-md-4" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-md-4" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-md-4" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
</div>
<hr>
<div class="row">
<div class="col-sm-4" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-sm-4" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-sm-4" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
</div>
<hr>
<div class="row">
<div class="col-4" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-4" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-4" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
</div>
</div>
</body>
</html>
Si abrimos esta página en un monitor con un ancho superior a 1400 px
podemos ver que se muestran tres columnas por fila:
Debemos utilizar la clase "row" para indicar el comienzo de una fila. Dentro
de la fila dispondremos tantos div como columnas tenga dicha fila. Para
indicar cada columna debemos utilizar la siguiente sintaxis para cada
columna:
Debemos utilizar la clase "row" para indicar el comienzo de una fila. Dentro
de la fila dispondremos tantos div como columnas tenga dicha fila. Para
indicar cada columna debemos utilizar la siguiente sintaxis para cada
columna:
col-xxl-*
Pero ahora nos preguntamos porque la segunda fila que hemos definido no
colapsa cuando el ancho del navegador baja de 1400px, esto es debido que
hemos definido cada columna con la siguiente sintaxis:
<div class="row">
<div class="col-xl-4" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-xl-4" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
<div class="col-xl-4" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap.</p>
</div>
</div>
col-xl-4
Cuando utilizamos las clases "col-xl-*" luego la fila colapsará cuando el ancho
del navegador se reduzca a menos de 1200px, podemos probarlo fácilmente
reduciendo más el ancho del navegador y ver que ahora colapsan tanto la
primera fila como la segunda fila:
col-*
col-sm-* (sm)all
col-md-* (m)e(d)ium
col-lg-* (l)ar(g)e
col-xl-* (e)xtra (l)arge
col-xxl-* (e)xtra (e)xtra (l)arge
Ahora depende del tipo de página que uno tiene que implementar el definir
en que momento queremos que nuestra estructura de página colapse sus
columnas. Si no queremos que colapse luego empleamos col-* para definir
las distintas columnas.
<div class="row">
<div class="col-xxl-10 col-xl-9 col-lg-8 col-md-7 col-sm-6 col-
5" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-xxl-2 col-xl-3 col-lg-4 col-md-5 col-sm-6 col-
7" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
</div>
</div>
</body>
</html>
En este caso tengamos en cuenta que nunca colapsan las columnas ya que
hemos definido la regla col-*
La definición de múltiples reglas es una de las herramientas más poderosas
de Bootstrap, nos permite definir distintos diseños de página según las
capacidades del dispositivo del visitante a nuestro sitio web.
<div class="container">
<div class="row">
<div class="col-lg-4" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-lg-4" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-lg-4" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
</div>
</div>
<hr>
<div class="container-fluid">
<div class="row">
<div class="col-lg-4" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-lg-4" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-lg-4" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
</div>
</div>
</body>
</html>
Lo único que varía es asignar una clase distinta a cada div:
<div class="container">
<div class="container-fluid">
col-*
col-sm-*
col-md-*
col-lg-*
col-xl-*
col-xxl-*
<div class="container">
<div class="row">
<div class="col" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
</div>
<hr>
<div class="row">
<div class="col-lg" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-lg" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-lg" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
</div>
</div>
</body>
</html>
Si todas las columnas tienen la misma cantidad de filas para cualquier tipo de
dispositivo:
En lugar de disponer:
Si reducimos el ancho luego colapsa la segunda fila que tiene la clase "col-
lg":
<div class="container">
<div class="row">
<div class="col" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-6" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col" style="background-color:#ccc">
<h1>Columna 3</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
</div>
</div>
</body>
<div class="container">
<div class="row">
<div class="col-auto" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-6" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-auto" style="background-color:#ccc">
<p>Poco contenido.</p>
</div>
</div>
</div>
</body>
<div class="container">
</div>
</body>
</html>
Hemos definido el div que contiene la clase "row" un alto de 300px de color
amarillo. Luego hemos agregado la clase align-items-start al mismo div.
Probemos ahora de cambiar por el valor "align-items-center" que da como
resultado:
<div class="container">
</div>
</body>
</html>
<div class="container">
<div class="row justify-content-end" style="background-color:#dd0">
<div class="col-3" style="background-color:#aaa">
<h1>Columna 1</h1>
</div>
<div class="col-3" style="background-color:#bbb">
<h1>Columna 2</h1>
</div>
</div>
<hr>
<div class="row justify-content-start" style="background-color:#dd0">
<div class="col-3" style="background-color:#aaa">
<h1>Columna 1</h1>
</div>
<div class="col-3" style="background-color:#bbb">
<h1>Columna 2</h1>
</div>
</div>
<hr>
<div class="row justify-content-center" style="background-
color:#dd0">
<div class="col-3" style="background-color:#aaa">
<h1>Columna 1</h1>
</div>
<div class="col-3" style="background-color:#bbb">
<h1>Columna 2</h1>
</div>
</div>
<hr>
<div class="row justify-content-between" style="background-
color:#dd0">
<div class="col-3" style="background-color:#aaa">
<h1>Columna 1</h1>
</div>
<div class="col-3" style="background-color:#bbb">
<h1>Columna 2</h1>
</div>
</div>
<hr>
<div class="row justify-content-around" style="background-
color:#dd0">
<div class="col-3" style="background-color:#aaa">
<h1>Columna 1</h1>
</div>
<div class="col-3" style="background-color:#bbb">
<h1>Columna 2</h1>
</div>
</div>
</div>
</body>
</html>
justify-content-end
justify-content-start
justify-content-center
justify-content-between
justify-content-around
<div class="container">
<div class="row">
<div class="col-3" style="background-color:#aaa">
<h1>Columna 1 <br> Linea 1</h1>
</div>
<div class="col-6" style="background-color:#bbb">
<h1>Columna 2 <br> Linea 1</h1>
</div>
<div class="w-100"></div>
<div class="col-6" style="background-color:#aaa">
<h1>Columna 1 <br>Linea 2</h1>
</div>
<div class="col-6" style="background-color:#bbb">
<h1>Columna 2 <br>Linea 2</h1>
</div>
</div>
</div>
</body>
</html>
Podemos comprobar que luego que se aplica la clase "w-100" a un div vacío
el siguiente div aparece en una nueva línea.
<div class="container">
<div class="row">
<div class="col order-3" style="background-color:#aaa">
<h1>Columna 1</h1>
</div>
<div class="col order-2" style="background-color:#bbb">
<h1>Columna 2</h1>
</div>
<div class="col order-1" style="background-color:#aaa">
<h1>Columna 3</h1>
</div>
</div>
</div>
</body>
</html>
order-*
order-sm-*
order-md-*
order-lg-*
order-xl-*
order-xxl-*
11 - Anidamiento de columnas
Problema
Implementar una página que muestre dos columnas y dentro de la segunda
columna otras dos columnas internas.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-6" style="background-color:#aaa">
<h1>Columna 1</h1>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-lg-6" style="background-color:#bbb">
<h1>Columna 2</h1>
<p>Esto es una prueba de bootstrap 5.</p>
<div class="row">
<div class="col-lg-6" style="background-color:#ccc">
<h2>Columna 2a</h2>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
<div class="col-lg-6" style="background-color:#ddd">
<h2>Columna 2b</h2>
<p>Esto es una prueba de bootstrap 5.</p>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Problema
Implementar el código con Bootstrap 5 necesario para mostrar los números
"uno", "dos" etc. con el siguiente formato dentro de la página:
No es necesario crear tres filas y tres columnas por fila para resolver este
problema (si bien es posible), lo que debemos hacer es crear una fila y
disponer dos columnas, la segunda con un desplazamiento de cuatro. La
segunda fila tendrá una sola columna pero con desplazamiento de cuatro y la
tercera fila es similar a la primera:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-lg-4" style="background-color:#aaa">
<h1>Uno</h1>
</div>
<div class="col-lg-4 offset-lg-4" style="background-color:#bbb">
<h1>Dos</h1>
</div>
</div>
<div class="row">
<div class="col-lg-4 offset-lg-4" style="background-color:#aaa">
<h1>Tres</h1>
</div>
</div>
<div class="row">
<div class="col-lg-4" style="background-color:#aaa">
<h1>Cuatro</h1>
</div>
<div class="col-lg-4 offset-lg-4" style="background-color:#bbb">
<h1>Cinco</h1>
</div>
</div>
</div>
</body>
</html>
offset-*
offset-sm-*
offset-md-*
offset-lg-*
offset-xxl-*
13 - table: básica
<div class="container">
<table class="table">
<thead>
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Elemento 1,1</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
</tr>
<tr>
<td>Elemento 2,1</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
</tr>
<tr>
<td>Elemento 3,1</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Como podemos ver solo con agregar la clase "table":
<table class="table">
<div class="container">
<table class="table table-dark">
<thead>
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Elemento 1,1</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
</tr>
<tr>
<td>Elemento 2,1</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
</tr>
<tr>
<td>Elemento 3,1</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Como podemos ver solo disponemos las clases "table" y "table-dark" a la
etiqueta HTML "table":
<div class="container">
<table class="table table-striped">
<thead>
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Elemento 1,1</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
</tr>
<tr>
<td>Elemento 2,1</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
</tr>
<tr>
<td>Elemento 3,1</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
</tr>
<tr>
<td>Elemento 4,1</td>
<td>Elemento 4,2</td>
<td>Elemento 4,3</td>
</tr>
<tr>
<td>Elemento 5,1</td>
<td>Elemento 5,2</td>
<td>Elemento 5,3</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Ahora como resultado tenemos en el navegador la tabla con colores distintos
para las filas contiguas:
<div class="container">
<table class="table table-bordered">
<thead>
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Elemento 1,1</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
</tr>
<tr>
<td>Elemento 2,1</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
</tr>
<tr>
<td>Elemento 3,1</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
</tr>
<tr>
<td>Elemento 4,1</td>
<td>Elemento 4,2</td>
<td>Elemento 4,3</td>
</tr>
<tr>
<td>Elemento 5,1</td>
<td>Elemento 5,2</td>
<td>Elemento 5,3</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
<div class="container">
<table class="table table-hover">
<thead>
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
</tr>
</thead>
<tbody>
<tr>
<td>Elemento 1,1</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
</tr>
<tr>
<td>Elemento 2,1</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
</tr>
<tr>
<td>Elemento 3,1</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
</tr>
<tr>
<td>Elemento 4,1</td>
<td>Elemento 4,2</td>
<td>Elemento 4,3</td>
</tr>
<tr>
<td>Elemento 5,1</td>
<td>Elemento 5,2</td>
<td>Elemento 5,3</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
5 - table: tabla condensada
Si tenemos que mostrar grandes tablas con datos puede ser necesario
mostrar más información al mismo tiempo por pantalla condensando los datos
(son los mismos datos pero más comprimidos en pantalla)
Esto se logra agregando la clase "table-sm" a la marca HTML "table".
Veamos un ejemplo con una tabla común y una tabla condensada:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<table class="table">
<thead>
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
</tr>
</thead>
<tr>
<td>Elemento 1,1</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
</tr>
<tr>
<td>Elemento 2,1</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
</tr>
<tr>
<td>Elemento 3,1</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
</tr>
<tr>
<td>Elemento 4,1</td>
<td>Elemento 4,2</td>
<td>Elemento 4,3</td>
</tr>
<tr>
<td>Elemento 5,1</td>
<td>Elemento 5,2</td>
<td>Elemento 5,3</td>
</tr>
</table>
</div>
</body>
</html>
Podemos ver la diferencia entre una tabla por defecto y una condensada:
6 - table: definición de un estilo a la cabecera de la tabla
Disponemos las clases "table-light" y "table-dark" para aplicar a la
etiqueta "thead" de una tabla.
Un ejemplo de empleo de estas clases:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<table class="table">
<thead class="table-light">
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
</tr>
</thead>
<tr>
<td>Elemento 1,1</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
</tr>
<tr>
<td>Elemento 2,1</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
</tr>
<tr>
<td>Elemento 3,1</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
</tr>
<tr>
<td>Elemento 4,1</td>
<td>Elemento 4,2</td>
<td>Elemento 4,3</td>
</tr>
<tr>
<td>Elemento 5,1</td>
<td>Elemento 5,2</td>
<td>Elemento 5,3</td>
</tr>
</table>
<table class="table">
<thead class="table-dark">
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
</tr>
</thead>
<tr>
<td>Elemento 1,1</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
</tr>
<tr>
<td>Elemento 2,1</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
</tr>
<tr>
<td>Elemento 3,1</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
</tr>
<tr>
<td>Elemento 4,1</td>
<td>Elemento 4,2</td>
<td>Elemento 4,3</td>
</tr>
<tr>
<td>Elemento 5,1</td>
<td>Elemento 5,2</td>
<td>Elemento 5,3</td>
</tr>
</table>
</div>
</body>
</html>
<thead class="table-light">
<thead class="table-dark">
table-dark
table-light
table-active
Veamos una tabla asignando estas clases a filas y celdas de una tabla:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<table class="table">
<thead>
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
</tr>
</thead>
<tbody>
<tr class="table-danger">
<td>Elemento 1,1<br> (table-danger)</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
</tr>
<tr class="table-warning">
<td>Elemento 2,1<br> (table-warning)</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
</tr>
<tr class="table-info">
<td>Elemento 3,1 <br> (table-info)</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
</tr>
<tr class="table-success">
<td>Elemento 4,1<br>(table-success)</td>
<td>Elemento 4,2</td>
<td>Elemento 4,3</td>
</tr>
<tr class="table-primary">
<td>Elemento 5,1<br>(table-primary)</td>
<td>Elemento 5,2</td>
<td>Elemento 5,3</td>
</tr>
<tr class="table-secondary">
<td>Elemento 6,1<br>(table-secondary)</td>
<td>Elemento 6,2</td>
<td>Elemento 6,3</td>
</tr>
<tr class="table-dark">
<td>Elemento 7,1<br>(table-dark)</td>
<td>Elemento 7,2</td>
<td>Elemento 7,3</td>
</tr>
<tr class="table-light">
<td>Elemento 8,1<br>(table-light)</td>
<td>Elemento 8,2</td>
<td>Elemento 8,3</td>
</tr>
<tr class="table-active">
<td>Elemento 9,1<br>(table-active)</td>
<td>Elemento 9,2</td>
<td>Elemento 9,3</td>
</tr>
<tr>
<td class="table-danger">Elemento 10,1</td>
<td class="table-warning">Elemento 10,2</td>
<td class="table-info">Elemento 10,3</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Luego tenemos como resultado colores distintos en cada fila y la última fila
las celdas con distintos colores:
8 - table: adaptable o responsive
Cuando tenemos tablas con muchas columnas y dependiendo del tamaño
del dispositivo podemos hacer que aparezca una barro de desplazamiento en
la parte inferior de la tabla.
Esta característica la resuelve Bootstrap 5 mediante las clases:
table-responsive
table-responsive-sm
table-responsive-md
table-responsive-lg
table-responsive-xl
table-responsive-xxl
Debemos encerrar en una etiqueta div la tabla y aplicar alguna de las clases
especificadas anteriormente.
Con un ejemplo probemos esta funcionalidad:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>Titulo 1</th>
<th>Titulo 2</th>
<th>Titulo 3</th>
<th>Titulo 4</th>
<th>Titulo 5</th>
<th>Titulo 6</th>
</tr>
</thead>
<tbody>
<tr>
<td>Elemento 1,1</td>
<td>Elemento 1,2</td>
<td>Elemento 1,3</td>
<td>Elemento 1,4</td>
<td>Elemento 1,5</td>
<td>Elemento 1,6</td>
</tr>
<tr>
<td>Elemento 2,1</td>
<td>Elemento 2,2</td>
<td>Elemento 2,3</td>
<td>Elemento 2,4</td>
<td>Elemento 2,5</td>
<td>Elemento 2,6</td>
</tr>
<tr>
<td>Elemento 3,1</td>
<td>Elemento 3,2</td>
<td>Elemento 3,3</td>
<td>Elemento 3,4</td>
<td>Elemento 3,5</td>
<td>Elemento 3,6</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
<div class="container">
<form>
<div class="mb-3">
<label for="nombre" class="form-label">Ingrese su nombre:</label>
<input type="text" class="form-control" id="nombre"
name="nombre">
</div>
<div class="mb-3">
<label for="clave" class="form-label">Ingrese su clave:</label>
<input type="password" class="form-control" id="clave"
name="clave">
</div>
<button type="submit" class="btn btn-primary">Confirmar</button>
</form>
</div>
</body>
</html>
Como podemos ver los dos controles input ocupan el 100% del contenedor
(recordemos que están pensado primero que se vean bien en un dispositivo
móvil, luego podemos disponerlos en una columna de una fila y darle distintos
tamaños según el ancho del dispositivo):
La clase 'mb-3' define el margen inferior con un cierto espacio (con el objeto
que los controles del formulario no salgan pegados por la parte inferior)
Para definir el margen inferior disponemos de las clases:
me-auto
me-1
me-2
me-3
me-4
me-5
me-auto
me-1
me-2
me-3
me-4
me-5
mt-auto
mt-1
mt-2
mt-3
mt-4
mt-5
(m)argin (s)tart
(m)argin (e)nd
(m)argin (s)tart
(m)argin (b)ottom
<div class="container">
<form>
<div class="mb-3">
<label for="archivo1" class="form-label">Control File por
defecto</label>
<input class="form-control" type="file" id="archivo1">
</div>
<div class="mb-3">
<label for="archivo2" class="form-label">Selección de múltiples
archivos</label>
<input class="form-control" type="file" id="archivo2" multiple>
</div>
<div class="mb-3">
<label for="archivo3" class="form-label">Control File
deshabilitado</label>
<input class="form-control" type="file" id="archivo3" disabled>
</div>
</form>
</div>
</body>
</html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form>
<div class="mb-3">
<label for="comentarios" class="form-label">Deje aquí sus
comentarios</label>
<textarea class="form-control" rows="5" id="comentarios"
name="comentarios"></textarea>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
</div>
</body>
</html>
Problema
Confeccionar un formulario que muestre tres checkbox un debajo del otro,
tres radio también uno debajo del otro, seguidamente tres checkbox uno al
lado del otro (en la misma fila) y por último tres radio uno al lado del otro.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="container">
<h1>En distintas filas</h1>
<form>
<div class="form-check">
<input class="form-check-input" type="checkbox" value=""
id="checkbox1" name="checkbox1">
<label class="form-check-label" for="checkbox1">
Opcion 1
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value=""
id="checkbox2" name="checkbox2">
<label class="form-check-label" for="checkbox2">
Opcion 2
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value=""
id="checkbox3" name="checkbox3">
<label class="form-check-label" for="checkbox3">
Opcion 3
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" value=""
id="radio1" name="grupo1">
<label class="form-check-label" for="radio1">
Opcion 1
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" value=""
id="radio2" name="grupo1">
<label class="form-check-label" for="radio2">
Opcion 2
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" value=""
id="radio3" name="grupo1">
<label class="form-check-label" for="radio1">
Opcion 3
</label>
</div>
</form>
</form>
</div>
</div>
</body>
</html>
En el navegador tenemos como resultado:
Interruptores
Con Bootstrap 5 podemos utilizar los controles HTML checkbox con una
imagen de interruptor. Debemos agregar la clase 'form-switch' al div que lo
envuelve.
Veamos con un ejemplo los interruptores:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" value=""
id="checkbox1" name="checkbox1">
<label class="form-check-label" for="checkbox1">
Opcion 1
</label>
</div>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" value=""
id="checkbox2" name="checkbox2">
<label class="form-check-label" for="checkbox2">
Opcion 2
</label>
</div>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" value=""
id="checkbox3" name="checkbox3">
<label class="form-check-label" for="checkbox3">
Opcion 3
</label>
</div>
</form>
</div>
</body>
</html>
En el navegador tenemos como resultado:
4 - form: control select
Para aplicar Bootstrap 5 a un control select solo debemos fijar la clase
"form-select" al select respectivo.
Veamos un ejemplo donde inicializamos dos controles select (uno de
selección unitario de elemento y otro control select que permita la selección
simultánea de varios elementos):
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form>
<label for="control1">Seleccione un elemento</label>
<select class="form-select mb-3" id="control1" name="control1">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
</body>
</html>
En el navegador podemos comprobar como se muestra cada uno de estos
tipos de control select:
También podemos agregar alguna de las siguientes clases para modificar la
dimensión del control select:
form-select-lg
form-select-sm
Problema
Construir un formulario de login que muestre a la izquierda "Nombre de
usuario:" y a la derecha el control donde se ingresa el nombre. Hacer lo mismo
para el campo de ingreso de la clave, mostrar "Ingrese clave" y del lado de la
derecha el control HTML password. Mostrar finalmente un botón a la altura
de los controles de entrada de datos. La interfaz debe ser similar a esta:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form>
<div class="mb-3 row">
<label for="usuario" class="col-sm-3 col-form-label">Nombre de
usuario:</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="usuario">
</div>
</div>
<div class="mb-3 row">
<label for="clave" class="col-sm-3 col-form-label">Ingrese
clave:</label>
<div class="col-sm-9">
<input type="password" class="form-control" id="clave">
</div>
</div>
<div class="mb-3 row">
<div class="offset-sm-3 col-sm-9">
<button type="submit" class="btn btn-
primary">Confirmar</button>
</div>
</div>
</form>
</div>
</body>
</html>
Luego cuando seleccionamos el control input de tipo text para el ingreso del
nombre de usuario la etiqueta se desplaza mediante una animación a la parte
superior:
<form>
<div class="mb-3 form-floating">
<input type="text" class="form-control" id="nombre" name="nombre"
placeholder="usuario">
<label for="nombre" class="form-label">Usuario:</label>
</div>
<div class="mb-3 form-floating">
<input type="password" class="form-control" id="clave"
name="clave" placeholder="clave">
<label for="clave" class="form-label">Clave:</label>
</div>
<button type="submit" class="btn btn-primary">Confirmar</button>
</form>
</div>
</body>
</html>
Textarea
Las etiquetas flotantes funcionan tanto para los controles input como para el
control textarea, pero para este último control debemos tener en cuenta de
no utilizar la propiedad rows para definir la cantidad de filas, en cambio
debemos definir en la hoja de estilo la propiedad height:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form>
<div class="form-floating mt-3 mb-3">
<textarea class="form-control" id="comentarios"
name="comentarios" placeholder="comentarios" style="height:
200px"></textarea>
<label for="comentarios">Deje aquí sus
comentarios</label>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
</div>
</body>
</html>
Tenemos como resultado:
Select
Para el control HTML de tipo select la etiqueta flotante esta visible
permanentemente:
<div class="container">
<form>
<div class="form-floating mt-3">
<select class="form-select" id="dias">
<option value="1">Lunes</option>
<option value="2">Martes</option>
<option value="3">Miércoles</option>
<option value="4">Jueves</option>
<option
value="5">Viernes</option>
<option value="6">Sábado</option>
<option value="7">Domingo</option>
</select>
<label for="dias">Día de la semana</label>
</div>
</form>
</div>
</body>
</html>
<div class="container">
Tengamos en cuenta que con el sistema de grillas sabemos que cada vez
que superamos 12 columnas, las siguientes se ubican en la siguiente fila,
luego la primera fila contiene los dos primeros controls:
<div class="col-md-6">
<label for="mail" class="form-label">Mail</label>
<input type="email" class="form-control" id="mail">
</div>
<div class="col-md-6">
<label for="clave" class="form-label">Clave</label>
<input type="password" class="form-control" id="clave">
</div>
Luego en una única fila se pide el ingreso de la dirección:
<div class="col-md-12">
<label for="direccion" class="form-label">Dirección</label>
<input type="text" class="form-control" id="direccion"
placeholder="Colon 120">
</div>
Seguidamente en la misma fila se solicita el ingreso de la ciudad, provincia y
el código postal:
<div class="col-md-6">
<label for="ciudad" class="form-label">Ciudad</label>
<input type="text" class="form-control" id="ciudad">
</div>
<div class="col-md-4">
<label for="provincia" class="form-label">Provincia</label>
<select id="provincia" class="form-select">
<option selected>Elija...</option>
<option value="Córdoba">Córdoba</option>
<option value="Buenos Aires">Buenos Aires</option>
<option value="Santa Fe">Santa Fe</option>
</select>
</div>
<div class="col-md-2">
<label for="codigopostal" class="form-label">Código postal</label>
<input type="text" class="form-control" id="codigopostal">
</div>
De forma similar solicitamos el resto de datos del formulario:
form-text
<div class="container">
<form>
<div class="mb-3">
<label for="nombre" class="form-label">Ingrese su nombre:</label>
<input type="text" class="form-control" id="nombre"
name="nombre">
<div class="form-text">No ingrese espacios en blanco.</div>
</div>
<div class="mb-3">
<label for="clave" class="form-label">Ingrese su clave:</label>
<input type="password" class="form-control" id="clave"
name="clave">
<div class="form-text">Debe tener al menos 10 caracteres, de los
cuales al menos uno debe ser un número.</div>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
</div>
</body>
</html>
En el navegador podemos ver los dos textos de ayuda bajo los controles
HTML:
form-control-lg
form-control-sm
<div class="container">
<p><strong>Tamaño pequeño</strong></p>
<form>
<div class="mb-3">
<label for="nombre2" class="form-label">Ingrese su
nombre:</label>
<input type="text" class="form-control form-control-sm"
id="nombre2" name="nombre2">
</div>
<div class="mb-3">
<label for="clave2" class="form-label">Ingrese su clave:</label>
<input type="password" class="form-control form-control-sm"
id="clave2" name="clave2">
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
<p><strong>Tamaño grande</strong></p>
<form>
<div class="mb-3">
<label for="nombre3" class="form-label">Ingrese su
nombre:</label>
<input type="text" class="form-control form-control-lg"
id="nombre3" name="nombre3">
</div>
<div class="mb-3">
<label for="clave3" class="form-label">Ingrese su clave:</label>
<input type="password" class="form-control form-control-lg"
id="clave3" name="clave3">
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
<p><strong>Tamaño normal</strong></p>
<form>
<div class="mb-3">
<label for="nombre" class="form-label">Ingrese su nombre:</label>
<input type="text" class="form-control" id="nombre"
name="nombre">
</div>
<div class="mb-3">
<label for="clave" class="form-label">Ingrese su clave:</label>
<input type="password" class="form-control" id="clave"
name="clave">
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
</div>
</body>
</html>
Los tres formularios con controles de distinto tamaño tienen una apariencia
en el navegador similar a:
Si queremos que el control de formulario aparezca con un tamaño pequeño
agregamos la clase "form-control-sm":
<input type="text" class="form-control form-control-sm" id="nombre2"
name="nombre2">
10 - form: control y grupo de controles HTML
deshabilitados
Para deshabilitar un único control de formulario HTML debemos insertar la
propiedad disabled al control respectivo.
En el caso que necesitemos deshabilitar un conjunto de controles agrupados
en una etiqueta HTML fieldset le asignamos la propiedad disabled a dicha
marca.
Problema
Implementar un formulario que contenga un fieldset deshabilitado y por otro
lado un control checkbox en forma independiente deshabilitado.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form>
<fieldset disabled>
<div class="mb-3">
<label for="usuario" class="form-label">Nombre de
usuario:</label>
<input type="text" class="form-control" id="usuario"
name="usuario">
</div>
<div class="mb-3">
<label for="clave" class="form-label">Ingrese clave:</label>
<input type="password" class="form-control" id="clave"
name="clave">
</div>
</fieldset>
<div class="form-check mb-3">
<input disabled class="form-check-input" type="checkbox" value=""
id="checkbox1" name="checkbox1">
<label class="form-check-label" for="checkbox1">
Acepta términos y condiciones
</label>
</div>
<button type="submit" class="btn btn-primary">Entrar</button>
</form>
</div>
</body>
</html>
En el navegador tenemos como resultado los dos controles del fieldset
deshabilitados, de la misma forma el control checkbox aparece deshabilitado:
<fieldset disabled>
Y para desactivar solo un control de formulario debemos fijar la
propiedad disabled para el control en particular:
<div class="container">
<form>
<label for="rango1" class="form-label">Ejemplo de contro
rango</label>
<input type="range" class="form-range" id="rango1">
</form>
</div>
</body>
</html>
En Firefox tenemos la siguiente representación:
Y en Chrome:
</body>
</html>
Podemos asociar también un control de formulario, por ejemplo un botón:
btn
btn-primary
btn-secondary
btn-success
btn-info
btn-warning
btn-danger
btn-dark
btn-light
btn-link
Siempre debemos asignar la clase btn y alguna de las otras clases con un
significado propio indicado por su color.
Cada una de estas clases define un estilo particular para un botón y tiene un
significado que nos ayudan a definir en que caso los debemos utilizar:
Problema
Mostrar una lista de button asociando a cada uno una clase distinta propuesta
por Bootstrap 5 y mostrando como leyenda su significado.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form>
<div class="mb-3">
<button type="submit" class="btn btn-primary">
btn-primary : Es un botón que se destaca entre un conjunto de
botones.</button>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-secondary">
btn-secondary : Es un botón no tan importante como btn-
primary.</button>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-success">
btn-success : Se utiliza para indicar una acción
exitosa.</button>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-info">
btn-info : Es un botón para información.</button>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-warning">
btn-warning : Es un botón que nos informa que debemos tener
cuidado con la acción que tiene asociado el botón.</button>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-danger">
btn-danger : Indica que la acción que tiene asociado el botón
es peligrosa.</button>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-dark">
btn-dark : Muestra un botón oscuro.</button>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-light">
btn-light : Muestra un botón claro.</button>
</div>
<div class="mb-3">
<button type="submit" class="btn btn-link">
btn-link : Convierte al botón como un hipervínculo, haciendo
que disminuya su importancia.</button>
</div>
</form>
</div>
</body>
</html>
El resultado de ejecutar esta página es:
Utilizar este estándar ayuda que nuestros visitantes se sientan muy cómodos
navegando nuestro sitio ya que seguramente ha visitado otros sitios que lo
utilizan.
Ya asociarán el color azul en un botón con un botón importante del sitio, el
amarillo con acciones que debemos tener cuidado, el rojo con acciones
peligrosas (por ejemplo borrar una cuenta) etc.
Bootstrap 5 dispone los mismos botones y significados pero solo pintando su
contorno por medio de las clases (menos el de btn-link):
btn
btn-outline-primary
btn-outline-secondary
btn-outline-success
btn-outline-info
btn-outline-warning
btn-outline-danger
btn-outline-dark
btn-outline-light
Problema
Mostrar una lista de button con los distintos tamaños que define Bootstrap
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form>
<button type="submit" class="btn btn-primary btn-sm">btn-sm :
tamaño pequeño</button>
<button type="submit" class="btn btn-primary btn-lg">btn-lg :
tamaño grande</button>
<button type="submit" class="btn btn-primary">tamaño
normal</button>
</form>
</div>
</body>
</html>
En el navegador tenemos como resultado:
Debemos asignar las clases btn, btn-primary o las otras vistas y finalmente
alguna de las propiedades relacionadas al tamaño del botón:
<button type="submit" class="btn btn-primary btn-sm">btn-sm : tamaño
pequeño</button>
2 - button: desactivo
Si queremos que un elemento HTML button se muestre y actúe como
desactivo debemos inicializar la propiedad disabled con el valor disabled.
Problema
Mostrar cuatro botones grandes. El primero activo y los tres siguientes
desactivados.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<form>
<button type="submit" class="btn btn-primary btn-lg">Botón
activo</button>
<button type="submit" class="btn btn-primary btn-lg"
disabled="disabled">Botón 1 desactivo</button>
<button type="submit" class="btn btn-primary btn-lg"
disabled="disabled">Botón 2 desactivo</button>
<button type="submit" class="btn btn-primary btn-lg"
disabled="disabled">Botón 3 desactivo</button>
</form>
</div>
</body>
</html>
Como vemos para desactivar un botón debemos inicializar la propiedad
disabled:
<button type="submit" class="btn btn-primary btn-lg"
disabled="disabled">Botón 1 desactivo</button>
El resultado visual y operativo en el navegador de un botón normal y tres
desactivados es:
Problema
Crear un grupo de botones con los números de 1 al 4. Por otro lado crear una
barra de herramientas con dos grupos de botones mostrando los números del
1 al 4 en castellano y en inglés.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="btn-group">
<button type="button" class="btn btn-primary">1</button>
<button type="button" class="btn btn-primary">2</button>
<button type="button" class="btn btn-primary">3</button>
</div>
<hr>
<div class="btn-toolbar">
<div class="btn-group me-3">
<button type="button" class="btn btn-primary">uno</button>
<button type="button" class="btn btn-primary">dos</button>
<button type="button" class="btn btn-primary">tres</button>
<button type="button" class="btn btn-primary">cuatro</button>
</div>
<div class="btn-group">
<button type="button" class="btn btn-primary">one</button>
<button type="button" class="btn btn-primary">two</button>
<button type="button" class="btn btn-primary">three</button>
<button type="button" class="btn btn-primary">four</button>
</div>
</div>
</div>
</body>
</html>
En el navegador tenemos una representación similar a:
btn-group-lg
btn-group-sm
<div class="container">
</div>
</body>
</html>
Y tenemos como resultado en el navegador una página similar a:
<div class="container">
<div class="btn-group">
<input type="checkbox" class="btn-check" id="btncheck1">
<label class="btn btn-outline-primary" for="btncheck1">Checkbox
1</label>
</div>
</body>
</html>
<div class="container">
</div>
</body>
</html>
16 - Tipografía
Bootstrap 5 usa por defecto un font-size de 16px para el elemento
"html".
Muchas etiquetas utilizan como medida relativa el rem que es proporcional al
font-size definido en la etiqueta "html".
La fuente por defecto que define Bootstrap 5 para la propiedad "font-family"
de la marca "body" es:
Bootstrap 5 usa una "lista de fuentes nativas" (fuentes del sistema operativo
del usuario), con una reserva para Helvetica Neue, Arial y sans-serif.
Los tamaños de las etiquetas h1, h2, h3 etc. se dimensionan de acuerdo a
medidas relativos (rem), si abrimos el código fuente del archivo bootstrap.css
tenemos las siguientes reglas:
h6, .h6, h5, .h5, h4, .h4, h3, .h3, h2, .h2, h1, .h1 {
margin-top: 0;
margin-bottom: 0.5rem;
font-weight: 500;
line-height: 1.2;
}
h1, .h1 {
font-size: calc(1.375rem + 1.5vw);
}
@media (min-width: 1200px) {
h1, .h1 {
font-size: 2.5rem;
}
}
h2, .h2 {
font-size: calc(1.325rem + 0.9vw);
}
@media (min-width: 1200px) {
h2, .h2 {
font-size: 2rem;
}
}
h3, .h3 {
font-size: calc(1.3rem + 0.6vw);
}
@media (min-width: 1200px) {
h3, .h3 {
font-size: 1.75rem;
}
}
h4, .h4 {
font-size: calc(1.275rem + 0.3vw);
}
@media (min-width: 1200px) {
h4, .h4 {
font-size: 1.5rem;
}
}
h5, .h5 {
font-size: 1.25rem;
}
h6, .h6 {
font-size: 1rem;
}
Como vemos los tamaños para las etiquetas son proporcionales al font-size
de la etiqueta "html" al utilizar rem como medida.
Es decir que la etiqueta h6 tiene tamaño de fuente de 1rem que es igual a
16px. Luego h5 tiene un tamaño de 20px que resulta de multiplicar 1.25 *
16px etc.
Problema
Mostrar una serie de títulos empleando primero las etiquetas h1 al h6, luego
hacer lo mismo con las clases "h1" a "h6".
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1>Titulo de nivel 1</h1>
<h2>Titulo de nivel 2</h2>
<h3>Titulo de nivel 3</h3>
<h4>Titulo de nivel 4</h4>
<h5>Titulo de nivel 5</h5>
<h6>Titulo de nivel 6</h6>
<hr>
<p class="h1">Texto con la clase h1</p>
<p class="h2">Texto con la clase h2</p>
<p class="h3">Texto con la clase h3</p>
<p class="h4">Texto con la clase h4</p>
<p class="h5">Texto con la clase h5</p>
<p class="h6">Texto con la clase h6</p>
</div>
</body>
</html>
En pantalla tenemos como resultado:
Si tenemos que mostrar títulos debemos utilizar las etiquetas h1, h2, h3 etc.,
en el caso que necesitemos mostrar texto dentro del navegador que coincida
en tamaño y fuente con respecto a los títulos pero que no sean títulos
utilizaremos las clases "h1", "h2" etc.
.display-2 {
font-size: calc(1.575rem + 3.9vw);
font-weight: 300;
line-height: 1.2;
}
@media (min-width: 1200px) {
.display-2 {
font-size: 4.5rem;
}
}
.display-3 {
font-size: calc(1.525rem + 3.3vw);
font-weight: 300;
line-height: 1.2;
}
@media (min-width: 1200px) {
.display-3 {
font-size: 4rem;
}
}
.display-4 {
font-size: calc(1.475rem + 2.7vw);
font-weight: 300;
line-height: 1.2;
}
@media (min-width: 1200px) {
.display-4 {
font-size: 3.5rem;
}
}
.display-5 {
font-size: calc(1.425rem + 2.1vw);
font-weight: 300;
line-height: 1.2;
}
@media (min-width: 1200px) {
.display-5 {
font-size: 3rem;
}
}
.display-6 {
font-size: calc(1.375rem + 1.5vw);
font-weight: 300;
line-height: 1.2;
}
@media (min-width: 1200px) {
.display-6 {
font-size: 2.5rem;
}
}
Una página que los emplea es:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1 class="display-1">Titulo 1 con display-1</h1>
<h1 class="display-2">Titulo 1 con display-2</h1>
<h1 class="display-3">Titulo 1 con display-3</h1>
<h1 class="display-4">Titulo 1 con display-4</h1>
<h1 class="display-5">Titulo 1 con display-5</h1>
<h1 class="display-6">Titulo 1 con display-6</h1>
</div>
</body>
</html>
En el navegador tenemos como resultado:
}
Aplicando a una página:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href=../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1>Titulo de nivel 1<small>(acotación)</small></h1>
<h2>Titulo de nivel 2<small>(acotación)</small></h2>
<h3>Titulo de nivel 3<small>(acotación)</small></h3>
<h4>Titulo de nivel 4<small>(acotación)</small></h4>
<h5>Titulo de nivel 5<small>(acotación)</small></h5>
<h6>Titulo de nivel 6<small>(acotación)</small></h6>
</div>
</body>
</html>
Y tenemos como resultado en el navegador:
Podemos agregar la clase 'text-muted' cuando definimos la etiqueta 'small'
dentro del título:
<div class="container">
<h1>Curso Web<small class="text-muted">(html, css y
javascript)</small></h1>
</div>
La representación visual es:
1 - Tipografía: listas
Bootstrap 5 define estilos para trabajar con listas ordenadas, listas no
ordenadas y listas de definición.
Veamos cual es la sintaxis para definir una lista ordenada:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<p>Ejemplo de lista ordenada</p>
<ol>
<li>Primer elemento</li>
<li>Segundo elemento</li>
<li>Tercer elemento</li>
<li>Cuarto elemento</li>
</ol>
</div>
</body>
</html>
Como vemos no hace falta especificar ninguna clase para que le asigne un
estilo a una lista ordenada de HTML, ya que el Bootstrap 5 define estilos para
los elementos HTML ol y li.
Un ejemplo de una lista no ordenada:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<p>Ejemplo de lista no ordenada</p>
<ul>
<li>Primer elemento</li>
<li>Segundo elemento</li>
<li>Tercer elemento</li>
<li>Cuarto elemento</li>
</ul>
</div>
</body>
</html>
Empleamos la marca HTML <ul> con sus respectivos <li>, luego obtenemos
como resultado una salida en el navegador similar a:
.list-unstyled
Muestra los elementos de la lista sin viñetas y sin margen izquierdo.
.list-inline
Muestra los elementos en una misma línea (además hay que agregarle la clase
"list-inline-item" a cada "li")
<div class="container">
<p>Ejemplo de lista no ordenada sin estilo</p>
<ul class="list-unstyled">
<li>Primer elemento</li>
<li>Segundo elemento</li>
<li>Tercer elemento</li>
<li>Cuarto elemento</li>
</ul>
<p>Ejemplo de lista no ordenada en línea</p>
<ul class="list-inline">
<li class="list-inline-item">Primer elemento</li>
<li class="list-inline-item">Segundo elemento</li>
<li class="list-inline-item">Tercer elemento</li>
<li class="list-inline-item">Cuarto elemento</li>
</ul>
</div>
</body>
</html>
En el navegador tenemos:
Bootstrap 5 también define estilos para las listas de definición que nos provee
HTML. Debemos agregar la clase "row" a la etiqueta dl si queremos una lista
horizontal y luego debemos plantear las columnas como ya conocemos con
el sistema de grillas.
Veamos un ejemplo:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<p>Ejemplo de lista de definición</p>
<dl>
<dt>Palabra 1</dt>
<dd>Definición de la palabra 1</dd>
<dt>Palabra 2</dt>
<dd>Definición de la palabra 2</dd>
<dt>Palabra 3</dt>
<dd>Definición de la palabra 3</dd>
</dl>
<p>Ejemplo de lista de definición horizontal</p>
<dl class="row">
<dt class="col-sm-3">Palabra 1</dt>
<dd class="col-sm-9">Definición de la palabra 1</dd>
<dt class="col-sm-3">Palabra 2</dt>
<dd class="col-sm-9">Definición de la palabra 2</dd>
<dt class="col-sm-3">Palabra 3</dt>
<dd class="col-sm-9">Definición de la palabra 3</dd>
</dl>
</div>
</body>
</html>
<div class="container">
<blockquote class="blockquote">
<p>Texto de la cita de bloque. Texto de la cita de bloque.
Texto de la cita de bloque. Texto de la cita de bloque.
Texto de la cita de bloque. Texto de la cita de bloque.
Texto de la cita de bloque. Texto de la cita de bloque.
Texto de la cita de bloque. Texto de la cita de bloque.</p>
</blockquote>
</div>
</body>
</html>
En el navegador tenemos como resultado:
Referencia a la fuente.
Podemos disponer una referencia a la fuente agregando una etiqueta
"figcaption" y agregando la clase "blockquote-footer" a la misma:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<blockquote class="blockquote">
<p>Texto de la cita de bloque. Texto de la cita de bloque.
Texto de la cita de bloque. Texto de la cita de bloque.
Texto de la cita de bloque. Texto de la cita de bloque.
Texto de la cita de bloque. Texto de la cita de bloque.
Texto de la cita de bloque. Texto de la cita de bloque.</p>
<figcaption class="blockquote-footer">Referencia de la
fuente:<cite>xxxxx</cite></figcaption>
</blockquote>
</div>
</body>
</html>
En el navegador tenemos como resultado:
Como podemos comprobar dentro de la etiqueta "blockquote" disponemos
una etiqueta "figcaption" donde definimos la clase "blockquote-footer".
Alineación.
Si queremos alinear el bloque de citas debemos aplicar alguna de estas tres
clases a la etiqueta "blockquote":
text-start
text-center
text-end
<div class="container">
<p>Este es un ejemplo de una abreviatura <abbr
title="Señor/a">Sr./a.</abbr></p>
<hr>
<p>Este es un ejemplo de un acrónimo <abbr title="Objeto Volador No
Identificado" class="initialism">ovni</abbr></p>
</div>
</body>
</html>
Tanto para abreviaturas y acrónimos empleamos el elemento HTML <abbr>.
En la definición de una abreviatura y un acrónimo indicamos la propiedad title
con el valor que se mostrará cuando pasemos con la flecha del mouse.
En un acrónimo además especificamos la clase class="initialism" (esto hace
que el texto que se muestre siempre aparece en mayúsculas.
En el navegador tenemos la siguiente representación:
<code>
Cuando queremos enfatizar un trozo de código de programación en una línea
empleamos el elemento <code>:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<p>Ejemplo del elemento HTML code</p>
<p>Nuestro primera línea en Basic puede haber sido <code>10 print
"Hola Mundo"</code></p>
</div>
</body>
</html>
<pre>
Para definir bloques de código utilizamos el elemento HTML pre, Bootstrap
define un estilo particular:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<p>Ejemplo del elemento HTML pre</p>
<pre>
10 print "hola mundo"
20 goto 10
</pre>
</div>
</body>
</html>
En el navegador tenemos la siguiente representación:
<div class="container">
<p class="text-start">Texto alineado a la izquierda.</p>
<hr>
<p class="text-end">Texto alineado a la derecha.</p>
<hr>
<p class="text-center">Texto centrado.</p>
<hr>
<p class="text-justify">
Texto justificado.Texto justificado.
Texto justificado.Texto justificado.
Texto justificado.Texto justificado.
Texto justificado.Texto justificado.
Texto justificado.Texto justificado.</p>
<hr>
<p class="small">Texto pequeño.</p>
<hr>
<p class="lead">Texto destacado.</p>
<hr>
<p class="text-nowrap">
Texto no ajustado.Texto no ajustado.Texto no ajustado.
Texto no ajustado.Texto no ajustado.Texto no ajustado.
Texto no ajustado.Texto no ajustado.Texto no ajustado.
Texto no ajustado.</p>
<hr>
<p class="text-lowercase">Texto en Minúsculas.</p>
<hr>
<p class="text-uppercase">Texto en Mayúsculas.</p>
<hr>
<p class="text-capitalize">texto capitalizado.</p>
<hr>
<p class="mark">Texto marcado.</p>
<p>Presion la tecla <kbd>Ctrl T</kbd></p>
</div>
</body>
</html>
En el navegador tenemos la siguiente representación de estas clases y
elementos HTML:
17 - Imágenes
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<img src="https://www.tutorialesprogramacionya.com/cssya/imagen1.png"
class="rounded">
<hr>
<img src="https://www.tutorialesprogramacionya.com/cssya/imagen1.png"
class="rounded-circle">
<hr>
<img src="https://www.tutorialesprogramacionya.com/cssya/foto1.jpg"
class="img-fluid">
<hr>
<img src="https://www.tutorialesprogramacionya.com/cssya/imagen1.png"
class="img-thumbnail">
<hr>
<img src="https://www.tutorialesprogramacionya.com/cssya/imagen1.png"
class="float-start">
<img src="https://www.tutorialesprogramacionya.com/cssya/imagen1.png"
class="float-end">
<hr>
</div>
</body>
</html>
Tenemos como resultado en el navegador:
18 - Componente: card (básica)
Problema
Crear tres tarjetas básicas en la misma fila que ocupen anchos iguales:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1>Prueba de tarjetas</h1>
<div class="row">
<div class="col-md">
<div class="card text-center">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 1</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
<div class="col-md">
<div class="card text-center">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 2</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
<div class="col-md">
<div class="card text-center">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 3</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
En el navegador tenemos como resultado:
<div class="card-body">
Para el título de la tarjeta disponemos un "h4" y le fijamos la clase
"card-title":
bg-primary
bg-success
bg-info
bg-warning
bg-danger
bg-secondary
bg-dark
bg-light
Problema
Crear tres tarjetas básicas en la misma fila que ocupen anchos iguales y
utilicen un color de fondo contextual distinto:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1>Prueba de tarjetas</h1>
<div class="row">
<div class="col-md">
<div class="card bg-success text-white">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 1</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
<div class="col-md">
<div class="card bg-warning text-white">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 2</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
<div class="col-md">
<div class="card bg-danger text-white">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 3</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
En el navegador tenemos como resultado:
border-primary
border-success
border-info
border-warning
border-danger
border-secondary
border-dark
border-light
<div class="col-md">
<div class="card border-warning">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 2</h4>
<p class="card-text">Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare sed
erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis dui.
</p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
<div class="col-md">
<div class="card border-danger">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 3</h4>
<p class="card-text">Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare sed
erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis dui.
</p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
</div>
En el navegador tenemos como resultado:
text-primary
text-success
text-info
text-warning
text-danger
text-secondary
text-dark
text-light
<div class="col-md">
<div class="card">
<div class="col-md">
<div class="card">
<div class="card-body text-danger">
<h4 class="card-title">Titulo de la tarjeta 3</h4>
<p class="card-text">Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare sed
erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis dui.
</p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
</div>
En el navegador tenemos como resultado:
<div class="container">
<h1>Prueba de tarjetas</h1>
<div class="row">
<div class="col-md">
<div class="card">
<img class="card-img-top"
src="https://www.tutorialesprogramacionya.com/imagenes/cuadro1.jpg">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 1</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
<div class="col-md">
<div class="card">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta 2</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
<img class="card-img-bottom"
src="https://www.tutorialesprogramacionya.com/imagenes/cuadro2.jpg">
</div>
</div>
</div>
</div>
</body>
</html>
En el navegador tenemos como resultado:
Imagen superpuesta.
Mediante la clase "card-img-overlay" podemos hacer que el cuerpo de la
tarjeta aparezca superpuesta sobre la imagen.
Si tenemos el siguiente trozo de código:
<div class="card">
<img class="card-img-top"
src="https://www.tutorialesprogramacionya.com/imagenes/cuadro2.jpg">
<div class="card-img-overlay">
<h4 class="card-title">Titulo de la tarjeta 1</h4>
<p class="card-text">Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare sed erat.
Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
En el navegador tenemos como resultado:
3 - Componente: card (con cabecera y/o pie de tarjeta)
Una tarjeta en Bootstrap 5 puede tener opcionalmente una cabecera y/o
pie de tarjeta para suministrar otro tipo de información.
Para disponer una cabecera disponemos de la clase "card-header" y para fijar
un pie de tarjeta debemos agregar la clase "card-footer".
Veamos un ejemplo con unas series de tarjetas que dispongan de cabecera
y/o pie de tarjeta:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row mt-3">
<div class="col-md">
<div class="card text-center">
<div class="card-header">
Cabecera
</div>
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
<div class="card-footer">
Pie de tarjeta
</div>
</div>
</div>
<div class="col-md">
<div class="card text-center">
<div class="card-header">
Cabecera
</div>
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
<div class="col-md">
<div class="card text-center">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
<div class="card-footer">
Pie de tarjeta
</div>
</div>
</div>
</div>
</div>
</body>
</html>
En el navegador tenemos como resultado:
Problema
Mostrar una tarjeta que contenga 4 pestañas, debe aparecer activa la
tercera.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row justify-content-center mt-3">
<div class="col-md-8">
<div class="card text-center border-info">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<a class="nav-link" href="#">Opcion 1</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Opcion 2</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="#">Opcion 3</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Opcion 4</a>
</li>
</ul>
</div>
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta</h4>
<p class="card-text">Lorem ipsum dolor sit amet,
consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare
sed erat. Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis
dui. </p>
<a href="#" class="btn btn-primary">Entrar</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
En el navegador tenemos como resultado:
Dentro de la cabecera de la tarjeta definimos una lista no ordenada (ul) con las tres clases
necesarias nav nav-tabs card-header-tabs:
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
Luego comenzamos a definir cada "li" con la clase "nav-item". Dentro las
anclas con la clase "nav-link":
<li class="nav-item">
<a class="nav-link" href="#">Opcion 1</a>
</li>
Finalmente la pestaña seleccionada debemos agregar la clase "active" al
ancla respectiva:
<div class="container">
<div class="card-group mt-3">
</div>
</div>
</body>
</html>
En el navegador tenemos como resultado:
Problema
Mostrar dos tres tarjetas que ocupen 5 columnas las dos primeras y 2
columnas la tercera.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-xxl-5">
<div class="card text-white text-center bg-primary mb-3">
<div class="card-header">Cabecera</div>
<div class="card-body">
<h5 class="card-title">Título</h5>
<p class="card-text">Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare sed erat.
Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis dui. </p>
<a href="#" class="btn btn-success">Entrar</a>
</div>
</div>
</div>
<div class="col-xxl-5">
<div class="card text-white text-center bg-primary mb-3">
<div class="card-header">Cabecera</div>
<div class="card-body">
<h5 class="card-title">Título</h5>
<p class="card-text">Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare sed erat.
Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis dui. </p>
<a href="#" class="btn btn-success">Entrar</a>
</div>
</div>
</div>
<div class="col-xxl-2">
<div class="card text-white text-center bg-primary mb-3">
<div class="card-header">Cabecera</div>
<div class="card-body">
<h5 class="card-title">Título</h5>
<p class="card-text">Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Etiam lectus sem,
tempor vitae mattis malesuada, ornare sed erat.
Pellentesque nulla dui, congue
nec tortor sit amet, maximus mattis dui. </p>
<a href="#" class="btn btn-success">Entrar</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
El resultado en el navegador es:
Tener en cuenta que las tarjetas colapsan y se muestran en una sola columna
cuando el ancho del dispositivo es inferior a 1400 píxeles: col-xxl-*
Podemos aplicar alguna de las clases: w-25, w-50 y w-75 para que las tarjetas
tomen un ancho relativo de 25%, 50% o 75%. Por ejemplo la primera tarjeta
con w-50 y la segunda con w-75 se muestran:
Si queremos la misma altura en todas las tarjetas debemos añadir la clase 'h-100' a cada una de
las tarjetas:
19 - Componente: alert
alert
alert-primary
alert-secondary
alert-success
alert-danger
alert-warning
alert-info
alert-light
alert-dark
<div class="container">
<div class="row mt-3">
<div class="col">
<div class="alert alert-primary">
<strong>alert-primary</strong> Prueba de componente alert
</div>
</div>
<div class="col">
<div class="alert alert-secondary">
<strong>alert-secondary</strong> Prueba de componente alert
</div>
</div>
<div class="col">
<div class="alert alert-success">
<strong>alert-success</strong> Prueba de componente alert
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="alert alert-danger">
<strong>alert-danger </strong> Prueba de componente alert
</div>
</div>
<div class="col">
<div class="alert alert-warning">
<strong>alert-warning </strong> Prueba de componente alert
</div>
</div>
<div class="col">
<div class="alert alert-info">
<strong>alert-info </strong> Prueba de componente alert
</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="alert alert-light">
<strong>alert-light </strong> Prueba de componente alert
</div>
</div>
<div class="col">
<div class="alert alert-dark">
<strong>alert-dark </strong> Prueba de componente alert
</div>
</div>
</div>
</div>
</body>
</html>
En el navegador tenemos como resultado:
En un cuadro de alerta está contemplado que podemos agregar títulos, divisores (<hr>) y
párrafos.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet" >
</head>
<body>
</div>
</body>
</html>
Para animar las alertas al descartarlas, debemos agregar las clases "fade" y "show".
<div class="container">
<button type="button" class="btn btn-primary" data-bs-toggle="modal"
data-bs-target="#dialogo1">Abrir ventana de diálogo</button>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
En el navegador cuando está abierto el diálogo tenemos:
El primer div que envuelve el diálogo y tiene asignada la clase "modal" es:
<div class="modal-dialog">
...
</div>
<div class="modal-content">
...
</div>
Luego dentro de ese tercer div disponemos los divs de la cabecera, cuerpo y pie del diálogo:
Para evitar que se cierre el diálogo cuando el operado presiona una región fuera del diálogo
debemos añadir la propiedad 'data-bs-backdrop' con el valor 'static':
Si el contenido del diálogo es muy grande, podemos hacer que se muestre una barra de scroll
en el diálogo mediante la clase 'modal-dialog-scrollable':
modal-sm
modal-lg
modal-xl
Estas clases se las debemos agregar al div donde se asigna la clase "modal-
dialog", por ejemplo:
<div class="container">
<button type="button" class="btn btn-primary" data-bs-toggle="modal"
data-bs-target="#dialogo1">Abrir ventana de diálogo</button>
</div>
</div>
</div>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
En el navegador cuando está abierto el diálogo tenemos:
modal-fullscreen-sm-down
modal-fullscreen-md-down
modal-fullscreen-lg-down
modal-fullscreen-xl-down
modal-fullscreen-xll-down
Problema
Crear una página con dos botones, el primero debe abrir diálogo modal que
muestre en su interior dos tarjetas con imágenes y el segundo botón debe
abrir un diálogo para hacer el login.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<button type="button" class="btn btn-primary" data-bs-toggle="modal"
data-bs-target="#dialogo1">Abrir diálogo con tarjetas</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal"
data-bs-target="#dialogo2">Abrir diálogo con un formulario</button>
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta
1</h4>
<p class="card-text">Lorem ipsum dolor sit
amet, consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis
malesuada, ornare sed erat. Pellentesque nulla dui, congue
nec tortor sit amet,
maximus mattis dui. </p>
</div>
</div>
</div>
<div class="col">
<div class="card">
<img class="card-img-top"
src="https://www.tutorialesprogramacionya.com/imagenes/cuadro2.jpg">
<div class="card-body">
<h4 class="card-title">Titulo de la tarjeta
2</h4>
<p class="card-text">Lorem ipsum dolor sit
amet, consectetur adipiscing elit. Etiam lectus sem,
tempor vitae mattis
malesuada, ornare sed erat. Pellentesque nulla dui, congue
nec tortor sit amet,
maximus mattis dui. </p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
En el navegador cuando está abierto el primer diálogo tenemos:
Dentro del cuerpo del diálogo creamos una grilla fluida y el resto es lo que ya conocemos:
</body>
</html>
.navbar-expand-sm
.navbar-expand-md
.navbar-expand-lg
.navbar-expand-xl
bg-secondary
bg-info
bg-warning
bg-danger
bg-dark
bg-light
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
En una pantalla de tamaño mediano o grande la barra de navegación se muestra de esta forma:
22 - Componente: carousel
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1, shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
En el navegador tenemos:
23 - Componente: pagination
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1, shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<ul class="pagination">
<li class="page-item"><a class="page-link"
href="#"><</a></li>
<li class="page-item"><a class="page-link"
href="#">1</a></li>
<li class="page-item"><a class="page-link"
href="#">2</a></li>
<li class="page-item"><a class="page-link"
href="#">3</a></li>
<li class="page-item"><a class="page-link"
href="#">4</a></li>
<li class="page-item"><a class="page-link"
href="#">5</a></li>
<li class="page-item"><a class="page-link"
href="#">6</a></li>
<li class="page-item"><a class="page-link"
href="#">></a></li>
</ul>
</div>
</body>
</html>
En el navegador tenemos:
Podemos mostrar los enlaces más grandes o más pequeño
dependiendo si le agregamos las clases "pagination-sm" o
"pagination-lg":
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 4</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="../css/bootstrap.min.css">
</head>
<body>
<div class="container">
<ul class="pagination">
<li class="page-item"><a class="page-link"
href="#"><</a></li>
<li class="page-item"><a class="page-link"
href="#">1</a></li>
<li class="page-item"><a class="page-link"
href="#">2</a></li>
<li class="page-item"><a class="page-link"
href="#">3</a></li>
<li class="page-item"><a class="page-link"
href="#">4</a></li>
<li class="page-item"><a class="page-link"
href="#">5</a></li>
<li class="page-item"><a class="page-link"
href="#">6</a></li>
<li class="page-item"><a class="page-link"
href="#">></a></li>
</ul>
<hr>
<ul class="pagination pagination-sm">
<li class="page-item"><a class="page-link"
href="#"><</a></li>
<li class="page-item"><a class="page-link"
href="#">1</a></li>
<li class="page-item"><a class="page-link"
href="#">2</a></li>
<li class="page-item"><a class="page-link"
href="#">3</a></li>
<li class="page-item"><a class="page-link"
href="#">4</a></li>
<li class="page-item"><a class="page-link"
href="#">5</a></li>
<li class="page-item"><a class="page-link"
href="#">6</a></li>
<li class="page-item"><a class="page-link"
href="#">></a></li>
</ul>
<hr>
<ul class="pagination pagination-lg">
<li class="page-item"><a class="page-link"
href="#"><</a></li>
<li class="page-item"><a class="page-link"
href="#">1</a></li>
<li class="page-item active"><a class="page-link"
href="#">2</a></li>
<li class="page-item"><a class="page-link"
href="#">3</a></li>
<li class="page-item"><a class="page-link"
href="#">4</a></li>
<li class="page-item"><a class="page-link"
href="#">5</a></li>
<li class="page-item"><a class="page-link"
href="#">6</a></li>
<li class="page-item"><a class="page-link"
href="#">></a></li>
</ul>
</div>
</body>
</html>
En el navegador tenemos:
justify-content-center
justify-content-start
justify-content-end
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-
scale=1, shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<ul class="pagination">
<li class="page-item"><a class="page-link"
href="#"><</a></li>
<li class="page-item"><a class="page-link"
href="#">1</a></li>
<li class="page-item"><a class="page-link"
href="#">2</a></li>
<li class="page-item"><a class="page-link"
href="#">3</a></li>
<li class="page-item"><a class="page-link"
href="#">4</a></li>
<li class="page-item"><a class="page-link"
href="#">5</a></li>
<li class="page-item"><a class="page-link"
href="#">6</a></li>
<li class="page-item"><a class="page-link"
href="#">></a></li>
</ul>
<hr>
<ul class="pagination pagination-sm">
<li class="page-item"><a class="page-link"
href="#"><</a></li>
<li class="page-item"><a class="page-link"
href="#">1</a></li>
<li class="page-item"><a class="page-link"
href="#">2</a></li>
<li class="page-item"><a class="page-link"
href="#">3</a></li>
<li class="page-item"><a class="page-link"
href="#">4</a></li>
<li class="page-item"><a class="page-link"
href="#">5</a></li>
<li class="page-item"><a class="page-link"
href="#">6</a></li>
<li class="page-item"><a class="page-link"
href="#">></a></li>
</ul>
<hr>
<ul class="pagination pagination-lg">
<li class="page-item"><a class="page-link"
href="#"><</a></li>
<li class="page-item"><a class="page-link"
href="#">1</a></li>
<li class="page-item active"><a class="page-link"
href="#">2</a></li>
<li class="page-item"><a class="page-link"
href="#">3</a></li>
<li class="page-item"><a class="page-link"
href="#">4</a></li>
<li class="page-item"><a class="page-link"
href="#">5</a></li>
<li class="page-item"><a class="page-link"
href="#">6</a></li>
<li class="page-item"><a class="page-link"
href="#">></a></li>
</ul>
</div>
</body>
</html>
En el navegador tenemos:
24 - Componente: progress
Otra herramienta que nos presenta el framework Bootstrap 5 son las barras
de progreso. Normalmente se las utiliza para indicar cuanto se ha avanzado
en una actividad.
<div class="container">
<div class="progress">
<div class="progress-bar" style="width:70%">
70%
</div>
</div>
</div>
</body>
</html>
Además de los dos div con las respectivas clases es obligatorio inicializar la
propiedad style indicando el porcentaje a mostrar en el avance.
Tenemos Como resultado:
bg-success
bg-info
bg-warning
bg-danger
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
</div>
</body>
</html>
Tenemos Como resultado:
<div class="container">
<div class="progress">
<div class="progress-bar progress-bar-striped bg-success"
style="width:70%">
70%
</div>
</div>
</div>
</body>
</html>
Tenemos Como resultado:
<div class="container">
<div class="progress">
<div class="progress-bar bg-success"
style="width:30%">Correcto</div>
<div class="progress-bar bg-warning"
style="width:30%">Cuidado</div>
<div class="progress-bar bg-danger"
style="width:20%">Peligro</div>
</div>
</div>
</body>
</html>
<div class="container">
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button"
id="dropdown1" data-bs-toggle="dropdown">
Buscadores
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="http://www.google.com">Google</a>
<a class="dropdown-item" href="http://www.bing.com">Bing</a>
<a class="dropdown-item" href="http://www.yahoo.com">Yahoo</a>
</div>
</div>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
<div class="dropdown">
Dentro de este div disponemos un "button" que debe agregar a parte de las
clases que conocemos btn, btn-primary la clase dropdown-toggle. Debemos
definir la propiedad id con un nombre:
<div class="dropdown-menu">
<a class="dropdown-item" href="http://www.google.com">Google</a>
<a class="dropdown-item" href="http://www.bing.com">Bing</a>
<a class="dropdown-item" href="http://www.yahoo.com">Yahoo</a>
</div>
<div class="dropdown-menu">
<a class="dropdown-item" href="http://www.google.com">Google</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="http://www.bing.com">Bing</a>
<a class="dropdown-item" href="http://www.yahoo.com">Yahoo</a>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
El aspecto de los tres tamaños:
Despliegue hacia arriba.
Si queremos que la lista desplegable se muestre hacia arriba (en el caso que
haya espacio) debemos cambiar el div principal por la clase: "dropup":
<div class="container" style="margin-top:12rem;">
<div class="dropup">
<button class="btn btn-primary btn dropdown-toggle" type="button"
id="dropdown1" data-bs-toggle="dropdown">
Buscadores
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="http://www.google.com">Google</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="http://www.bing.com">Bing</a>
<a class="dropdown-item" href="http://www.yahoo.com">Yahoo</a>
</div>
</div>
</div>
Luego se muestra:
Luego se muestra:
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
Luego si seleccionamos el que debe mostrarse a derecha:
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min
.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="dropdown">
<button class="btn btn-primary dropdown-toggle" type="button"
id="dropdown1" data-bs-toggle="dropdown">
Login
</button>
<div class="dropdown-menu">
<form class="ps-4 pe-4">
<div class="mb-3">
<label for="nombre" class="form-label">Ingrese su
nombre:</label>
<input type="text" class="form-control" id="nombre"
name="nombre">
</div>
<div class="mb-3">
<label for="clave" class="form-label">Ingrese su
clave:</label>
<input type="password" class="form-control" id="clave"
name="clave">
</div>
<button type="submit" class="btn btn-
primary">Confirmar</button>
</form>
</div>
</div>
</div>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/js/bootstrap.bundl
e.min.js"></script>
</body>
</html>
Luego en el navegador cuando presionamos el dropdown se muestra el
formulario:
Las clases ps-4 pe-4 definen un padding-left y padding-right de 1.5rem para
que los controles de formulario no salgan pegados a los bordes.
Split Button.
Con esta variante solo se desplega el menú cuando se presiona un pequeño
botón de la derecha:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="btn-group">
<button type="button" class="btn btn-danger">Buscadores</button>
<button type="button" class="btn btn-danger dropdown-toggle
dropdown-toggle-split" data-bs-toggle="dropdown">
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="http://www.google.com">Google</a>
<a class="dropdown-item" href="http://www.bing.com">Bing</a>
<a class="dropdown-item" href="http://www.yahoo.com">Yahoo</a>
</div>
</div>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
Luego en el navegador cuando presionamos el botón de la derecha tenemos:
Lista desplegable oscura.
Para que la lista desplegable se muestre oscura debemos agregar la clase
'dropdown-menu-dark':
26 - Componente: collapse
La componente collapse permite mostrar u ocultar el contenido de un
"div" cuando se presiona un botón o ancla.
Para su funcionamiento requiere importar la librería de Javascript.
La clase involucrada para su funcionamiento se llama "collapse".
Veamos una página que cuando se presiona un hipervínculo se muestra un
recuadro con un texto.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<a href="#politica" data-bs-toggle="collapse">Políticas de
privacidad</a>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
Luego el div que inicialmente se encuentra oculto debe tener definidas las
propiedades "id" y la clase "collapse":
Si necesitamos que cuando carga la página el contenido del div esté visible y
que eventualmente el visitante lo pueda ocultar debemos agregar la clase
"show":
<div id="politica" class="collapse show">
Múltiples áreas
Podemos mostrar y ocultar varias áreas:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<p>
<a href="#area1" data-bs-toggle="collapse" data-bs-
target="#area1">Area 1</a>
<a href="#area2" data-bs-toggle="collapse" data-bs-
target="#area2">Area 2</a>
</p>
<div class="row">
<div class="col">
<div class="collapse multi-collapse" id="area1">
<div class="card card-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Etiam lectus sem,
tempor vitae mattis malesuada, ornare sed erat. Pellentesque
nulla dui, congue
nec tortor sit amet, maximus mattis dui.
</div>
</div>
</div>
<div class="col">
<div class="collapse multi-collapse" id="area2">
<div class="card card-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Etiam lectus sem,
tempor vitae mattis malesuada, ornare sed erat. Pellentesque
nulla dui, congue
nec tortor sit amet, maximus mattis dui.
</div>
</div>
</div>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html
Como resultado tenemos:
27 - Componente: accordion
En Bootstrap 5 disponemos de una componente llamada "accordion"
que básicamente muestra una serie de enlaces que ocultan contenido.
Cuando se presiona un hipervínculo se muestra el contenido para dicho
enlace, luego cuando se presiona otro enlace se oculta el actual y se abre el
nuevo.
Es muy utilizado en la web en sitios sobre "preguntas frecuentes","políticas
de privacidad", "descripción de características de productos" etc.
Veamos un ejemplo con la componente "accordion":
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div id="accordion1">
<div class="accordion-item">
<div class="accordion-header" id="cabecera1">
<h5 class="mb-0">
<button class="accordion-button" data-bs-toggle="collapse"
data-bs-target="#respuesta1" aria-expanded="true"
aria-controls="respuesta1">
Pregunta frecuente 1
</button>
</h5>
</div>
<div id="respuesta1" class="accordion-collapse collapse show"
aria-labelledby="cabecera1" data-bs-parent="#accordion1">
<div class="accordion-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
</div>
</div>
</div>
<div class="accordion-item">
<div class="accordion-header" id="cabecera2">
<h5 class="mb-0">
<button class="accordion-button" data-bs-toggle="collapse"
data-bs-target="#respuesta2" aria-expanded="true"
aria-controls="respuesta2">
Pregunta frecuente 2
</button>
</h5>
</div>
<div id="respuesta2" class="accordion-collapse collapse" aria-
labelledby="cabecera2" data-bs-parent="#accordion1">
<div class="accordion-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
</div>
</div>
</div>
<div class="accordion-item">
<div class="accordion-header" id="cabecera3">
<h5 class="mb-0">
<button class="accordion-button" data-bs-toggle="collapse"
data-bs-target="#respuesta3" aria-expanded="true"
aria-controls="respuesta3">
Pregunta frecuente 3
</button>
</h5>
</div>
<div id="respuesta3" class="accordion-collapse collapse" aria-
labelledby="cabecera3" data-bs-parent="#accordion1">
<div class="accordion-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed
do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
</div>
</div>
</div>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
Como resultado tenemos:
<div id="accordion1">
Utilizamos la clase "accordion-item" para definir cada una de las partes del
acordeón (el div oculto si define la clase accordion-collapse, luego collapse y
show si se muestra inmediatamente). Para la cabecera empleamos la clase
accordion-header y el botón de tipo accordion-button:
<div class="accordion-item">
<div class="accordion-header" id="cabecera1">
<h5 class="mb-0">
<button class="accordion-button" data-bs-toggle="collapse" data-bs-
target="#respuesta1" aria-expanded="true"
aria-controls="respuesta1">
Pregunta frecuente 1
</button>
</h5>
</div>
<div id="respuesta1" class="accordion-collapse collapse show" aria-
labelledby="cabecera1" data-bs-parent="#accordion1">
<div class="accordion-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
</div>
</div>
</div>
Contenido abierto.
Debemos omitir el atributo data-bs-parent en cada uno de los item del
accordion para que los elementos de acordeón permanezcan abiertos cuando
se abre otro elemento:
28 - Componente: breadcrumb
Breadcrumb significa "migas de pan" y su nombre tiene origen en el
cuento de "pulgarcito" donde dicho personaje dejaba migas de pan para
recordar el camino de regreso.
En la web breadcrumb son una lista de enlaces jerárquicos desde la página
principal hasta la página que estamos visitando. Por ejemplo un "breadrumb"
de un sitio le lenguajes de programación podría ser:
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min
.css" rel="stylesheet"
integrity="sha384-
wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0"
crossorigin="anonymous">
</head>
<body>
<div class="container">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">Diseño web</a></li>
<li class="breadcrumb-item"><a href="#">CSS</a></li>
<li class="breadcrumb-item active">Bootstrap 5</li>
</ol>
</div>
</body>
</html>
29 - Componente: badge
Un badge (distintivo o insignia) es una pequeña etiqueta que se agrega
a otras componentes para mostrar un pequeño mensaje o contador.
Ejemplos visuales de badges son:
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h1>Tutorial de Bootstrap 5 <span class="badge bg-
warning">Nuevo</span></h1>
<button type="button" class="btn btn-primary">
Mensajes<span class="badge bg-danger ms-1">4</span>
</button>
</div>
</body>
</html>
nav
nav-link
Vemos un menú de navegación básico implementado con la clase "nav":
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<nav class="nav">
<a class="nav-link" href="#">Opción 1</a>
<a class="nav-link" href="#">Opción 2</a>
<a class="nav-link" href="#">Opción 3</a>
<a class="nav-link" href="#">Opción 4</a>
<a class="nav-link disabled" href="#">Opción 5</a>
</nav>
</div>
</body>
</html>
En el navegador se muestra:
justify-content-end
justify-content-center
justify-content-between
justify-content-around
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<h2>justify-content-end</h2>
<nav class="nav justify-content-end">
<a class="nav-link" href="#">Opción 1</a>
<a class="nav-link" href="#">Opción 2</a>
<a class="nav-link" href="#">Opción 3</a>
<a class="nav-link" href="#">Opción 4</a>
<a class="nav-link disabled" href="#">Opción 5</a>
</nav>
<hr>
<h2>justify-content-start</h2>
<nav class="nav justify-content-start">
<a class="nav-link" href="#">Opción 1</a>
<a class="nav-link" href="#">Opción 2</a>
<a class="nav-link" href="#">Opción 3</a>
<a class="nav-link" href="#">Opción 4</a>
<a class="nav-link disabled" href="#">Opción 5</a>
</nav>
<hr>
<h2>justify-content-center</h2>
<nav class="nav justify-content-center">
<a class="nav-link" href="#">Opción 1</a>
<a class="nav-link" href="#">Opción 2</a>
<a class="nav-link" href="#">Opción 3</a>
<a class="nav-link" href="#">Opción 4</a>
<a class="nav-link disabled" href="#">Opción 5</a>
</nav>
<hr>
<h2>justify-content-between</h2>
<nav class="nav justify-content-between">
<a class="nav-link" href="#">Opción 1</a>
<a class="nav-link" href="#">Opción 2</a>
<a class="nav-link" href="#">Opción 3</a>
<a class="nav-link" href="#">Opción 4</a>
<a class="nav-link disabled" href="#">Opción 5</a>
</nav>
<hr>
<h2>justify-content-around</h2>
<nav class="nav justify-content-around">
<a class="nav-link" href="#">Opción 1</a>
<a class="nav-link" href="#">Opción 2</a>
<a class="nav-link" href="#">Opción 3</a>
<a class="nav-link" href="#">Opción 4</a>
<a class="nav-link disabled" href="#">Opción 5</a>
</nav>
</div>
</body>
</html>
En el navegador tenemos el siguiente resultado:
Menú vertical.
Para mostrar las opciones una debajo del la otra debemos agregar la clase
"flex-column" a la etiqueta HTML "nav":
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<nav class="nav flex-column">
<a class="nav-link" href="#">Opción 1</a>
<a class="nav-link" href="#">Opción 2</a>
<a class="nav-link" href="#">Opción 3</a>
<a class="nav-link" href="#">Opción 4</a>
<a class="nav-link disabled" href="#">Opción 5</a>
</nav>
</div>
</body>
</html>
En el navegador tenemos el siguiente resultado:
1 - Componente: nav (vista de pestañas o pastillas)
Podemos fácilmente transformar nuestro menú de opciones a pestañas
agregando la clase "nav-tabs", de forma similar si queremos que se muestren
como pastillas debemos emplear en su lugar la clase "nav-pills".
Veamos un ejemplo que muestre un menú con pestañas, mostrando la
segunda opción activa:
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<nav class="nav nav-tabs mt-2">
<a class="nav-link" href="#">Opción 1</a>
<a class="nav-link active" href="#">Opción 2</a>
<a class="nav-link" href="#">Opción 3</a>
<a class="nav-link" href="#">Opción 4</a>
<a class="nav-link disabled" href="#">Opción 5</a>
</nav>
</div>
</body>
</html>
Agregamos la clase mt-2 para dar un margen superior y evitar que salga
pegado.
En el navegador tenemos el siguiente resultado:
Si cambiamos la clase "nav-tabs" por la clase "nav-pills" el resultado visual
será:
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<nav class="nav nav-pills mt-2">
<a class="nav-link" href="#">Opción 1</a>
<a class="nav-link active" href="#">Opción 2</a>
<a class="nav-link" href="#">Opción 3</a>
<a class="nav-link" href="#">Opción 4</a>
<a class="nav-link disabled" href="#">Opción 5</a>
</nav>
</div>
</body>
</html>
En el navegador tenemos el siguiente resultado:
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<ul class="nav mt-2">
<li class="nav-item">
<a class="nav-link" href="#">Opción 1</a>
</li>
<li class="nav-item">
<a class="nav-link active" href="#">Opción 2</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-bs-toggle="dropdown"
href="#">Buscadores</a>
<div class="dropdown-menu">
<a class="dropdown-item"
href="http://www.google.com">Google</a>
<a class="dropdown-item" href="http://www.bing.com">Bing</a>
<a class="dropdown-item" href="http://www.yahoo.com">Yahoo</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Opción 4</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Opción 5</a>
</li>
</ul>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
<li class="nav-item">
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<ul class="nav nav-tabs mt-3">
<li class="nav-item">
<a class="nav-link active" data-bs-toggle="tab" href="#opcion1"
>Opción 1</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#opcion2">Opción
2</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#opcion3">Opción
3</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="opcion1">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas
vestibulum magna vitae
lectus iaculis ultricies. Donec nibh massa, ornare eget diam et,
mattis sodales augue.
Etiam tempus turpis id tellus vehicula egestas efficitur a nisi.
Pellentesque eget justo
tellus. Vivamus hendrerit leo neque, et sagittis lorem blandit sed.
Cras fringilla lorem
libero, a tempus lorem iaculis ut. Mauris ex purus, porta vitae
tristique consectetur,
posuere quis nibh. In ut laoreet nisi. Etiam elementum eget justo
in hendrerit. Morbi ut
orci a nisi porta vulputate non a libero. Lorem ipsum dolor sit
amet, consectetur
adipiscing elit. Praesent malesuada lorem arcu, convallis
scelerisque turpis dignissim quis.
</div>
<div class="tab-pane fade" id="opcion2" >
Cras non purus urna. Vestibulum nec felis felis. Quisque luctus
vehicula ipsum,
id pellentesque nulla luctus at. Maecenas ut sodales velit. Sed
orci leo, consequat
in lacus ac, pulvinar ullamcorper ex. Cras vulputate vel tortor
eget posuere.
Quisque sit amet metus sed urna ultrices placerat eu a nunc.
</div>
<div class="tab-pane fade" id="opcion3">
Etiam congue, metus eu ultricies euismod, est magna condimentum
sem, eget commodo
elit nisl id sapien. Proin sodales accumsan nulla non molestie.
Nulla tempus
congue arcu, a sagittis ante dapibus vitae. Proin tincidunt
tincidunt accumsan.
Morbi pretium venenatis tempor. Sed sollicitudin ante odio, non
commodo eros
egestas et. Nulla efficitur eros non quam vestibulum feugiat.
Aliquam libero magna,
dignissim id dapibus eget, posuere eu nibh.
</div>
</div>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
En el navegador tenemos el siguiente resultado cuando está seleccionada
la primera opción:
Y cuando seleccionamos la segunda opción cambia el contenido que se
muestra:
Definimos una lista no ordenada (ul) con las clases "nav" y "nav-tabs":
Cada "li" debe agregar la clase "nav-item" y el ancla contenida debe definir la
propiedad data-bs-toggle con el valor "tab" y la propiedad href con un valor
que debe coincidir con el div definido más abajo:
<li class="nav-item">
<a class="nav-link active" data-bs-toggle="tab" href="#opcion1" >Opc
ión 1</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#opcion2">Opción 2</a
>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab" href="#opcion3">Opción 3</a
>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane fade show active" id="opcion1">
...
</div>
<div class="tab-pane fade" id="opcion2" >
...
</div>
<div class="tab-pane fade" id="opcion3">
...
</div>
</div>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row">
<div class="col-3">
<ul class="nav flex-column nav-pills">
<li class="nav-item">
<a class="nav-link active" data-bs-toggle="tab"
href="#opcion1" >Opción 1</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab"
href="#opcion2">Opción 2</a>
</li>
<li class="nav-item">
<a class="nav-link" data-bs-toggle="tab"
href="#opcion3">Opción 3</a>
</li>
</ul>
</div>
<div class="col-9">
<div class="tab-content">
<div class="tab-pane fade show active" id="opcion1">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas
vestibulum magna vitae
lectus iaculis ultricies. Donec nibh massa, ornare eget diam et,
mattis sodales augue.
Etiam tempus turpis id tellus vehicula egestas efficitur a nisi.
Pellentesque eget justo
tellus. Vivamus hendrerit leo neque, et sagittis lorem blandit
sed. Cras fringilla lorem
libero, a tempus lorem iaculis ut. Mauris ex purus, porta vitae
tristique consectetur,
posuere quis nibh. In ut laoreet nisi. Etiam elementum eget justo
in hendrerit. Morbi ut
orci a nisi porta vulputate non a libero. Lorem ipsum dolor sit
amet, consectetur
adipiscing elit. Praesent malesuada lorem arcu, convallis
scelerisque turpis dignissim quis.
</div>
<div class="tab-pane fade" id="opcion2" >
Cras non purus urna. Vestibulum nec felis felis. Quisque luctus
vehicula ipsum,
id pellentesque nulla luctus at. Maecenas ut sodales velit. Sed
orci leo, consequat
in lacus ac, pulvinar ullamcorper ex. Cras vulputate vel tortor
eget posuere.
Quisque sit amet metus sed urna ultrices placerat eu a nunc.
</div>
<div class="tab-pane fade" id="opcion3">
Etiam congue, metus eu ultricies euismod, est magna condimentum
sem, eget commodo
elit nisl id sapien. Proin sodales accumsan nulla non molestie.
Nulla tempus
congue arcu, a sagittis ante dapibus vitae. Proin tincidunt
tincidunt accumsan.
Morbi pretium venenatis tempor. Sed sollicitudin ante odio, non
commodo eros
egestas et. Nulla efficitur eros non quam vestibulum feugiat.
Aliquam libero magna,
dignissim id dapibus eget, posuere eu nibh.
</div>
</div>
</div>
</div>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
En el navegador tenemos:
31 - Componente: Scrollspy
Bootstrap 5 nos provee la posibilidad que según en que parte de la página
nos encontremos se ilumine la opción de dicha sección.
Se requiere para su funcionamiento tener importada la librería de Javascript.
Problema
Implementaremos una página que tenga un menú de navegación fijo en la
parte superior de la página con los enlaces "card", "form" y "accordion".
Cuando se presione alguno de los hipervínculos saltaremos a la sección que
muestra un ejemplo de dicha componente.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body data-spy="scroll">
<div class="container-fluid">
<nav id="menu1" class="navbar navbar-expand-sm navbar-dark bg-dark
fixed-top">
<!-- enlaces -->
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="#seccion1">card</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#seccion2">form</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#seccion3">accordion</a>
</li>
</ul>
</nav>
<div class="accordion-item">
<div class="accordion-header" id="cabecera2">
<h5 class="mb-0">
<button class="accordion-button" data-bs-toggle="collapse"
data-bs-target="#respuesta2"
aria-expanded="true" aria-controls="respuesta2">
Pregunta frecuente 2
</button>
</h5>
</div>
<div id="respuesta2" class="accordion-collapse collapse" aria-
labelledby="cabecera2"
data-bs-parent="#accordion1">
<div class="accordion-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat
non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
</div>
</div>
</div>
<div class="accordion-item">
<div class="accordion-header" id="cabecera3">
<h5 class="mb-0">
<button class="accordion-button" data-bs-toggle="collapse"
data-bs-target="#respuesta3"
aria-expanded="true" aria-controls="respuesta3">
Pregunta frecuente 3
</button>
</h5>
</div>
<div id="respuesta3" class="accordion-collapse collapse" aria-
labelledby="cabecera3"
data-bs-parent="#accordion1">
<div class="accordion-body">
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut labore et
dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in
reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat
non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.
</div>
</div>
</div>
</div>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
Todo el contenido está en la misma página y lo que hacemos con los enlaces
es desplazarnos hasta la sección respectiva.
Si seleccionamos la primera opción:
Si nos desplazamos con la barra de scroll veremos que según en que sección
estamos la opción del menú se activa.
Cada sección tiene que definir una propiedad id con el mismo valor que
almacenamos en la propiedad href del menú:
<body data-bs-spy="scroll">
32 - Componente: Tooltips
La componente Tooltip muestra un pequeño mensaje cuando el usuario se
desplaza con la flecha del mouse sobre un elemento HTML que se le ha
configurado un Tooltip.
Para trabajar con esta componente además de importar el archivo CSS,
debemos importar el archivo de Javascript.
Problema
Mostrar tres botones a sitios de buscadores. Mostrar un mensaje cuando la
flecha del mouse se encuentra encima de botón.
<!doctype html>
<html>
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<a data-bs-toggle="mensaje" title="Google Inc."
href="https://www.google.com" class="btn btn-success">Google</a>
<a data-bs-toggle="mensaje" title="Microsoft"
href="https://www.bing.com" class="btn btn-success ms-2">Bing</a>
<a data-bs-toggle="mensaje" title="Yahoo Inc"
href="https://www.yahoo.com" class="btn btn-success ms-2">Yahoo</a>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
<script>
var tooltipTriggerList =
[].slice.call(document.querySelectorAll('[data-bs-toggle="mensaje"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl)
{
return new bootstrap.Tooltip(tooltipTriggerEl)
})
</script>
</body>
</html>
Cuando pasamos la flecha del mouse sobre la etiqueta HTML:
<script>
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-b
s-toggle="mensaje"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
</script>
Agregamos en cada elemento HTML la propiedad 'data-bs-toggle' con un
valor que se hace referencia luego en el bloque de Javascript al final, el
mensaje que aparece es el fijado en la propiedad title:
top
bottom
left
right
33 - Componente: Popover
La componente Popover es similar a Tooltips con la diferencia que su
contenido se presenta cuando se hace clic generalmente sobre un ancla.
Para trabajar con esta componente además de importar el archivo CSS
necesitamos importar el archivo Javascript.
Debemos agregar el siguiente código Javascript en la página:
top
bottom
left
right
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<a href="#" data-bs-toggle="popover" title="Historia de Google" data-
bs-trigger="focus"
data-bs-content="Larry Page y Sergey Brin comenzaron Google como un
proyecto universitario en enero de 1996 cuando ambos eran estudiantes de
posgrado en ciencias de la computación en la Universidad de
Stanford.">Google</a>
<a href="#" data-bs-toggle="popover" title="Historia de Yahoo" data-
bs-trigger="focus"
data-bs-content="Yahoo! inicialmente recibió el nombre de 'ulices
b' (La guía de Jerry para la World Wide Web), Su nombre proviene de unos
personajes del libro Los viajes de Gulliver">Yahoo</a>
<a href="#" data-bs-toggle="popover" title="Historia de Bing" data-
bs-trigger="focus"
data-bs-content="Bing (anteriormente Live Search, Windows Live
Search y MSN Search) es un buscador web de Microsoft. Presentado por el
antiguo director ejecutivo de Microsoft, Steve Ballmer, el 28 de mayo de
2009">Bing</a>
</div>
<script src="../js/bootstrap.bundle.min.js"></script>
<script>
var popoverTriggerList =
[].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(function (popoverTriggerEl)
{
return new bootstrap.Popover(popoverTriggerEl)
})
</script>
</body>
</html>
En el navegador tenemos como resultado al presionar un ancla:
data-bs-trigger="focus"
34 - Componente: Offcanvas
La componente Offcanvas permite crear una barra lateral oculta que se hará
visible cuando se dispare un evento. Muy útil en dispositivos móviles donde
tenemos poco espacio en pantalla.
Offcanvas es un componente de la barra lateral que se puede alternar a través
de JavaScript para que aparezca desde el borde izquierdo, derecho, superior
o inferior de la ventana del navegador.
Comparten muchas similitudes con los diálogos que dispone Bootstrap, igual
que los diálogos solo se puede mostrar una componente Offcanvas a la vez.
Veamos un ejemplo para su implementación:
<head>
<title>Prueba de Bootstrap 5</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1,
shrink-to-fit=no">
<link href="../css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<script src="../js/bootstrap.bundle.min.js"></script>
</body>
</html>
Mediante la clase 'offcanvas' creamos este panel oculto, que en este caso
aparece de izquierda a derecha gracias a la clase 'offcanvas-start':
<div class="offcanvas-header">
offcanvas-start
aparece de izquierda a derecha
offcanvas-end
aparece de derecha a izquierda
offcanvas-top
aparece de arriba hacia abajo
offcanvas-bottom
aparece de abajo hacia arriba
35 - Componente: Spinner
La componente Spinner nos permite mostrar el estado de carga de una
página o sección de una página mediante un gráfico animado.
No requiere Javascript para su funcionamiento.
Las clases que intervienen para mostrar un Spinner y su sintaxis es:
<div class="spinner-border text-primary">
<span class="visually-hidden">Loading...</span>
</div>