Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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 sus posibles valores, así como la propiedad float.
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.
Ejemplo: .menu li
● 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
Guía de ejercicios 3 - Posicionamiento en CSS 1
¿En qué consiste esta guía? 1
Tabla de contenidos 2
HTML Semántico 3
Principales etiquetas semánticas 3
Ventajas de las etiquetas semánticas 5
Estructura de un sitio con HTML semántico 5
Determinando que tipo de etiqueta semántica utilizar 6
Resumen de HTML Semántico 7
Modelo de cajas 7
Propiedad Display (inline, block, inline-block) 8
Elementos block 8
Elementos inline 8
Inline-block 9
Construyendo un menú con la propiedad display 9
Actividad 1 11
El problema de los inline-block 12
Actividad 2 12
Floats 13
Utilizando floats 13
Actividad 3 13
Actividad 4 14
Colapso por elementos flotantes 14
Actividad 5 15
display:flow-root 16
Problemas de tamaño y Floats 16
Actividad 6 18
Construyendo un menú con floats 19
¿Tabla, Float o Inline block? 20
¿Cómo escoger entre float o inline blocks? 21
Actividad 7: Revisando los aprendizajes 22
¡Comencemos!
_ 2
www.desafiolatam.com
HTML Semántico
En la unidad anterior aprendimos a dividir una página en secciones utilizando divs, 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.
_ 3
www.desafiolatam.com
Ventajas de las etiquetas semánticas
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:
_ 4
www.desafiolatam.com
Determinando que tipo de etiqueta semántica utilizar
El siguiente diagrama te ayudará en caso de que no tengas claridad que tipo de etiqueta
utilizar:
Antes de continuar:
_ 5
www.desafiolatam.com
Resumen de HTML Semántico
● 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.
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.
_ 6
www.desafiolatam.com
Imagen 4. Múltiples cajas.
Fuente: Desafío Latam.
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.
● <div>.
● <h1> - <h6>.
● <p>.
● <form>.
● <header>.
● <footer>.
● <section>.
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).
Algunos ejemplos son:
● <span>.
● <a>.
_ 7
www.desafiolatam.com
● <em>.
● <strong>.
Inline-block
Inline-block se comporta como inline, puedes poner un elemento al lado de otro, pero a la
vez se comporta como block dado que puedes establecer un ancho y alto.
● Construir un menú.
● Construir una galería de imágenes.
● Construir una sección de características.
● Un contenedor padre.
● Dentro del contenedor padre hay varios elementos con la propiedad display:
inline-block.
<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), los links son hijos de estos elementos,
entonces aplicaremos display:inline-block, esto lo podemos hacer dentro de la etiqueta style
en el head o una hoja de estilos nueva.
_ 8
www.desafiolatam.com
li {
display: inline-block;
}
Cuidado
No debemos cambiar las propiedades de todas las etiquetas <li>. Es mejor cambiar solo
las que estén dentro de 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.
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.
_ 9
www.desafiolatam.com
body, menu {
padding: 0px;
margin: 0px;
}
menu ul{
margin: 0px;
}
menu a:hover{
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.
pseudos-elementos
Son selectores que apuntes a una parte de un elemento, que empiezan con ::
Por ejemplo: a::first-letter.
Actividad 1
_ 10
www.desafiolatam.com
El problema de los inline-block
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, esto 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%;
}
_ 11
www.desafiolatam.com
Floats
Utilizando floats
Actividad 3
● Replica la imagen 5.
● Crea la estructura de un sitio web, agrega una imagen y agrega mucho texto dentro
de uno o más párrafos.
● Agrega el siguiente css (en el head o archivo externo).
img {
float: left;
}
_ 12
www.desafiolatam.com
● Observa la página ¿lograste replicarlo?
○ Puedes utilizar width y height para cambiar el tamaño de la imagen y lograr
un mejor efecto.
● A continuación implementa los siguientes cambios:
○ Cambia float: left por float: right
○ Agrega una segunda imagen con la clase r
○ Agrega el selector .r al css y agrega float:left
○ ¿Qué imagen se muestra primero? ¿Si en el HTML cambiamos el orden de las
imágenes cambia el orden al ver la página?
Actividad 4
● Replica la imagen 6.
● Crea la estructura de un sitio web, agrega dos párrafos con el texto Lorem Ipsum,
utilizando css agrega float: left sobre los párrafos.
Cuando un elemento padre contiene solo hijos flotantes, el contenedor padre colapsa y deja
de ser visible.
_ 13
www.desafiolatam.com
Imagen 7. Colapso de elementos flotantes
Fuente: Desafío Latam.
Actividad 5
<section class="features">
<p> Lorem, ipsum dolor sit amet consectetur adipisicing elit. Deserunt cumque aperiam quo
rerum a debitis recusandae veniam error quibusdam minus tempora, ullam distinctio labore
voluptatibus consequatur ratione esse sed voluptatem.</p>
<p> Lorem, ipsum dolor sit amet consectetur adipisicing elit. Deserunt cumque aperiam quo
rerum a debitis recusandae veniam error quibusdam minus tempora, ullam distinctio labore
voluptatibus consequatur ratione esse sed voluptatem.</p>
<p> Lorem, ipsum dolor sit amet consectetur adipisicing elit. Deserunt cumque aperiam quo
rerum a debitis recusandae veniam error quibusdam minus tempora, ullam distinctio labore
voluptatibus consequatur ratione esse sed voluptatem.</p>
</section>
● Agrega css especificando que los párrafos deben flotar a la izquierda y con un ancho
de 33%.
● Agrega un color de fondo sobre la clase padre.
● Abre la página en el navegador, deberías ver los párrafos pero no deberías ver el
color de fondo.
● Agrega la propiedad display: flow-root al contenedor padre.
● Abre el navegador deberías poder ver el color de fondo.
_ 14
www.desafiolatam.com
display:flow-root
<div class="padre">
<img class="float" -- >
<img class="float" >
<div class="clearfix">
</div>
.clearfix::after {
content: "";
clear: both;
display: table;
}
Podemos saber que tan compatible es una propiedad de CSS con algún navegador
utilizando la página caniuse https://caniuse.com/?search=flow-root
Hay un caso muy similar al anterior, donde dentro de un contenedor padre hay 2 elementos o
más elementos hijos, donde uno de los elementos es float y el otro no, donde el más grande
flota.
_ 15
www.desafiolatam.com
Veamos el siguiente ejemplo:
<section>
<img src="http://placekitten.com/g/300/500 " alt="">
<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>
</section>
section {
border: solid 1px black;
}
img{
float: left;
}
_ 16
www.desafiolatam.com
Podemos resolver el problema de la imagen de la misma forma que aprendimos
anteriormente: agregando al css del contenedor padre (en este caso .section) display:
flow-root;
Actividad 6
En CSS hay varias formas de resolver un mismo problema, algunas serán más
sencillas que otras, y en algunos casos especiales tendremos que recurrir a técnicas
más complejas por problemas específicos de compatibilidad.
_ 17
www.desafiolatam.com
Construyendo un menú con floats
Para desarrollar menú con floats, utilizaremos la misma estructura html del menú que
hicimos con display:inline-block
<menu>
<ul>
<li>
<a href=""> 1 </a>
</li>
<li>
<a href=""> 2 </a>
</li>
<li>
<a href=""> 3 </a>
</li>
</ul>
</menu>
Luego, tendremos que flotar los elementos hermanos, en este caso los <li> y asignar un
color de fondo.
li {
float: left;
}
menu {
background-color: black;
color: white;
line-height: 50px;
}
Sin embargo, no podremos ver el color de fondo del menú por el problema de que todos los
elementos internos flotan, así que agregamos el display:flow-root. Con esto, deberíamos
poder ver el menú.
li {
float: left;
}
menu {
background-color: black;
color: white;
line-height: 50px;
_ 18
www.desafiolatam.com
display:flow-root;
}
body, menu {
padding: 0px;
margin: 0px;
}
menu ul{
margin: 0px;
}
menu {
background-color: black;
color: white;
line-height: 50px;
display: flow-root;
}
menu li{
display: float;
margin-right: 50px;
}
menu a {
color: white;
text-decoration: none;
}
Cuando queremos poner un elemento al lado de otro, podemos utilizar tanto tablas, floats o
display: inline-block, sin embargo, en general se considera una mala práctica hacer uso de
tablas para realizarlo, por el motivo que requiere agregar mucho mas html de lo que significa
hacerlo sin tablas.
Adicionalmente, las tablas pueden romper el copiado de texto del sitio en algunas
ocasiones. Considera que deberías ocupar tablas exclusivamente cuando quieras agregar
datos en una tabla.
_ 19
www.desafiolatam.com
¿Cómo escoger entre float o inline blocks?
Para envolver una imagen entre texto debemos utilizar floats, para cualquier otro caso
podemos escoger entre cualquiera de las dos.
En general, es un poco más sencillo utilizar inline blocks, el diagrama visto en clases puede
ayudar a tomar una decisión.
_ 20
www.desafiolatam.com
Actividad 7: Revisando los aprendizajes
Revisa que puedas realizar las siguiente acciones:
● Utilizar etiquetas de html semántico.
● Crear un menú utilizando float.
● Crear un menú utilizando inline-block.
● Resolver el problema de colapso de floats utilizando un clearfix.
● Agregar íconos a un sitio web como por ejemplo los de font-awesome (esta
información está en exclusivamente en la ppt de la clase).
● Crear una sección de características como la siguiente.
_ 21
www.desafiolatam.com