El uso de Display Flex, o Flexbox, en CSS es una herramienta esencial para el diseño web moderno. Ofrece una manera avanzada y más sencilla de posicionar elementos dentro de un contenedor. Esta técnica permite que los contenedores se comporten de forma flexible adaptándose automáticamente según el espacio disponible, lo que ayuda a crear diseños más responsivos y menos complicados.
Flexbox es especialmente útil si te has enfrentado a desafíos complicados tratando de alinear elementos con las propiedades de display y position. Flex viene al rescate y evita frustraciones médicas, simplificando así la vida de los diseñadores.
¿Cómo empezar con Display Flex?
Vamos a crear una estructura básica para implementar Display Flex. Supongamos que tenemos un contenedor principal con varios elementos hijo dentro de él. Comenzaremos definiendo nuestra estructura HTML.
El contenedor principal (main) tendrá la clase container y cada contenedor hijo tendrá una clase específica para estilizar (box, box1, box2, etc.). Ahora, este HTML está listo para aplicar estilos con Flexbox.
¿Cómo aplicar estilos básicos para Display Flex?
Empezaremos con la configuración básica de estilos en CSS. Resetearemos los estilos del navegador para asegurar control sobre el diseño.
*{box-sizing: border-box;margin:0;padding:0;}html{font-size:62.5%;/* Equivalente a 10px para cálculos de rem */}body{font-size:1.6rem;/* Equivalente a 16px */}.container{border:0.3rem solid black;/* 3px solid black border */display: flex;}.box{width:10rem;/* 100px */height:10rem;/* 100px */}
Aquí, estamos utilizando el display con la propiedad flex en el contenedor principal. Esto cambia automáticamente el comportamiento de cada uno de los elementos hijos para colocar cada uno de ellos en una fila, haciendo que coexistan en la misma línea.
¿Cómo manipular la exhibición de elementos usando Flexbox?
La magia de Flexbox radica en su capacidad para modificar fácilmente la dirección y el comportamiento de los elementos:
Flex Direction: Se encarga de la dirección en la que se alinean los elementos, ya sea en fila (row) o columna (column).
.container{flex-direction: row-reverse;/* También se puede usar column o column-reverse */}
Flex Wrap: Permite que los elementos se muevan a la siguiente línea si no hay espacio suficiente.
.container{flex-wrap: wrap;/* wrap-reverse pone los elementos de abajo hacia arriba */}
Justify Content: Alinea los elementos horizontalmente, ofreciendo opciones como center, flex-start, flex-end, space-between, space-around, y space-evenly.
Ejemplos como el justify-content: space-evenly; crean un espacio uniforme alrededor de cada elemento y en los bordes del contenedor, asegurando un diseño estético y equilibrado.
¿Cómo mejora la experiencia con Display Flex?
Comprender y dominar Flexbox abre un mundo de posibilidades en la creación de layouts sofisticados y responsivos. Su flexibilidad permite afrontar de manera eficiente uno de los principales retos del diseño web: adaptar los contenidos a distintos dispositivos sin complicaciones. Al tener un control más preciso y simplificado sobre los elementos, se reduce el tiempo de desarrollo y mejora la consistencia visual.
Incorpora Flexbox en tus diseños y elimina las preocupaciones de desplazamiento horizontal incorrecto mientras aseguras que el contenido se muestre de manera óptima y equilibrada. Así que sigue explorando, flex sigue avanzando y proporcionará aún más facilidades en la creación de interfaces adaptadas a cualquier necesidad. La práctica constante te convertirá en un experto y te permitirá enfrentar a un mayor número de desafíos con soluciones eficientes y creativas.
Propiedades en contenedores padre:
display:flex;
flex-direccion: row | column | row-reverse | column-reverse
flex-wrap: nowrap | wrap | wrap-reverse
Esta siguiente propiedad es un atajo para escribir el flex-direccion y el flex-wrap en una sola línea de código
flex-flow: Primero escribes dirección | Luego escribes flex-wrapPosicionar horizontal
justify-content: flex-star | flex-end | center | space-around | space-between
Posicionar manera vertical
aling-items: flex-star | flex-end | center | stretch | baseline
aling-content: flex-star | flex-end | center | stretch | space-around | space-between "Aling-conten solo se utiliza varias filas de elementos, pero si es una sola línea usamos aling-items"
Propiedades en elemento hijo
order: ; Esto se utiliza para cambiar el orden de nuestros elementos sin cambiar el orden real semantico y correcto de html. Sencillamente colocando números.
aling-self: aling-items: flex-star | flex-end | center | stretch | baseline "Muy importante, si en el padre del elemento tiene declarado flex-direccion:row; esta propiedad lo acomodara verticalmente. Y si es flex.direccion: column lo ordenara horizontalmente"
¡Gracias!
Nunca pares de aprender (y practicar) 🦄
Muchas GRacias
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.
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.
¡Muchas gracias! Con tu permito lo uso para mis apuntes. :D
Buen aporte!
Un pequeño resumen
¡Genial! es de los mejores resúmenes que he visto. ¡Gracias! 😊
gracias por el aporte, simple y completo.
Me pone nerviosa que la pantalla no se ve completa xD
Tienes razón, se corta la pantalla en el lado izquierdo.
Yo pensando que era mi navegador >:V
Creo que muchos ya jugaron el Flexbox Froggy. Pero pocos conocen el Flexbox Zombies. A mi opinión este otro está también super cool y muy didáctico. :wink
es muy buen juego !
qué buena forma de aprender
Chicos en Visual Studio Code, tenemos el shorcout para crear el contenerdor con su clase.
De esta forma:
Escribimos el nombre de la clase que le queremos colocar y luego presionamos la tecla tab.
.nombre-clase
Y este nos creará el contenedor directamente con la clase que le quisieramos colocar.
<div class="nombre-clase"></div>
Esto es por el toolkit emmet, te dejo una pagina de referencia, ya que este provee varias opciones para generar rapidamente tus etiquetas y estructuras html https://docs.emmet.io/
Te dejo un ejemplo de como usarlo para generar la estructura base del html de la clase
(div.box$.box>p{box$})*6
donde el . te indica la clase del elemento anterior, el $ indica que se inserte un numero de manera consecutiva para cada div que aparezca, {} se usan para indicar el contenido que ira dentro de la etiqueta y por ultimo se multiplica por 6 para que genere 6 veces esas etiquetas.
Dando el siguiente resultado:
Paso un tip de Pro-Gamer Developer, por si a alguien le interesa. Utilizando el plugin de Emmet se pueden abreviar estructuras repetitivas y complejas que a veces resultan molestas de escribir "a mano" o incluso copiando y pegando una y otra vez.
Esta herramienta ya viene instalada por defecto en VS Code y es muy fácil de instalar en otros editores de texto, sugiero leer la documentación. Con algunas pocas reglas de sintaxis sencilla se puede ahorrar mucho tiempo y esfuerzo.
Déjame un 💚 si quieres que escriba un ++Tutorial de estudiante++ sobre esta herramienta para este curso.
💚 vamos deseo ver ese curso
En flexbox tenemos lo que se llama MAIN AXIS (eje principal) y CROSS AXIS (eje secudario) los elementos se mueven SIEMPRE en el MAIN AXIS que por defecto es de forma HORIZONTAL porque esta el FLEX-DIRECTION: ROW pero nosotros podemos cambiar que ya no este de forma horizontal con FLEX-DIRECTION:COLUMN asi el main axis esta de forma vertical y el cross axis de forma horizntal
ç
property justify-content alinea elementos horizontalmente, valores:
flex-start: Alinea elementos al lado izquierdo del contenedor.
flex-end: Alinea elementos al lado derecho del contenedor.
center: Alinea elementos en el centro del contenedor.
space-between: Muestra elementos con la misma distancia entre ellos.
space-around: Muestra elementos con la misma separación alrededor de ellos.
Space-evenly: Distribuye uniformemente el espacio entre los items y su alrededor.
property align-items alinea elementos verticalmente
flex-start: Alinea elementos a la parte superior del contenedor.
flex-end: Alinea elementos a la parte inferior del contenedor.
center: Alinea elementos en el centro (verticalmente hablando) del contenedor.
baseline: Muestra elementos en la línea base del contenedor
stretch: Elementos se estiran para ajustarse al contenedor.
property flex-direction define la dirección de los elementos en el contenedor. / Permite elegir la alineación de los elementos hijos sea en vertical (column) u horizontal (row). Viene por defecto.
valores:
row: Elementos son colocados en la misma dirección del texto.
row-reverse: Elementos son colocados en la dirección opuesta al texto.
column: Elementos se colocan de arriba hacia abajo.
column-reverse: Elementos se colocan de abajo hacia arriba.
property order para agregar un orden a elementos individuales
property **flex-wrap ** especifica si los elementos "hijos" son obligados a permanecer en una misma línea o pueden fluir en varias líneas
nowrap: Cada elemento se ajusta en una sola línea.
wrap: los elementos se envuelven alrededor de líneas adicionales.
wrap-reverse: Los elementos se envuelven alrededor de líneas adicionales en reversa.
property flex-flow es una combinación de flex-direction y flex-wrap. Acepta un valor de cada una separada por un espacio. Permite establecer filas y envolverlas.
property align-content determina el espacio entre las líneas, mientras que align-items determina como los elementos en su conjunto están alineados dentro del contenedor. Cuando solo hay una línea align-content no tiene efecto.
flex-start: Las líneas se posicionan en la parte superior del contenedor.
flex-end: Las líneas se posicionan en la parte inferior del contenedor.
center: Las líneas se posicionan en el centro (verticalmente hablando) del contenedor.
space-between: Las líneas se muestran con la misma distancia entre ellas.
space-around: Las líneas se muestran con la misma separación alrededor de ellas.
stretch: Las líneas se estiran para ajustarse al contenedor.
property align-self permite los mismos valores de align-items. Se usa para un elemento específico
++Nota que cuando estableces la dirección a una fila invertida o columna, el inicio y el final también se invierten.++
Gracias por el resumen!!
excelente
Creo que no hay mejor guía para aprender Flexbox como lo es Flex Cheatsheet
No olviden que la Practica hace al maestro.
Asi que no se preocupen si no entienden a la primera.
Es cuestión de estudiar unas tras otra.
Hacer muchas paginas y cuando menos vean, ya seran unos expertos.
Otra forma de practicar es con el maravilloso juego de Flexbox-Froggy
Recién entré al mundo del desarrollo y vaya que se me ha hecho difícil este reto. :(
Héchale ganas! Animo!
Se ve bien cool eso sí!!!
La guia en formato imagen tomada de la pagina para tenerla de referencia:
.
¡Completísimo!
Esta super
Ayer hice el reto del layout y me tardé horas. Me costó sangre, sudor y lágrimas. Ahora que me muestran flexbox, lloro de igual forma, pero de alegría. No puedo, sin embargo, evitar sentirme en el fondo, algo traicionado como si de mi se hubieren burlado el día de ayer. :p
Te entiendo perfectamente, en mi caso me tomó inclusive más de 1 día entero... pero no me di por vencido y pude terminar. Pero de haber manejado display:flex lo hacía en 1 hora xD.
Pues a mi me tomó dos días. Y tuve que ver algunos tutoriales en YouTube porque no entendía por qué no se posicionaban los elementos como quería. Me di cuenta que no entendía bien el position hasta emplear unas horas en entenderlo bien fue qué pude terminar el reto.
The Complete Flex Layout Editor & Source Code Generator
CSS Flexbox Cheatsheet
Brutal este aporte :) Gracias
Con flex.
Buena selección de animes!
¿Cómo se llama el último?
Orale... y muchos profes se la complicaban explicando esto... y pum llega el profe degranda y en 15 minutos me voló la cabeza.
😅😅
.
jajajajajajajaja
Notas de la clase
Muy buen aporte...
En el editor hay opciones flex o flexbox e inline-flex o inline-flexbox. ¿Hay alguna diferencia práctica?
display: flex
El valor flex hace que el contenedor flexible sea un bloque dentro del elemento "padre" al que pertenezca.
display : inline-flex
El valor inline-flex hace que el contenedor flexible sea un elemento "en línea" dentro del elemento "padre" al que pertenezca.
CSS Reference: displayUsando las cajas flexibles CSS
en mi caso si pongo flexbox no me funciona.. solo con flex