====== Bootstrap ======
Framework CSS.
* [[https://getbootstrap.com/|Web oficial]]
===== Instalación =====
Descarga: https://getbootstrap.com/docs/4.5/getting-started/download/
* **Compiled CSS and JS**: Bootstrap listo para usar
* **Source files**: ficheros para el desarrollo de Boostrap (requiere usar compiladores SASS)
Lo normal es descargar la versión compilada. Contiene las carpetas ''css'' y ''js''.
Boostrap también necesita jQuery y Popper:
* [[https://jquery.com/|jQuery]]
* [[https://popper.js.org/|Popper.js]]
Plantilla con los archivos de Bootstrap alojados en un CDN:
Hello, world!
Hello, world!
Si no se incluye la etiqueta ''meta'' con el atribute ''name'' con valor **viewport**, la web no se adaptará correctamente en dispositivos móviles.
===== Conceptos =====
==== Grid ====
Bootstrap se base en un concepto de grid (rejilla) de 12 columnas de forma que podemos definir el tamaño de cada caja, por ejemplo, una caja ocupa 12 columnas (el total del ancho) o 6 (la mitad)
Las filas (rows) son grupos horizontales de columnas (columnms).
Las columnas deben ir directamente dentro de las filas:
Título
Contenido
Para poder usar filas y columnas, deben ir dentro de un contenedor que puede ser con un máximo establecido (''container'') o fluido (''container-fluid''):
CONTENIDO
==== Filas ====
Para que eliminar los padding que pone bootstrap a las columnas:
==== Columnas ====
Los puntos de ruptura según las columnas:
* ''col'': menos de 544px (smartphones)
* ''col-sm'': Entre 544px y 768px
* ''col-md'': entre 768 y 992px (tablets)
* ''col-lg'': entre 992px y 1200px (ordenadores)
* ''col-xl'': más de 1200px (ordenadores)
Si uso ''col-12'' estamos indicando que para tamaños de pantalla menores a 544px, lo que contenga esa elemento, ocupará 12 columnas en el grid de Bootstrap. Podemos combinar y hacer cosas como:
CONTENIDO
Cuando estamos visualizando en pantallas superiores a 768, el contenido ocupará 6 columnas.
Con ''col-auto'' indicamos que el contenido de esa columna coja el espacio necesario según el contenido.
La clase ''col'' indica que la columna cogerá todo el ancho que esté disponible.
=== Separadores ===
Si queremos romper ciertas columnas para que continúen debajo (sin meter filas), podemos usar:
CONTENIDO
CONTENIDO
El ''div'' con la clase ''w-100'' añade un div con una anchura del 100 %
=== Alineación vertical ===
Utilizando Flexbox.
La clase ''offset-4'' añade un espacio de 4 columnas. No se pueden añadir espaciados después de las columnas,
**solo antes**.
Podemos usar las clases ''offset'' para centrar horizontalmente:
Como el elemento ya ocupa 4 columnas (''col-4''), nos quedan libres 8. Si queremos centrar, sería la mitad de 8, es decir, necesitaríamos un ''offset-4''.
Desde que Bootstrap usa Flexbox, es más recomendable usar la clase ''justify-content-center'' en las filas que utilizar ''offset''.
Las clases ''offset'' también admiten el selector de tamaño:
* ''offset-sm-*''
* ''offset-md-*''
* ''offset-lg-*''
* ''offset-xl-*''
=== Reordenamiento ===
Columna 1
Columna 2
Columna 3
Columna 4
Si queremos que una columna ocupe una posición que no sea la predeterminada, utilizaremos las clases ''order-*'' (del 1 al 12):
Columna 1
Columna 2
Columna 3
Columna 4
De esta manera, el orden será Columna 2, Columna 1, Columna 4 y Columna 3.
También podemos usar estas clases para que el orden solo se cambie en ciertos tamaños de pantalla:
Columna 1
Columna 2
Columna 3
Columna 4
En ese ejemplo, a partir de tamaños medianos, volverá a recuperar el orden original.
=== Columnas anidadas ===
* ''d-block'': mostrar en tamaños extra pequeños.
* ''d-sm-none'': no muestra un elemento en tamaños pequeños.
==== Tipografía ====
* ''text-muted'': texto el color gris.
* ''h1'' - ''h6'': simula tamaños de encabezados.
* ''display-1'' - ''display-4'': encabezados de mayor tamaño y trazos más finos.
* ''lead'': para resaltar algún texto (aumenta un poco el tamaño y cambia la tipografía)
* ''text-justify'': justifica el texto
* ''text-center'': centra el texto.
* ''text-right'': alinear texto a la derecha.
* ''text-left'': alinear texto a la izquierda.
* ''text-lowercase'': pasa todo a minúsculas
* ''text-uppercase'': pasa a mayúsculas
* ''text-capitalize'': la primera letra de cada palabra en mayúscula.
* ''font-weight-bold'': negrita.
* ''font-weight-italic'': cursiva.
* ''font-weight-normal'': normal.
* ''blockquote'': citas.
* ''blockquote-footer''
Las clases de alineación también permiten los tamaños de pantalla:
Alineado a la derecha en dispositivo pequeños en adelante
Este texto es más importante que los demás
Encabezado llamativo
Encabezado de nivel 2 con aspecto de h1
Una cita de alquien famoso
Bootstrap también tiene estilos para las etiquetas:
* ''mark''
* ''del''
* ''ins''
* ''s'': tachar texto.
* ''u'': subrayar texto.
* ''strong'': resalta con negrita.
* ''em'': realiza una cursiva/itálica.
* ''small''
* ''code''
* ''kbd''
==== Imágenes ====
Clases útiles para usar en las etiquetas ''img''.
* ''img-fluid'': la imagen se adapta al elemento que la contiene
* ''float-left'':
* ''float-right'':
* ''rounded'': esquinas redondeadas
* ''img-thumbnail'': esquinas redondeadas y borde con relleno.
Lorem ipsum
==== Tablas ====
Estilos para el elemento ''table'':
* ''table-dark'': invierte colores (fondo negro y texto blanco)
* ''table-striped'': alterna color de fondo de filas
* ''table-bordered'': añade bordes
* ''table-hover'': se muestra en otro color de fondo la fila que toca el puntero del ratón.
* ''table-sm'': reduce los rellenos de las celdas para hacer la tabla más pequeña.
* ''table-responsive-*'': indicamos en qué tamaño de pantalla no queremos que la tabla ocupe el 100 % (sm, md, lg y xl).
Estilos para los elementos ''tr'' y ''table'':
* ''table-success'': color de fondo verde
* ''table-danger'': color de fondo rojo
* ''table-info'':
* ''table-warning'':
* ''table-active''.
También podemos utilizar las clases generales para fondos ''bg-primary'', ''bg-secondary'', etc.
==== Media object ====
Útil para construir componentes repetitivos como comentarios de un blog, tweets, etc
Encabezado
Aquí va un texto
Comentario
Aquí va un texto
==== Alertas ====
Clases para hacer cajas que resaltan:
* ''alert-info''
* ''alert-danger''
* ''alert-success''
* ''alert-primary''
* ''alert-secondary''
* ''alert-light''
* ''alert-dark''
* ''alert-link'': para que los enlaces que están dentro de un elemento ''alert'' se muestren con un formato adecuado.
Bootstrap nos obliga a usar los atributos ''data-dismiss'' y ''aria-label''
Para poder cerrar las alertas, es necesario que esté incluido jQuery.
==== Insignias (badges) ====
Encabezado 1 Etiqueta
Para redondearlas, añadimos la clase ''badge-pill''
Clases de badges:
* ''badge-primary''
* ''badge-secondary''
* ''badge-success''
* ''badge-danger''
* ''badge-warning''
* ''badge-info''
* ''badge-light''
==== Botones ====
...
Posibles clases:
* ''btn-primary''
* ''btn-secondary''
* ''btn-success''
* ''btn-danger''
* ''btn-info''
* ''btn-warning''
* ''btn-link''
* ''btn-dark''
* ''btn-light''
Si queremos que los botones no tengan color de fondo, pero sí cuando pasamos el ratón por encima:
* ''btn-outline-primary''
* ''btn-outline-secondary''
* ''btn-outline-success''
* ''btn-outline-danger''
* ''btn-outline-info''
* ''btn-outline-warning''
* ''btn-outline-link''
Para cambiar el tamaño de los botones:
* ''btn-lg''
* ''btn-sm''
...
Si queremos que un botón ocupe todo el ancho, es decir, que un butón se comporte como un elemento de bloque:
...
Para deshabilitar botones:
...
Bootstrap apaga el color de los botones y añade un icono de "prohibido" al pasar el ratón sobre él.
Si queremos que un **checkbox** tenga la apariencia de un botón:
...
Para hacer lo mismo pero con **radio buttons**:
...
Si queremos agrupar cartas tenemos que encerrarlas en un contenedor con la clase ''card-group'':
Si utilizamos la clase ''card-footer'', lo que añadamos ahí siempre va a estar a la misma altura en todas las tarjetas, independientemente de lo que ocupe lo que esté en ''card-body''
Para el color de fondo de las tarjetas:
* ''bg-primary''
* ''bg-secondary''
* etc
==== Collapse ====
Mostrar u ocultar elementos al pulsar sobre un botón/enlace.
Es necesario tener incluidos en nuestro proyecto jQuery, Popper.js y el JavaScript de Bootstrap
El enlace está asociado al bloque donde queremos usar la característica **collapse**. La clase ''collapse'' nos oculta el bloque por defecto.
El elemento que queremos mostrar y ocultar, debe estar identificado con el atributo ''id'' para relacionarlo con un enlace o botón.
==== Acordeón ====
Similar a collapse.
Contenido
Contenido
==== Dropdown ====
Crea botones con un menú desplegable al pulsar sobre él.
Es necesario tener incluidos en nuestro proyecto jQuery, Popper.js y el JavaScript de Bootstrap
...
La clase ''form-control'' hace que el elemento ocupe el 100 % del ancho disponible, además de algún otro estilo.
Para los formularios en línea, es decir, en **formato horizontal**:
...
Lo importante es la clase ''form-inline'' en la etiqeuta ''form''
Utilizando **grid** en los formularios:
...
Para añadir algún comentario sobre los inputs, podemos usar las clases ''form-text'' o ''text-muted'':
...
==== Ventanas modales ====
Necesario haber agregado jQuery
...
Título de la ventana
Hola, mundo
Texto
Si queremos una ventana modal más graden, a la clase ''modal-dialog'' le añadimos la clase ''modal-lg''. Si lo queremos más pequeño, entonces ''modal-sm''.
Si queremos trabajar con grid dentro de las ventanas modales, añadiríamos un ''div'' con la clase ''container-fluid'' dentro del ''modal-body''. Luego será cuestión de añadir filas y columnas.
==== Navs ====
Para crear paneles de navegación
Si partimos de:
Podemos hacer lo mismo, pero utilizando la etiqueta ''nav'' y enlaces en lugar de elementos de una lista:
...
Para un **menú vertical**:
...
==== Tabs ====
Similar a **navs**:
...
También se podría usar la clase ''nav-pills'' en lugar de ''nav-tabs''.
Si queremos que el menú ocupe el 100 % del ancho del menú de navegación, añadimos la clase ''nav-fill'':
...
==== Navbar ====
Creación de menús más completos que con los **Nav**.
Necesario incluir jQuery, PopperJS y el JavaScript de Bootstrap
Para añadir un desplegable en alguno de los elementos del Navbar:
...
Para fijar el Navbar cuando nos desplazamos verticalmente, podemos usar las clases ''fixed-top'' y ''fixed-bottom'':
...
Si fijamos el navbar, se recomienda establecer un ''padding-top: 56px'' en la etiqueta ''body'' y así no se posicione por encima del contenido antes de desplazarnos verticalmente.
Modificar colores de navbar:
* ''navbar-light'' y luego combinar con ''bg-*''
* ''navbar-dark'' y luego combinar con ''bg-%%**%%''
...
==== Barras de progreso ====
10%
10%
10%
Por defecto, las barras de progreso tienen color azul. Para otros colores, a la clase ''progress-bar'' hay que añadirle:
* ''bg-success''
* ''bg-secondary''
* ''bg-info''
* ''bg-warning''
* ''bg-danger''
* ''bg-inverse''
* ''bg-light''
==== Tooltips ====
Para mostrar mensajes cuando se pasa el ratón sobre cierto elemento.
Necesario incluir jQuery, PopperJS y el JavaScript de Bootstrap
==== Bordes ====
Eliminar bordes:
* ''border-0''
* ''border-top-0''
* ''border-left-0''
Colorear bordes:
* ''border-primary''
* ''border-secondary''
* ''border-success''
* ...
Redondear bordes:
* ''rounded''
* ''rounded-top''
* ''rounded-left''
* ''rounded-circle''
* ...
==== Colores ====
Para el texto:
* ''text-primary''
* ''text-secondary''
* ''text-success''
* ''text-danger''
* ...
Para el fondo:
* ''bg-primary''
* ''bg-secondary''
* ''bg-success''
* ...
==== Posicionamiento ====
Para fijar un elemento en la parte superior:
Para fijarlo en la parte de abajo se usa la clase ''fixed-bottom''.
Cuando se fija un elemento, deja de ocupar un espacio y los elementos siguientes no lo tienen en cuenta por lo que empezarán a colocarse desde arriba del todo y quedarán por debajo del elemento fijado. Para solucionarlo, habría que añadir un ''padding-top'' a ''body'' con las altura del elemento posicionado.
==== Tamaños ====
* ''w-25'': anchura del 25 %
* ''w-50'': anchura del 50 %
* ''h-25'': altura del 25 %
* ...
===== Ejemplos =====
...
Cabecera
Lorem ipsum
Lorem ipsum
Lorem ipsum
===== Flexbox =====
Si no queremos trabajar con la grid de Bootstrap y queremos hacerlo con Flexbox:
''d-flex'' es lo mismo que haber escrito la propiedad ''display: flex''.
CONTENIDO
Si no queremos que la caja ocupe el 100 %, podemos utilizar la clase ''d-inline-flex'':
CONTENIDO
==== Dirección ====
En cuanto a la dirección de los elementos que contenga:
CONTENIDO
''flex-row'' es el valor por defecto.
Para cambiar la dirección a columnas:
Caja 1
Caja 2
Caja 3
Podemos definir la dirección según el tamaño del dispositivo:
* ''flex-sm-row''
* ''flex-sm-column''
* ''flex-md-row''
* ''flex-md-column''
==== Alineación de contenido ====
Para poder alinear los elementos hijo del contenedor Flexbox:
Caja 1
Caja 2
Caja 3
Los posibles valores:
* ''justify-content-start''
* ''justify-content-end''
* ''justify-content-between''
* ''justify-content-around''
Podemos definir la alineación según el tamaño del dispositivo:
* ''justify-content-sm-start''
* ''justify-content-sm-end''
* ''justify-content-sm-center''
* ''justify-content-md-start''
* ''justify-content-md-end''
* ''justify-content-md-center''
Para trabajar con los hijos (items):
==== Items ====
Si queremos centrar verticalmente los elementos hijo:
Caja 1
Caja 2
Caja 3
Si los queremos poner al final del contenedor padre:
Caja 1
Caja 2
Caja 3
Si queremos que las cajas ocupen todo el alto del contenedor padre:
Caja 1
Caja 2
Caja 3
Si queremos que unos elementos estén alineados de una manera y uno de otra podemos usar los **auto márgenes**:
Caja 1
Caja 2
Caja 3
Las dos primeras cajas se desplazarán al principio y la última a la derecha del todo
Para el **orden** de los items:
Caja 1
Caja 2
Caja 3
La caja 1 se pondrá en última posición, la 2 en primera y la 3 en el medio.
Podemos definir el orden según el tamaño del dispositivo:
* ''order-sm-1''
* ''order-md-2''
* ''order-lg-3''
===== Recursos =====
* https://startbootstrap.com/snippets/sticky-footer-flexbox
* [[https://getbootstrap.com/docs/3.3/javascript/#modals|Modals in Bootstrap 3.3]]
* [[https://stackoverflow.com/questions/10626885/passing-data-to-a-bootstrap-modal|Passing data to a bootstrap modal]]