Guía de Ejercicios 3 - Alineando Contenido Con Flexbox
Guía de Ejercicios 3 - Alineando Contenido Con Flexbox
Guía de Ejercicios 3 - Alineando Contenido Con Flexbox
Flexbox
¡Hola! Te damos la bienvenida a esta nueva guía de ejercicios.
Esta guía te ayudará a profundizar los conocimientos vistos en la clase y te entregará las
herramientas necesarias para resolver el desafío, si bien no todos los aprendizajes
entregados en esta guía son necesarios para resolver el desafío, los contenidos cubiertos
son muy útiles en el día a día trabajando como desarrollador web.
En esta guía hablaremos del modelo de caja y revisaremos las técnicas vistas en clases
para poner elementos uno al lado del otro. Para lograrlo, repasaremos algunos conceptos
básicos como el de propiedad display y el valor flexbox.
Finalmente, profundizaremos en HTML semántico, el cual nos permite hacer código más
entendible para los navegadores, así como también para otros desarrolladores del mismo
sitio.
Para poder desarrollar esta guía con más facilidad, deberás tener en cuenta los siguientes
aspectos:
● Conocer el concepto de etiqueta padre/hija e identificar visualmente un elemento a
partir de esta referencia.
● Agregar una hoja de estilo a un html.
● Utilizar selectores de etiqueta y de clase.
● Utilizar selectores para seleccionar elementos descendientes de un elemento.
● Cambiar las propiedades de margin, border, padding, width y height de un elemento.
● Modificar la fuente, tamaño y alineación de un texto.
● Utilizar divs para dividir la página en secciones (o subsecciones).
● Agregar imágenes de fondo y ajustarlas utilizando CSS.
● Si tienes dudas puedes volver a revisar la guía de la unidad 2 - CSS.
_ 1
www.desafiolatam.com
Tabla de contenidos
Repaso Modelo de cajas 3
Propiedad Display (inline, block, inline-block) 3
Elementos block 4
Elementos inline 4
Inline-block 4
Construyendo un menú con la propiedad display 5
Actividad 1 8
El problema de los inline-block 8
Actividad 2 8
Flexbox 9
Alineando el contenido 10
Actividad 3: Alineando contenido con Flex 11
Actividad 4: Creando una galería de imágenes (parte 1) 11
Actividad 5: Creando una galería de imágenes (parte 2) 12
Actividad 6: Creando un menú con flex 13
HTML Semántico 13
Principales etiquetas semánticas 14
Ventajas de las etiquetas semánticas 14
Estructura de un sitio con HTML semántico 15
Determinando que tipo de etiqueta semántica utilizar 15
Resumen de HTML Semántico 16
¡Comencemos!
_ 2
www.desafiolatam.com
Repaso Modelo de cajas
El modelo de cajas es uno de los conceptos más importantes detrás de CSS, y responde a la
pregunta de cuánto mide realmente cada elemento.
Los elementos básicos del modelo de caja los cubrimos en la unidad anterior, pero en esta
ocasión hablaremos de aquellas propiedades que nos permiten poner una caja al lado de
otra.
_ 3
www.desafiolatam.com
Elementos block
Un elemento de bloque siempre comienza en una nueva línea y ocupa todo el ancho
disponible (se extiende desde izquierda hacia la derecha todo lo que pueda). Por lo tanto, si
la propiedad tiene asignada el valor block, sin cambiar ninguna otra propiedad, no
podremos poner un elemento al lado de otro.
Elementos inline
Por su parte, los elementos inline no comienzan en una nueva línea y su ancho ocupa el
mínimo espacio posible (solo lo necesario según su contenido).
Inline-block
Inline-block se comporta como inline, donde puedes poner un elemento al lado de otro, pero
a la vez se comporta como block, dado que puedes establecer un ancho y alto.
La mayoría de estas actividades tienen la misma estructura: un contenedor padre, donde hay
varios elementos con la propiedad display: inline-block.
_ 4
www.desafiolatam.com
Construyendo un menú con la propiedad display
<menu>
<ul>
<li>
<a href=""> 1 </a>
</li>
<li>
<a href=""> 2 </a>
</li>
<li>
<a href=""> 3 </a>
</li>
</ul>
</menu>
Aquí los elementos hermanos son los list items (li), donde los links son hijos de estos, por lo
que aplicaremos display:inline-block. Esta acción la podemos hacer dentro de la etiqueta
style en el head o una hoja de estilos nueva.
li {
display: inline-block;
}
Cuidado
No debemos cambiar las propiedades de todas las etiquetas <li>. Es mejor cambiar solo
las que estén dentro del menú para evitar futuros problemas con CSS.
menu li {
display: inline-block;
}
El selector anterior se lee como todos los li que estén dentro de <menu>, es poco probable
que vayamos a tener otro menú con li, pero si así fuera, los podríamos distinguir agregando
una clase y haciendo referencia a la clase en lugar de la etiqueta.
El resto del menú depende de lo que queramos lograr, es frecuente cambiar el color de
fondo, asignarle un alto a la caja y un line-height para centrar verticalmente el elemento.
_ 5
www.desafiolatam.com
Todas estas propiedades las podemos agregar en el <ul> o en <menu>. Las agregaremos
sobre el menú.
menu {
background-color: black;
color: white;
line-height: 50px;
}
menu li{
display: inline-block;
margin-right: 50px;
}
menu a {
color: white;
text-decoration: none;
}
Finalmente, eliminamos los margin y padding por defecto de los elementos para que el
menú quede en la parte superior del sitio.
body, menu {
padding: 0px;
margin: 0px;
}
menu ul{
margin: 0px;
}
menu a:hover{
_ 6
www.desafiolatam.com
color: goldenrod;
}
Después de agregar lo anterior al CSS, abre la página en el navegador y pasa el mouse por
encima de alguno de los links.
::before,
Se utiliza para seleccionar y aplicar estilos a partes
Pseudo-elemento ::after,
específicas de un elemento.
::first-line
HTML:
CSS:
a::first-letter {
font-size: 1.5em;
font-weight: bold;
color: red;
}
En este ejemplo, se aplican los estilos especificados al primer carácter del enlace. En
particular, se establece el tamaño de fuente en 1.5 em, el peso de la fuente en negrita y el
color del texto en rojo. Es importante tener en cuenta que el pseudoelemento::first-letter solo
se puede utilizar con elementos que contienen texto, como <p>, <h1>, <a>, entre otros.
_ 7
www.desafiolatam.com
Actividad 1
Intenta replicar el ejercicio anterior de memoria, para ello, utiliza el autocompletado de
vscode para apoyarte y Google u otro navegador para buscar las propiedades y los valores a
agregar.
Cuando la suma de los anchos de los elementos mide el 100% es posible que el elemento
que esté más a la derecha quede debajo. Esto se debe a que los espacios entre las etiquetas
afectan el tamaño, lo que se puede resolver haciendo que la suma de un poco menor que
100%, por ejemplo 99.5% o removiendo el espacio en blanco.
Actividad 2
<p> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Cum deleniti explicabo non id
voluptate, voluptatem animi enim soluta dolorum illo aliquam labore sed rerum odio, iusto,
minus delectus nemo! Perspiciatis! </p>
<p> Lorem ipsum dolor sit, amet consectetur adipisicing elit. Cum deleniti explicabo non id
voluptate, voluptatem animi enim soluta dolorum illo aliquam labore sed rerum odio, iusto,
minus delectus nemo! Perspiciatis! </p>
p{
display: inline-block;
width: 50%;
}
_ 8
www.desafiolatam.com
Flexbox
Flexbox (flexible layout) es un sistema que proporciona un modelo de cajas flexible para el
posicionamiento de elementos en una página web. En palabras simples nos permite poner
de forma sencilla una caja al lado de otra caja.
<div style="display:flex">
<p> Item 1 </p>
<p> Item 2 </p>
<p> Item 3 </p>
</div>
Imagen 3. Código.
Fuente: Desafío Latam.
Un detalle importante que podemos observar en el código html, es que la propiedad display
con el valor flexbox se aplica al contenedor padre.
_ 9
www.desafiolatam.com
Alineando el contenido
Imagen 5. Código.
Fuente: Desafío Latam.
Justify-content tiene varios valores posibles, la siguiente ilustración muestra las diferencias.
_ 10
www.desafiolatam.com
Imagen 7. Propiedad Justify-content.
Fuente: Desafío Latam.
<div style="display:flex">
_ 11
www.desafiolatam.com
<!-- Primer elemento de la galería -->
<div>
<img>
<p>
</div>
<!-- Segundo elemento de la galería -->
<div>
<img>
<p>
</div>
<!-- Tercer elemento de la galería -->
<div>
<img>
<p>
</div>
</div>
Utiliza justify content para alinear el contenido de la galería, según estimes como mejor
quedan los resultados.
Observaciones:
● Los flex-items también pueden ser un div u otro tipo de elemento. El primer div es el
flex-container y sus elementos hijos son los flex-items.
● Puedes mover el CSS en un archivo externo o en el header.
● Si las imágenes son muy grandes puedes utilizar CSS para ajustarlas, puedes partir
probando con agregar max-width: 100% sobre la imagen.
_ 12
www.desafiolatam.com
Actividad 6: Creando un menú con flex
● Crea una nueva carpeta llamada primer-menu y el archivo index.html con la base de
HTML.
● Copia dentro del body las siguientes etiquetas
<ul>
<li>
<a href="#"> Inicio </a>
</li>
<li>
<a href="#"> Pag 2 </a>
</li>
<li>
<a href="#"> Pag 3 </a>
</li>
</ul>
ul {display: flex}
● Utiliza CSS para eliminar los márgenes de forma que quede en la parte superior del
sitio.
● Agrega un color de fondo al menú.
● Puedes también cambiar el color de los links, el text-decoration y el color.
HTML Semántico
Hasta el momento, para dividir nuestra página en distintas secciones hemos ocupado la
etiqueta div, por ejemplo:
Ahora, aprenderemos que existen etiquetas específicas que podemos utilizar para este
propósito; estas cumplen el mismo rol visual que el div, pero a su vez comunican su
propósito a través del nombre.
_ 13
www.desafiolatam.com
Por ejemplo, en lugar de <div class="menu"> ahora utilizaremos la etiqueta <menu> y en
lugar de <div class="header"> utilizaremos <header>. Este tipo de etiquetas se llaman
etiquetas semánticas.
_ 14
www.desafiolatam.com
Estructura de un sitio con HTML semántico
No existe una estructura única de sitio web, hay varios arquetipos de estructura
dependiendo del propósito, pero un sitio web estático probablemente tendrá una estructura
como la siguiente:
El siguiente diagrama te ayudará en caso de que no tengas claridad que tipo de etiqueta
utilizar:
_ 15
www.desafiolatam.com
Imagen 9. Traducción del diagrama sectioning flowchart de html5doctor
Fuente: http://html5doctor.com/downloads/h5d-sectioning-flowchart.pdf
Antes de continuar:
● La etiqueta <div> se utiliza para crear divisiones dentro de una página web, pero no
tiene semántica.
● HTML5 tiene etiquetas que cumplen la misma función de dividir que el <div>, pero
que le atribuyen semántica al contenido, como <nav>, <header>, <section> y
<footer>, entre otras.
● <nav> se usa para bloques de navegación.
● <header> se usa para realizar una introducción al sitio.
● <main> se utiliza para la sección principal del sitio.
● <section> se usa para identificar secciones independientes.
● <footer> para definir un pie de página.
_ 16
www.desafiolatam.com