Curso de Bootstrap 4

Instalación

  1. https://getbootstrap.com/
  2. Get Started
  3. Copiamos el código del Starter template:
    <!doctype html>
    <html lang="en">
      <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
        <!-- Bootstrap CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
    
        <title>Hello, world!</title>
      </head>
      <body>
        <h1>Hello, world!</h1>
    
        <!-- Optional JavaScript -->
        <!-- jQuery first, then Popper.js, then Bootstrap JS -->
        <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
        <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
      </body>
    </html>
    Ver ejemplo

Grid de Bootstrap 4

Sirven para estructurar, a nivel de diseño, la información.

Deben estar dentro de un container. Existen containers de dos tipos:

  • <div class="container" style="background-color: red;">
        Contenedor de ancho fijo
    </div>
    Ver ejemplo
  •   <div class="container-fluid" style="background-color: red;">
        Contenedor ancho fluído
     </div>
    Ver ejemplo

Inmediatamente dentro del container debemos incluir filas, es decir, div's con el class row. Cada fila tiene como máximo (a no ser que lo modifiquemos), 12 posiciones.

En el siguiente ejemplo tenemos una fila con tres columnas, por tanto, cada columna ocupará 4 posiciones

<div class="container" style="background-color: red;">
    <div class="row">
    	<div class="col">1</div>
    	<div class="col">2</div>
    	<div class="col">3</div>
    </div>
 </div>
Ver ejemplo

Si no especificamos el tamaño de las columnas, por defecto su tamaño se repartirá equitativamente entre las columnas.

En el siguiente ejemplo asignamos un tamaño a las columnas:

<div class="row">
	<div class="col-3">1</div>
	<div class="col-9">2</div>
</div>
Ver ejemplo

Si las columnas no caben, Bootstrap la pasará para abajo:

<div class="row">
	<div class="col-3">1</div>
	<div class="col-10">2</div>
</div>
Ver ejemplo

Ejercicio pasar a Bootstrap

Partiendo del siguiente código HTML de una página web, hacer las modificaciones necesarias para tener una página Bootstrap de cuatro columnas:

<img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=250%C3%97250&w=250&h=250" alt="imagen aleatoria">
<h3>Lorem ipsum dolor sit.</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit suscipit cupiditate soluta dolores temporibus odio
    incidunt fuga maiores alias ab, tempora quasi id ratione consequuntur aspernatur numquam minima ex ut.</p>
<img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=250%C3%97250&w=250&h=250" alt="imagen aleatoria">
<h3>Lorem ipsum dolor sit.</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit suscipit cupiditate soluta dolores temporibus odio incidunt fuga maiores alias ab, tempora quasi id ratione consequuntur aspernatur numquam minima ex ut.</p>
<img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=250%C3%97250&w=250&h=250" alt="imagen aleatoria">
<h3>Lorem ipsum dolor sit.</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit suscipit cupiditate soluta dolores temporibus odio incidunt fuga maiores alias ab, tempora quasi id ratione consequuntur aspernatur numquam minima ex ut.</p>
<img src="https://placeholdit.imgix.net/~text?txtsize=33&txt=250%C3%97250&w=250&h=250" alt="imagen aleatoria">
<h3>Lorem ipsum dolor sit.</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Fugit suscipit cupiditate soluta dolores temporibus odio incidunt fuga maiores alias ab, tempora quasi id ratione consequuntur aspernatur numquam minima ex ut.</p>
Ver ejercicio resuelto

Ejercicio rejilla Bootrstap

Realizar una página web con la siguiente estructura utilizando Bootstrap.

ejercicio bootstrap 4 Ver ejemplo

Cambiar el tamaño de las columnas en función del tamaño de la pantalla

<div class="row">
	<div class="col-12 col-md-3">1</div>
	<div class="col-12 col-md-9">2</div>
</div>

Breakpoints de la rejilla de Bootstrap 4:

Nombre Prefix Size
Extra Small .col- (sin interfijo) <576px
Small .col-sm ≥576px
Medium .col-md ≥768px
Large .col-lg ≥992px
Extra Large .col-xl ≥1200px

Ejercicio rejilla bootstrap en función de la pantalla

