¿Cómo posicionar contenedores horizontal y verticalmente con Flexbox?
Flexbox es una herramienta poderosa en CSS que permite alinear y distribuir espacio entre los elementos de un contenedor, haciéndolo simple y eficiente tanto para orientaciones horizontales como verticales. En las clases anteriores, nos enfocamos en la disposición horizontal, pero el verdadero poder de Flexbox se manifiesta cuando quieres alinear elementos verticalmente.
¿Cómo cambiar la orientación de los contenedores?
Para cambiar la orientación de los contenedores y llevar el contenido al centro o bordes del contenedor padre, se puede usar Flexbox con propiedades específicas:
Altura del contenedor principal: Primero, es necesario establecer la altura del contenedor principal. Por ejemplo, asignar una altura mediante unidades relativas, como 50vh, asegurará que ocupe el 50% de la altura de la pantalla.
Propiedad align-items: Esta propiedad centraliza el contenido verticalmente con opciones como:
center: Alinea el contenido al centro del contenedor.
flex-start: Coloca el contenido en la parte superior.
flex-end: Envía el contenido al final del contenedor.
¿Qué propiedades de Flexbox inciden en el crecimiento y orden de contenedores?
Flexbox también te permite manipular el crecimiento de los contenedores y su orden sin cambiar el HTML, lo que simplifica el diseño adaptativo.
Propiedad align-items: stretch: Se utiliza para estirar el contenido a llenar el espacio del contenedor padre. Esto funcionará únicamente si no se define una altura fija para los elementos hijos.
Propiedad flex-grow: Una de las características más útiles, permite ajustar el área en el que puede crecer un contenedor específico cuando hay espacio extra:
.box1{flex-grow:1;}
En este ejemplo, la caja 1 crecerá para ocupar el espacio disponible.
Propiedad order: Permite cambiar la posición de los elementos hijos dentro de un contenedor. Un elemento con un orden más bajo se ubicará antes que los que tienen un orden más alto.
.box1{order:2;}.box2{order:1;}
Aquí, el box2 aparecerá antes que el box1, independientemente de cómo fue escrito en el HTML.
¿Qué beneficios trae usar flex-wrap en Flexbox?
Cuando el espacio se vuelve limitado, Flexbox facilita la agrupación de elementos en múltiples líneas sin complicaciones adicionales en CSS, gracias al uso de la propiedad flex-wrap.
Efecto wrap: Al activar esta propiedad, tus contenedores se distribuirán automáticamente en nuevas líneas conforme sea necesario.
.container{flex-wrap: wrap;}
Esto es especialmente útil para la adaptación a diferentes tamaños de pantalla, característica clave para el diseño web responsivo.
¿Por qué elegir Flexbox para diseño responsive?
Flexbox es una herramienta versátil para layouts escalables que se adaptan automáticamente a diferentes dispositivos y tamaños de pantalla. Su capacidad para redistribuir elementos sin necesidad de desmantelar el CSS subyacente lo hace ideal para el diseño responsive, permitiendo que los elementos se comporten de manera predecible al cambiar el tamaño del viewport.
El poder de Flexbox radica en su simplicidad y funcionalidad avanzada, ahorrando tiempo y esfuerzo en la creación de interfaces de usuario que responden elegantemente a las necesidades del usuario. Como tarea práctica, intenta volver a crear un layout con Flexbox enfocándote en la alineación vertical y juega con diferentes dimensiones de pantalla para ver cómo responden los contenedores. ¡Te sorprenderán los resultados!
Flexbox se convertirá en tu aliado esencial en el diseño adaptable, haciendo que la tarea de crear interfaces complicadas sea más manejable y menos frustrante. Estás preparado para aventurarte más en Flexbox, y recuerda, la práctica y experimentación serán tus herramientas para dominar este potente módulo de CSS.
Mi Resumen :D
...
Flex es un tipo de display que permite que el contenedor padre sea flexible a los cambios que puedan tener los elementos hijos en su alineación.
Una vez tengamos el elemento padre con display: flex tenemos otras propiedades que podremos usar para nuestro beneficio.
Flex-direction: Te permite elegir la alineación de los elementos hijos sea en vertical (column) u horizontal (row), esta alineación viene por defecto.
Justify-content: Esta propiedad nos permite alinear el contenido de forma horizontal
Valores:
Flex-start: Alinear items del flex desde el comienzo.
Flex-end: Alinear items desde el final.
Center: Alinear items en el centro del contenedor.
Space-between: Distribuir items uniformemente, el primer items al inicio, el último al final.
Space-around: Distribuir items uniformemente, estos tienen el mismo espacio a su alrededor.
Space-evenly: Distribuye uniformemente el espacio entre los items y su alrededor.
Align-items: Sirve para alinear los elementos hijos de forma vertical.
Valores:
Flex-start: Se alinean desde arriba.
Flex-end: Se alinean desde abajo.
Center: Alinea los item al centro del eje y del contenedor.
Stretch: Estira el alto de los elementos hijos al 100% del alto del elemento padre.
Baseline: Escala el alto del elemento al tamaño de su contenido.
Flex-wrap: Permite que un elemento cuyo tamaño sea mayor al de la página haga un salto de línea sin salirse del contenedor, pues este se agranda.
Order: Especifica el orden utilizado para disponer los elementos en su contenedor flexible. Los elementos estarán dispuestos en orden ascendente según el valor de order.
Flex-grow: Especifica qué cantidad del espacio restante dentro del contenedor flexible, debería ocupar el ítem en cuestión según su dirección principal, esta última determinada por flex-direction.
Flex-basis: Especifica el tamaño inicial de un elemento flexible.
Muchas gracias
Gracias
Lo logreee!! 🥳🥳🥳 Me encantó descubrir flex
Antes
Después
Se ve mejor.
Oye muy cool
Una aclaración con flex-direction: Al ocupar flex-direction las propiedades justify-content y align-items cambian su funcionamiento, es decir, si se pone un flex-direction de column.... justify-content ahora alineará de forma vertical y align-items de forma horizontal.
Eso es correcto! buen aporte :)
justo me estaba empezando a crecer la duda de cual es la diferencia de Justify y align JAJAJA GRACIAS!
Listo! mejorado el reto con el uso de flexbox
**Antes: **
Despues:
Muy bien presentado.
Buen aporte, felicitaciones.
también dejo mi reto
Reto cumplidoLarga vida a flexbox
HTML
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>LayoutwithFlex</title><link rel="stylesheet" href="./style.css"></head><body><header class="header"><figure class="logo"><img src="./images/logo.webp" alt="Logo Platzi"><strong>Platzi</strong></figure><nav class="navbar"><ul class="menu"><li><a href="">Home</a></li><li><a href="">Courses</a></li><li><a href="">Teachers</a></li><li><a href="">Blog</a></li></ul></nav></header><main class="main"><aside class="routes"><figure class="routes-images"><img src="./images/route_1.png" alt="Route"><img src="./images/route_2.png" alt="Route"><img src="./images/route_3.png" alt="Route"><img src="./images/route_4.png" alt="Route"></figure></aside><section class="content"><p>Lorem ipsum dolor sit amet consectetur adipisicing elit.Illum totam consequatur commodi nostrum fuga quae quam assumenda doloribus delectus dolorem!Nostrum eligendi accusamus iure ipsa ipsam illum accusantium?Magni, necessitatibus.</p></section></main><footer class="footer"><p>Madewith love inPlatzi</p></footer></body></html>
Muy guay amigo, siempre veo que hacen el sidebar dentro del main, te reto que hagas esto mismo pero con el el main content independiente del sidebar. Felicidades por tu layout
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>DesafíoLayout</title><link rel="stylesheet" href="./style.css"></head><body><header class="header-container"><nav class="header-nav"><figure class="header-logo"><img src="./img/logo.png" alt="logo platzi" width="120px"></figure><ul class="header-menu"><li><a href="#">Clases</a></li><li><a href="#">Blog</a></li><li><a href="#">Foro</a></li><li><a href="#">Agenda</a></li><li><a href="#">TV</a></li></ul></nav></header><main class="main-container"><aside class="aside-container"><article class="aside-article"><h2 class="aside-title">Lorem ipsum, dolor sit.</h2><p class="aside-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit.Nostrum ex dolorem modi, eum ab harum corporis numquam ipsum quo ratione velit officiis vitae aliquam maiores dolore laudantium architecto repellat inventore.</p></article><article class="aside-article"><h2 class="aside-title">Lorem ipsum, dolor sit.</h2><p class="aside-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit.Nostrum ex dolorem modi, eum ab harum corporis numquam ipsum quo ratione velit officiis vitae aliquam maiores dolore laudantium architecto repellat inventore.</p></article><article class="aside-article"><h2 class="aside-title">Lorem ipsum, dolor sit.</h2><p class="aside-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit.Nostrum ex dolorem modi, eum ab harum corporis numquam ipsum quo ratione velit officiis vitae aliquam maiores dolore laudantium architecto repellat inventore.</p></article><article class="aside-article"><h2 class="aside-title">Lorem ipsum, dolor sit.</h2><p class="aside-text">Lorem ipsum dolor sit amet, consectetur adipisicing elit.Nostrum ex dolorem modi, eum ab harum corporis numquam ipsum quo ratione velit officiis vitae aliquam maiores dolore laudantium architecto repellat inventore.</p></article></aside><section class="section-container"><article class="article-container"><h1 class="article-title">Lorem ipsum dolor sit amet.</h1><p class="article-subtitle">Lorem ipsum dolor sit amet consectetur adipisicing elit.Labore, a doloremque accusantium porro quidem veritatis doloribus dicta assumenda voluptates, ut, aspernatur quia delectus placeat culpa fuga nulla soluta quod quibusdam!</p><p class="article-text">Lorem ipsum dolor sit amet consectetur adipisicing elit.Voluptatem at impedit itaque.Recusandae quas, nihil libero minus qui repudiandae consequuntur debitis aut accusantium deleniti temporibus nostrum, consequatur explicabo commodi totam!Nisi ipsa laudantium reiciendis earum odit rerum quas dignissimos necessitatibus provident cupiditate quasi eaque, voluptatibus minima perferendis iusto at, sed ducimus officiis impedit error, ea iure numquam omnis sit!Repudiandae!Dolorem, architecto quidem deserunt soluta doloribus autem quibusdam?Et amet nulla libero facere soluta culpa eaque harum alias.Debitis animi libero incidunt in!Laudantium dicta facilis maxime voluptatem nam?Mollitia!Quasi corporis laudantium tenetur commodi, accusantium, odit, iure animi consectetur fuga adipisci eligendi!Ea odit deleniti perferendis necessitatibus esse!Quasi voluptate officiis enim reprehenderit.Magni minus deserunt consectetur illo maxime.Voluptatem consequatur maxime exercitationem culpa cum facere nostrum.Velit asperiores neque libero molestias cupiditate non dolorem error nihil laudantium vero odit esse quam quod animi possimus eos numquam, voluptate doloremque.</p><div class="article-cards_container"><div class="article-card html"><p>HTML5</p></div><div class="article-card css"><p>CSS3</p></div><div class="article-card js"><p>JS</p></div></div></article></section></main><footer class="footer-container"><section class="footer-slogan"><p class="footer-text_slogan">Transformamos la economía de nuestros países entrenando a la próxima generación de profesionales en tecnología.</p></section><section class="footer-social"><p class="footer-text_social">Aprende en nuestras redes:</p><nav class="footer-nav"><ul class="footer-menu"><li><a href="#"><img src="./img/twitter.png" alt="Twitter" width="30%"></a></li><li><a href="#"><img src="./img/youtube.png" alt="Twitter" width="30%"></a></li><li><a href="#"><img src="./img/facebook.png" alt="Twitter" width="30%"></a></li><li><a href="#"><img src="./img/instagram.png" alt="Twitter" width="30%"></a></li></ul></nav></section></footer></body></html>
Me imaginé hacer la página de una tienda de café 😍
❤️☕️
Que empático el profe, cuando pregunta ¿Cómo te sientes? Tal cual como dijo, entré en frustración, pero poco a poco voy comprendiendo y jugando con los estilos y ahora flex-box :)
Tranquila! es normal sentirse asi.
Poco a poco vamos aprendiendo cosas nuevas y lo mas importante, realiza muchos ejercicios.Crea muchas webs y #NucaParesdeAprender.
Dejo mi aporte que me costó UNA BANDA.
Lo aclaro porque no muchos aclaran el esffuerzo que puede llevar para alguien que recién arranca y ve las páginas de otros super avanzadas y puede sentirse frustrado. Es normal que te cueste y seguí intentadndo hasta que salga aunque se vea tan simple como el mío.
<!DOCTYPE html><html lang="es"><head><meta charset="UTF-8"/><meta http-equiv="X-UA-Compatible" content="IE=edge"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Desafío</title><link rel="stylesheet" href="./style.css"/></head><body><header><nav class="nav"><figure class="nav_img-container"><img src="./imagenes/Logo.png" alt=""class="img-container_img"/></figure><ul class="nav_button-container"><li class="button-container_button">Catálogo</li><li class="button-container_button">Packs</li><li class="button-container_button">¿Quienes somos?</li><li class="button-container_button">Ayuda</li></ul></nav></header><main><section class="sidebar-main"><article class="sidebar-main_box"></article><article class="sidebar-main_box"></article><article class="sidebar-main_box"></article><article class="sidebar-main_box"></article></section><section class="content-main"><article><p class="p">Lorem ipsum dolor sit amet consectetur adipisicing elit.Reiciendis, rerum amet voluptatibus illo adipisci iste fugiat aperiam corporis
quidem, architecto, deleniti dicta saepe quos eius sed impedit autem
delectus cumque.Libero aut qui in laboriosam quia cum modi ratione
molestiae possimus omnis illum officia veritatis tenetur illo
aperiam similique provident repellendus repellat dolore doloremque
eveniet corrupti, deserunt harum!Consequuntur, magni?Perspiciatis optio ducimus quaerat aliquid?Fuga dolores minima deserunt nobis
mollitia culpa adipisci quia accusamus dignissimos.Nostrum, culpa
libero eaque laudantium recusandae iusto eligendi, rem non facilis
officiis est doloribus.Tempora ratione eveniet libero repudiandae
non quis odio cum inventore?Ex debitis voluptatum cupiditate quam
nihil, sapiente maiores quidem nostrum voluptates exercitationem, numquam nulla quibusdam adipisci dolor est deleniti iusto!Sed quasi
unde, tenetur eos excepturi aperiam fugit voluptatibus
necessitatibus officiis doloribus iste ab explicabo dignissimos quis
ex magni ipsa dolorem cum!Ducimus nemo dolorum veritatis sed iste
maiores deserunt?</p></article></section></main><footer class="footer"><p>Info</p><p>Contacto</p><p>Preguntas frecuentes</p></footer></body></html>
totalmente de acuerdo, yo dure hasta días creando mi layout porque quería saber cada detalle y aunque es algo simple ya es algo que me queda un poco mas claro los conceptos, pero si, para uno que apenas esta iniciando en este mundillo es algo duro y da frustración ver trabajo tan bien elaborado de los compañeros pero debemos tener claro que cada uno tiene su propio ritmo lo importante es no parar de aprender
Volví a hacer el reto implementando Flex
Así estaba antes:
Así quedó con Flex:
También estuve estudiando con Flexbox Froggy y Flexbox Zombies
Para mi se ven iguales y supongo que eso quiere decir que manejas muy bien el inline-block sin flex.
Yo me quede atorado en el ultimo nivel de ese juego.
Estan geniales 👍
CORRECCIÓN SOBRE align-items:baseline;
El profesor no explicó correctamente esta propiedad. Por lo general los contenedores van a adaptarse al tamaño de su contenido, pero align-items:baseline; no tiene esa función. Esta es la aclaratoria:
Aquí el resultado de mi diseño responsive y aquí el código fuente
Algunas de propiedades de flex
flex-flow: se puede colocar wrap y column separados con espacios.
flex-align: alinea el texto de forma transversal a direction. Tiene varios valores como stretch que hace que ocupe el 100% de la pantalla. O baseline que ocupa solo el tamaño del texto que se esté usando.
order: n da un orden de ubicación colocando un número. Funciona con positivos y negativos. Los que no tengan un order tienen por defecto el 0.
flex-grow: 1 hace crecer a las cajas para ocupar todo el espacio restante en responsive. Se sobre escribe a space-evenly.
El anterior reto lo realicé sin Flexbox. Sin embargo, ya lo había implementado antes. Solo que como varios, no quise hacer trampa. Para dejarles uno de mis proyectos con este display, les dejo este de un reciente reto de Platzi: