Me 2
Me 2
Me 2
UNIDAD Nº 1
CSS3 Y BOOTSTRAP
www.iplacex.cl
SEMANA 2
Introducción
En la semana anterior, repasamos las nociones básicas de CSS, buenas prácticas para
optimizar nuestro código en documentos HTML, vimos como CSS3 incluye algunas cosas
nuevas, trabajamos con selectores simples y avanzados, también nos adentramos en el
diseño responsivo, sus reglas, condiciones y como este se volvió un estándar en poco
tiempo de la mano del fuerte incremento del uso de dispositivos portátiles como
smartphones y tablets.
Contiene plantillas de diseño basadas en HTML y CSS que incluyen, tipografía, botones,
menús de navegación y otros componentes comunes de interfaces web, así también
cuenta con extensiones opcionales de JavaScript.
Las razones principales por las que Bootstrap se posicionó tan rápido en la industria son:
1) Fácil de aprender.
3) Estilos por defecto para la mayoría de los elementos HTML (Fuentes, Tablas,
Formularios, Botones, imágenes, iconos, etc).
2 www.iplacex.cl
Ideas Fuerza
1. Framework: Conjunto estandarizado de conceptos, prácticas y criterios para dar
solución a una necesidad particular, que sirve para resolver problemas comunes.
3 www.iplacex.cl
Desarrollo
8. Bootstrap
Bootstrap es uno de los frameworks más usados a nivel mundial para construir
páginas responsivas “mobile-first” gracias a los templates que trae incluido.
Bootstrap utiliza ciertos elementos HTML y propiedades CSS que requieren el uso del
doctype de HTML5 para que funcionen correctamente, por lo que todas nuestras
páginas deben incluir la declaración al principio.
<!DOCTYPE html>
<html lang="es">
...
</html>
Además, como vimos la semana pasada, para asegurar que se muestra correctamente
en dispositivos móviles y que permita la utilización del zoom al arrastrar tenemos que
añadir la etiqueta meta viewport dentro de nuestra cabecera <head>
Como tip adicional podemos indicar la propiedad initial-scale del viewport controla el
nivel de zoom cuando la pagina se carga por primera vez. Se pueden agregar otras
propiedades como maximum-scale, minimum-scale , y user-scalable para controlar la
forma en como los usuarios pueden interactuar con el zoom desde sus dispositivos
4 www.iplacex.cl
touch. Si añadimos la etiqueta al meta del viewport user-scalable=no podemos
deshabilitar el zoom para dispositivos móviles, así los usuarios solo podrán hacer scroll.
CSS
Bootstrap incluye una hoja de estilo con una plantilla responsiva por defecto, que nos
permitirá agregar estilos a distintos componentes de nuestro documento HTML, a
continuación, tenemos el código que debemos incluir dentro de nuestro <head>
después de todas las otras hojas de estilo referenciadas en nuestra página web.
<link rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
JS
Varios de los componentes que incluye Bootstrap requieren el uso de JavaScript para
funcionar. Específicamente lo que necesitamos incluir si o si son jQuery y Popper.js y
además el archivo JavaScript de Bootstrap. El código se debe agregar justo antes de
cerrar el tag </body>. JQuery se incluye primero, luego Popper.js y finalmente el plugin
Bootstrap. El siguiente código ejemplificará la inclusión de los 3 scripts (llamándolos del
repositorio online que Bootstrap facilita):
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js
"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"
></script>
5 www.iplacex.cl
10. Sistema de Grilla.
Elemento Contenedor.
Para que nuestro sistema de grilla funcione correctamente, este tiene que ser
implementado dentro de uno de los dos contenedores que ofrece Bootstrap: container o
container-fluid. Es importante tener en cuenta que estos elementos son la raíz de la
grilla y no se pueden anidar uno dentro de otro.
Si queremos que el contenido aparezca centrado y con un ancho fijo, entonces hay que
utilizar la clase .container, de la siguiente forma:
<div class="container">
...
</div>
Por el contrario, si queremos que el contenido de nuestra web ocupe todo el ancho
disponible en pantalla (teniendo en cuenta todos los tamaños de pantalla), podemos
usar la clase .container-fluid:
<div class="container-fluid">
...
</div>
.container
.container-fluid
6 www.iplacex.cl
Funcionamiento del sistema de grillas
▪ Las columnas ( .col ) que contienen el contenido del sitio, deben estar de
manera estricta dentro de una fila ( .row ) y estas a su vez, son el único hijo
posible del contenedor ( .container o .container-fluid).
▪ Cada fila ( .row ) se puede dividir hasta un máximo de 12 columnas ( .col ), pero
somos nosotros quienes definimos el número de columnas en las que queremos
dividir cada fila y su ancho para cada tamaño de pantalla. Por ejemplo, 4
columnas de igual ancho.
▪ Para definir el tamaño de las columnas (. col ) se utilizan clases css que
Bootstrap tiene definidas para cada tamaño, por ejemplo .col-md-xx, donde xx es
el tamaño de la columna que podrá tomar valores entre 01 y 12.
7 www.iplacex.cl
En la siguiente tabla se muestra un resumen del sistema de grillas de Bootstrap, hay
que recordar que éste framework está pensado en los dispositivos móviles primero o
Mobile First. Por lo tanto, los tamaños y dimensiones están pensados para los
dispositivos móviles y para tamaños más grandes lo que se hace es adaptar o escalar
estos tamaños.
8 www.iplacex.cl
<div class="row">
<div class="col-md-8">.col-md-8</div>
<div class="col-md-4">.col-md-4</div>
</div>
<div class="row">
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4">.col-md-4</div>
</div>
<div class="row">
<div class="col-md-6">.col-md-6</div>
<div class="col-md-6">.col-md-6</div>
</div>
Figura 2.
Visualización
estructural de
filas y
columnas con
ancho fijo en
dispositivos
pequeños.
(Fuente:
https://getboot
9 www.iplacex.cl
strap.com/docs/4.1/
<div class="container">
<div class="row">
<div class="col">1 of 2</div>
<div class="col">2 of 2</div>
</div>
<div class="row">
<div class="col">1 of 3</div>
<div class="col">2 of 3</div>
<div class="col">3 of 3</div>
</div>
</div>
A esta clase podemos añadir el sufijo para establecer el tamaño de pantalla (.col, .col-
sm, .col-md, .col-lg, .col-xl), de esta forma podemos usar los sufijos cuando se necesite
que una columna tenga un ancho automático desde un tamaño de pantalla en adelante.
10 www.iplacex.cl
<div class="row">
<div class="col-sm">col-sm</div>
<div class="col-sm">col-sm</div>
<div class="col-sm">col-sm</div>
</div>
En el código anterior estamos programando que desde el tamaño “sm” en adelante las
tres columnas tendrán un ancho automático y solo en pantallas extrapequeñas
ocuparán todo el ancho.
Otra de las novedades que incluyó Bootstrap 4 son las columnas de ancho variable, las
que ocuparán el ancho justo que se necesite según el contenido de la columna,
respetando el tamaño de las columnas aledañas (si es que hay).
Para utilizarlas se dispone de la clase “.col-*-auto”, donde * puede ser cualquiera de los
sufijos de tamaños de pantalla, igual se puede obviar para indicar todos los tamaños de
pantalla “.col-auto”, si mezclamos lo aprendido hasta el momento podríamos generar
algo así:
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-lg-2">1 of 3</div>
<div class="col-md-auto">Variable width content</div>
<div class="col col-lg-2">3 of 3</div>
</div>
<div class="row">
<div class="col">1 of 3</div>
<div class="col-md-auto">Variable width content</div>
<div class="col col-lg-2">3 of 3</div>
</div>
</div>
11 www.iplacex.cl
Importante: utilizamos la clase “.justify-content-md-center” Para alinear el contenido
dentro de una fila, estas etiquetas las veremos en la sección de alineación de grillas.
Bootstrap ofrece la clase “.w-100” con la cual podemos forzar el cambio de fila cuando
nosotros queramos, sin necesidad de utilizar las 12 unidades de la fila.
<div class="row">
<div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
<div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
Con lo que obtendríamos dos filas con dos columnas cada una:
Anidamiento de columnas
Una característica muy potente del sistema de grillas es que nos ofrece la libertad de
anidar columnas dentro de otras columnas. Para esto solamente debemos agregar una
fila dentro de una columna, posteriormente, dentro de esta nueva fila podemos
subdividirla también usando un máximo de 12 columnas, que dividen su espacio
disponible. A continuación, crearemos una columna con tamaño de 9 y dentro una fila
que posee dos columnas, de tamaño 8 y 4:
<div class="row">
12 www.iplacex.cl
<div class="col-sm-9">
Level 1: .col-sm-9
<div class="row">
<div class="col-8 col-sm-6">Level 2: .col-8 .col-sm-6</div>
<div class="col-4 col-sm-6">Level 2: .col-4 .col-sm-6</div>
</div>
</div>
</div>
Márgenes
Disponemos de clases para crear márgenes de espacio variable tanto al lado izquierdo
con “.ml-auto” y también para el lado derecho utilizando “.mr-auto”.
<div class="row">
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4 ml-auto">.col-md-4 .ml-auto</div>
</div>
<div class="row">
<div class="col-md-3 ml-md-auto">.col-md-3 .ml-md-auto</div>
<div class="col-md-3 ml-md-auto">.col-md-3 .ml-md-auto</div>
</div>
<div class="row">
<div class="col-auto mr-auto">.col-auto .mr-auto</div>
<div class="col-auto">.col-auto</div>
</div>
Y se vería así:
13 www.iplacex.cl
Figura 7. Márgenes.(Fuente: https://getbootstrap.com/docs/4.1/)
Alineación
Dentro de las novedades que introdujo la última versión de Bootstrap, han aparecido un
set de clases que nos permite alinear las columnas de manera horizontal o vertical.
Alineación vertical
Para realizar una alineación de los elementos a nivel de fila, usaremos la etiqueta
“.align-items-*”, donde “*” podrá ser “start”, “center” o “end”. A continuación,
ejemplificaremos los 3 parámetros:
<div class="container">
<div class="row align-items-start">
<div class="col">One of three columns</div>
<div class="col">One of three columns</div>
<div class="col">One of three columns</div>
</div>
<div class="row align-items-center">
<div class="col">One of three columns</div>
<div class="col">One of three columns</div>
<div class="col">One of three columns</div>
</div>
<div class="row align-items-end">
<div class="col">One of three columns</div>
<div class="col">One of three columns</div>
<div class="col">One of three columns</div>
</div>
</div>
14 www.iplacex.cl
Generando la siguiente figura:
Por otro lado, si queremos indicar por separado cada una de las alineaciones a nivel de
columna, entonces tendremos que usar la clase CSS “.aling-self-*”, donde al igual que
en el caso anterior “*” podrá ser “start”, “center” o “end”. Revisemos el siguiente
ejemplo que muestra dicha situación:
<div class="container">
<div class="row">
<div class="col align-self-start">One of three columns</div>
<div class="col align-self-center">One of three columns</div>
<div class="col align-self-end">One of three columns</div>
</div>
</div>
Y obtenemos lo siguiente:
Alineación Horizontal
15 www.iplacex.cl
ambos lados de la columna) y “between” (añade espacio entre las columnas). A
continuación, veremos un ejemplo de los tipos de alineación descritos:
<div class="container">
<div class="row justify-content-start">
<div class="col-4">One of two columns</div>
<div class="col-4">One of two columns</div>
</div>
<div class="row justify-content-center">
<div class="col-4">One of two columns</div>
<div class="col-4">One of two columns</div>
</div>
<div class="row justify-content-end">
<div class="col-4">One of two columns</div>
<div class="col-4">One of two columns</div>
</div>
<div class="row justify-content-around">
<div class="col-4">One of two columns</div>
<div class="col-4">One of two columns</div>
</div>
<div class="row justify-content-between">
<div class="col-4">One of two columns</div>
<div class="col-4">One of two columns</div>
</div>
</div>
16 www.iplacex.cl
11. Componentes HTML
Botones
Mediante la clase “.btn” podemos aplicar estilo a los elementos HTML tipo “button”.
Esta clase se puede combinar con otras clases predefinidas como .btn-primary , .btn-
secondary , .btn-success , .btn-danger , .btn-warning , .btn-info , .btn-light , .btn-dark O
.btn-link. Con esto creamos distintos botones con diferentes estados o acciones en
nuestros formularios:
17 www.iplacex.cl
Figura 11. Distintos estilos de botones.(Fuente: https://getbootstrap.com/docs/4.1/)
Estas clases no son exclusivas para etiquetas button, también pueden ser utilizadas de
la misma forma con <a> y <input>:
Por último, podemos variar los tamaños de los botones añadiendo las clases .btn-lg o
.btn-sm o .btn-block, para generar botones mas grandes, pequeños o que ocupe todo el
ancho, revisemos el siguiente código:
18 www.iplacex.cl
Desplegables
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button"
id="dropdownMenuButt
on" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown button
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
Sobre el botón principal podremos aplicar todas las clases revisadas anteriormente,
modificar su apariencia, colores y tamaño.
19 www.iplacex.cl
Formularios
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1"
aria-describedby="emailHelp" placeholder="Enter email">
</div>
</form>
Formulario inline
Mediante la clase .form-inline sobre la etiqueta <form> podemos crear formularios que
se dispondrán en una sola línea:
<form class="form-inline">
<div class="form-group mx-sm-3">
<label for="inputUser" class="sr-only">User</label>
<input type="password" class="form-control" id="inputUser"
placeholder="User">
</div>
<div class="form-group mx-sm-3">
<label for="inputPass" class="sr-only">Password</label>
<input type="password" class="form-control" id="inputPass"
placeholder="Pass">
</div>
<button type="submit" class="btn btn-primary">Confirm</button>
</form>
20 www.iplacex.cl
Obteniendo el siguiente resultado:
Formulario horizontal.
Gracias al uso del sistema de grillas de Bootstrap podemos crear formularios con una
disposición en horizontal. A continuación, revisaremos un ejemplo:
<form>
<div class="form-group row">
<label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3"
placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="inputPassword3" class="col-sm-2 col-form-
label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3"
placeholder="Password">
</div>
</div>
<div class="form-group row">
21 www.iplacex.cl
<div class="col-sm-2">Checkbox</div>
<div class="col-sm-10">
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" type="checkbox"> Check me out
</label>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">Sign in</button>
</div>
</div>
</form>
Barra de navegación.
Para crear un elemento tan común y necesario en nuestra pagina web como el menú
de navegación Bootstrap nos entrega herramientas para realizar de una manera simple
nuestra barra de navegación utilizando la clase “.navbar”. Esta barra se adapta al
tamaño de la pantalla y su comportamiento por defecto es mostrar los elementos
colapsados en un botón en pantallas pequeñas y de forma normal en pantallas más
grandes.
22 www.iplacex.cl
▪ Las opciones del menú, las cuales irán dentro de una lista tipo <lu> con la clase
“.navbar-nav”. Además, esta lista la tendremos que meter dentro de una caja div
con las clases .collapse .navbar-collapse, que definirá la zona que se ocultará
para pantallas pequeñas.
23 www.iplacex.cl
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-
only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown"
role="button"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search"
aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit" >
Search </button>
</form>
</div>
</nav>
24 www.iplacex.cl
Pregunta de Reflexión
• ¿Cconsideras una buena alternativa utilizar Bootstrap para el diseño de tus
páginas web?
• ¿Has visto la herramienta Bootstrap presente en páginas webs que sueles
visitar?
• Si tuvieses que programar una página web, ¿Utilizarías Bootstrap? ¿Por qué?
25 www.iplacex.cl
Conclusión
Durante esta semana conocimos y vimos como funcionaba Bootstrap, que es uno de
los frameworks de Front End más utilizados en la industria, comprendimos que tan útil
puede llegar a ser implementar una solución como esta en nuestros proyectos web, ya
que nos asegura una correcta visualización de nuestro contenido y porque además
incluye muchos de los elementos que utilizaremos ya predefinidos, con estilos y
comportamientos que se adaptan a cualquier dispositivo.
Además, vimos en profundidad el sistema de grillas con el cual trabaja Bootstrap, que
es el pilar fundamental del diseño responsivo y que está dividido en 12 columnas
virtuales que se pueden ir anidando, acoplando y editando a medida que sea requerido
por nosotros, de esta manera, lograr un control total de nuestra web utilizando clases
predefinidas que permiten separar el comportamiento de los elementos html
dependiendo del tamaño del viewport.
26 www.iplacex.cl
Bibliografía
Manual programación web en el entorno cliente | Ribes Alba, Purificación | E-LIBRO
Desarrollo web en entorno cliente | Vara Mesa, Juan Manuel; López Sanz, Marcos | E-LIBRO
https://getbootstrap.com/docs/4.1/
https://www.w3schools.com
27 www.iplacex.cl
28 www.iplacex.cl