Tamaño extra small

Bootstrap 4, grid para pantalla pequeña

Tamaño mediano

Bootstrap 4, grid para pantalla mediana

Tamaño grande

La fila de abajo son diez posiciones. Para lograr que cada columna tenga el tamaño correcto lo que haremos es no especificar el tamaño de las columnas inferiores (utilizando el class col-lg) y de estas forma las columnas se repartirán equitativamente su tamaño.

Bootstrap 4, grid para pantalla grande Ver ejemplo

Offset

Ejemplo:<div class="col-md-8 offset-md-2">1</div>

Ejercicio

Tamaño extra small

Bootstrap 4 offset extra small

Tamaño grande

Bootstrap 4 offset medium Ver ejemplo

Reordenación de columnas

Sin interfijo de tamaño:<div class="row">
   
    <div class="col order-3">
      Columna 1
    </div>
    
    <div class="col order-2">
      Columna 2
    </div>
    
    <div class="col order-1">
      Columna 3
    </div>
    
  </div>
Ver ejemplo
Con interfijo de tamaño:<div class="row">
   
    <div class="col order-md-3">
      Columna 1
    </div>
    
    <div class="col order-md-2">
      Columna 2
    </div>
    
    <div class="col order-md-1">
      Columna 3
    </div>
    
  </div>
Ver ejemplo

Display

<span class="d-none d-lg-block">Visible en grande</span>
<span class="d-block d-lg-none">Oculto en grande</span>

<span class="d-none d-sm-block">Oculto en pequeño</span>
<span class="d-block d-sm-none">Visible en pequeño</span>

Posibles valores:

  • none
  • inline
  • inline-block
  • block
  • table
  • table-cell
  • table-row
  • flex
  • inline-flex

Margins y Padings

Podemos usar los siguientes class:

<div class="mt-0 mr-1 mb-2 ml-3 pt-0 pr-1 pb-2 pl-3"></div>
  • mt: margin-top
  • mr: margin-right
  • mb: margin-bottom
  • ml: margin-left
  • pt: padding-top
  • pr: padding-right
  • pb: padding-bottom
  • pl: padding-left

El número indica la magnitud del margen o el padding.

Ver ejemplo

Text Align

<p class="text-xs-left">Left aligned text on all viewport sizes.</p>
<p class="text-xs-center">Center aligned text on all viewport sizes.</p>
<p class="text-xs-right">Right aligned text on all viewport sizes.</p>

<p class="text-sm-left">Left aligned text on viewports sized SM (small) or wider.</p>
<p class="text-md-left">Left aligned text on viewports sized MD (medium) or wider.</p>
<p class="text-lg-left">Left aligned text on viewports sized LG (large) or wider.</p>
<p class="text-xl-left">Left aligned text on viewports sized XL (extra-large) or wider.</p>

Componentes

Aunque vamos a ver los componentes más habituales, puedes consultar en la documentación oficial todos los componentes.

Cheasheet con una colección de snippets de Bootstrap 4

<style>
.overlay{
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
color: white;
}
</style>
</head>
<body>
<div class="container">
<div id="nombreCarousel" class="carousel slide" data-ride="carousel">
<!-- Indicadores inferiores-->
<ol class="carousel-indicators">
<li data-target="#nombreCarousel" data-slide-to="0" class="active"></li>
<li data-target="#nombreCarousel" data-slide-to="1"></li>
<li data-target="#nombreCarousel" data-slide-to="2"></li>
</ol>
<!-- Fin Indicadores inferiores-->
<div class="carousel-inner">
<div class="carousel-item active">
<img class="d-block w-100" src="http://placehold.it/600x300" alt="First slide">
<!-- Caption de un slide -->
<div class="carousel-caption d-none d-md-block">
<h5>Primer caption</h5>
<p>Texto caption</p>
</div>
<!-- Fin caption de un slide -->
</div>
<div class="carousel-item">
<img class="d-block w-100" src="http://placehold.it/600x300" alt="Second slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src="http://placehold.it/600x300" alt="Third slide">
</div>
</div>
<!-- Capa overlay 
Para que el estilo align-items-center centre verticalmente el contenido de la capa overlay
es necesario que la capa container y la capa row tengan un height de 100%-->
<div class="overlay">
<div class="container" style="height: 100%">
<div class="row align-items-center" style="height: 100%">
<div class="col-md-6 offset-md-3 text-md-right text-center">
<h1>Ejemplo Slider</h1>
</div>
</div>
</div>
</div>
<!-- Fin capa overlay-->
<!-- Flechitas de delante atrás-->
<a class="carousel-control-prev" href="#nombreCarousel" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#nombreCarousel" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
<!-- Fin flechitas de adelante atrás -->
</div>
</div>
<script>$('.carousel').carousel({
interval: 1500
})</script>
Ver ejemplo

Ejercicio carousel

Hacer un carousel con las siguientes características:

  • Dos diapositivas
  • Un caption en la segunda diapositiva
  • Un texto fijo que se vea siempre
  • Sin indicadores de progreso
Ver ejemplo

Formularios

form-control

Añadimos el class form-control a los inputs, selects y textareas, para mejorar su estilo.

Ver ejemplo

form-row

Una form-row es como una row, pero más cortita y con menos padding

Ver ejemplo
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav">
<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>
</ul>
</div>
</nav>
Ver ejemplo

Acordeón

<div id="accordion">
<div class="card">
<div class="card-header" id="headingOne">
<h5 class="mb-0">
<button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
Collapsible Group Item #1
</button>
</h5>
</div>
<div id="collapseOne" class="collapse show" aria-labelledby="headingOne" data-parent="#accordion">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingTwo">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseTwo" aria-expanded="false" aria-controls="collapseTwo">
Collapsible Group Item #2
</button>
</h5>
</div>
<div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordion">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
</div>
</div>
</div>
<div class="card">
<div class="card-header" id="headingThree">
<h5 class="mb-0">
<button class="btn btn-link collapsed" data-toggle="collapse" data-target="#collapseThree" aria-expanded="false" aria-controls="collapseThree">
Collapsible Group Item #3
</button>
</h5>
</div>
<div id="collapseThree" class="collapse" aria-labelledby="headingThree" data-parent="#accordion">
<div class="card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
Ver ejemplo

Tabs

<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" data-toggle="tab" href="#home" role="tab">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#profile" role="tab">Profile</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#messages" role="tab">Messages</a>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="tab" href="#settings" role="tab">Settings</a>
</li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div class="tab-pane active" id="home" role="tabpanel">Home</div>
<div class="tab-pane" id="profile" role="tabpanel">Profile</div>
<div class="tab-pane" id="messages" role="tabpanel">Messages</div>
<div class="tab-pane" id="settings" role="tabpanel">Settings</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
Ver ejemplo

Modal

<button type="button" class="btn btn-warning" data-toggle="modal" data-target="#mipopup">
¿Quién soy?</button>
<div id="mipopup" class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Pablo Monteserín</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-sm-9"><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Laborum dignissimos expedita enim commodi repudiandae illo blanditiis similique velit, laboriosam dolore sequi a harum nobis facere vero quis, non possimus. Exercitationem!</p></div>
<div class="col-sm-3"><img src="/curso/assets/css/bs4/landing-img/007.jpg" class="img-fluid" alt=""></div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>

Temas

Cambiando la hoja de estilos de bootstrap podremos cambiar la estética global de la página.

https://bootswatch.com/

Ejercicio landing

Para que una imágen se ajuste automáticamente al 100% de la capa que lo envuelve, en Bootstrap 4 se usa el class: img-fluid

En este ejercicio utilizaremos:

  • Usaremos la plantilla Yeti. Para hacer más oscura la navigation bar usaremos el class bg-primary (en lugar de bg-light) y para que el texto aparezca con letras blancas, el class navbar-dark (en lugar de navbar-light)
  • Un carousel
  • Un formulario
  • Navigation bar
  • Badges
  • List Group
  • Cards
  • Botones
  • Cuadro modal
icono de mandar un mail¡Contacta conmigo!
Pablo Monteserín
contacta conmigoPablo Monteserín

Para dudas técnicas sobre los ejercicios de mis cursos es necesario estar suscrito.