En el mundo del diseño web, la elección entre Flexbox y CSS Grid puede convertirse en un debate apasionante. Estos dos sistemas de diseño CSS son herramientas poderosísimas, cada una con sus propias fortalezas y usos ideales. La habilidad para discernir cuándo utilizar cada una es esencial para cualquier desarrollador front-end. En esta clase, exploramos una dinámica divertida que te ayuda a decidir entre estos dos.
¿Cómo se comparan Flexbox y CSS Grid?
Flexbox está diseñado principalmente para diseños unidimensionales. Es excelente para alinear elementos a lo largo de un eje, ya sea horizontal o vertical, y es una opción preferida para layouts más simples y componentes internos.
CSS Grid, por otra parte, facilita la creación de layouts bidimensionales complejos. Es perfecto para diseños que necesitan un control más detallado sobre filas y columnas.
La clave es observar no solo el diseño visual, sino también cómo se organiza el HTML desde el inicio. Ambos, Flexbox y CSS Grid, requieren un marcado HTML estructurado de manera complementaria.
¿Cómo implementamos Flexbox para un App Bar Top?
Para este ejercicio, visualizamos un App Bar Top y nos preguntamos si Flexbox o CSS Grid sería la mejor opción. Al analizar el elemento, es evidente que Flexbox podría ser más sencillo gracias a su naturaleza unidimensional.
Este enfoque con Flexbox permite que el título y los íconos se distribuyan equitativamente en el espacio del App Bar. justify-content: space-between asegura que haya un espacio adecuado entre cada elemento hijo.
¿Cómo lo adaptamos con CSS Grid?
Supongamos que decides emplear CSS Grid. Aunque es más avanzada para diseños complejos, aún puede manejar el App Bar Top mediante la creación de un diseño de cuadrícula específico.
Con Grid se obtienen controles precisos para decidir dónde comienza o termina cada elemento, utilizando grid-column.
¿Cómo decides para un diálogo entre ambas?
Ahora, enfrentándonos a la decisión entre Flexbox y Grid para un componente de diálogo, consideramos la estructura interna compleja que puede beneficiarse de CSS Grid.
La capacidad de definir áreas dentro de CSS Grid se destaca aquí, permitiendo un diseño claro y efectivo del diálogo.
¡Comparte tus experimentos!
Después de experimentar con ambos Flexbox y CSS Grid, la mejor manera de aprender es practicando. Te animo a que tomes estas bases y construyas tus propios diseños. ¿En qué casos prefieres Flexbox? ¿Cuándo sientes que CSS Grid es la opción superior? La práctica individual te permitirá descubrir más matices y ganar seguridad en tus elecciones de diseño. ¡Sigue explorando y sigue creando!
Flexbox, porque se puede usar Flexbox para posicionar los elementos de una forma más fácil usando la alineación y contenidos hijos-padres
Flexbox, son 3 elementos en bloque, y el último bloque podría alinearlo con CSS Grid todo hacia la derecha :D
.
Creo que lo más importante aquí no es determinar de cuál manera se te hace a ti más sencillo mauqetar, por ejemplo, para los ejemplos propuestos, yo usaría Flexbox porque me llevo muy bien con él y de alguna forma es más flexible para mí, sin embargo, a otra persona se le puede hacer más fácil usar CSS Grid, y es totalmente válido, lo importante es encontrar cuál es la que más se te acomoda, porque a fin de cuentas, se puede lograr el mismo diseño con ambos :D
A mi flexbox me cae bien porque es buena onda y es muy flexible.
De acuerdo con vos, yo personalmente uso más flexbox que grid ya que hago las cosas más rápido porque tengo ya mucha experiencia con el aunque en ocaciones grid me ha salvado el pellejo.
Hoal compañeros.
Considero que como ya han mencionado más abajo, Flexbox siempre se puede utilizar y lo mismo va para Grid. En ese sentido y tomando en cuenta que estaremos trabajando para un cliente o compañía, los factores que determinan qué herramienta utilizar son dos:
-El diseño:Lo que no se pueda hacer con flexbox va para grid
-El tiempo: ¿En cuánto tiempo se necesita el producto?Si se domina una herramineta más que
otra y te lleva al mismo resultado en menor tiempo, sin duda se deberá utilzar esa.
La eficiencia prima.
Saludos.
Exclente aporte compañero
En lo personal en ambos casos usaría Flexbox, en primer lugar por que tengo mas experiencia usándolo y en segundo lugar, porque son pocos elementos los que se manejan en estos casos.
Pienso similar. Para estos ejemplos creo que es mas viable flex pero en entornos con mas elementos podria funcionar mejor grid.
Yo utilizaría en ambos
display: flex;
Aunque es cierto que también lo puedes conseguir con Grid, en estos casos como son diseños simples y unidireccionales sería más eficiente flexbox, el grid sería para diseños de cuadrículas que necesiten varias filas y columnas, en esos casos grid si que es más eficiente que flexbox, y viendo un poco el diseño de platzi me dí cuenta que utilizaron grid para la creación del header 🙃
Primer caso:
CSS-Grid: Si bien hay un solo eje de trabajo, el sistema de grillas me puede ayudar a acomodar los elementos en celdas con tamaños específicos y ayudarme a manejar mejor y de forma simple el responsive. Si utilizara FlexBox me vería obligado a agregar contenedores hijos en el medio y para alinearlos por dentro tendría que volverlos también contendores FlexBox para conseguir el mismo resultado visual.
Segundo caso:
CSS-Grid: una grilla de tres por tres, donde las primeras dos filas estarán ocupadas de punta a punta por el header y el texto y la última fila ocuparían las dos últimas columnas cada call to action. Si hubiera que trabajar responsive se haría muy fácil de modificar trabajando con grid-area.
1.- Flexbox porque es un diseño lineal.
2.- Flexbox porque es más facil ubicar sin necesidad de hacer la tabla de Grid
Hola buena tarde, diculpen alguien me podria decir por favor por que "grig-gap" no me hace efecto
Hola Santi ! A mí tu código me funciona perfecto 🤔
Buena la dinámica, esta chevere ver el esqueleto html y sus estilos en formato flex/grid... ojalá vengan layouts más complejos para ver contrastes
1:53 ¿por que no usaste margin-inline-start y end? 😠(carita enojada)
En ambos casos, quise usar flexbox.
En primer caso, porque un nav tiene siempre la alineación horizontal que es default de flexbox, y es cuestión de jugar con el justify-content para alinearlo como deseamos
En el segundo caso, porque el diseño no parece muy complejo, facilmente podemos dividir la info de Dialogs y los botones de acción en dos cajitas container y luego jugar con el justify-content para que los botones queden alineado al final.
Resulta más sencillo usar flexbox en lugar de css grid para ambos casos.
En la primera parte, el nav es un contenedor horizontal y en la segunda parte la única parte que necesita layout es la de las acciones.
Yo usaría para ambos caso Flexbox, tengo algo de tiempo usándolo y estoy más familiarizada, sin embargo esto no significa que por esa razón lo prefiera sobre CSSGRID, no, depende el diseño, en este caso ambos son muy sencillos y la mente me lleva a la alineación unidimensional.
Que tal chicos, quisiera amplicar mi imagen a las otras celdas.
alguna sugerencia? lo he intentado ya de esta forma:** 1 / 1 / 1 / 3**; pero tampoco funciona, espero su ayuda
Hola, no sé si ya habrás solucionado, pero quitándole el width y el height que le estás dando a body__image debería solucionarse. Trata con este código:
Olvidé incluirlo en mi comentario, aquí tienes una guía muy completa de CSS Grid AQUÍ está en inglés pero tiene TODO lo que necesitas saber de CSS Grid :)
Nunca pares de aprender!
Si es por facilidad para codear estos dos casos, utilizaría Flexbox para el 1 y CSS Grid para el 2.
De todos modos tengo una duda: me da la sensación que CSS Grid consume más recursos (miren por ejemplo a los 3:00, cómo se tienen que graficar 8 Cells).
Alguien me puede responder esto? Es realmente necesario pensar en esto? Quizás la diferencia entre uno y otro no es nada.
Gracias!
aHola Edward ! Me encanta este análisis 🥳 Aunque podemos hacer cualquier componente con cualquier sistema de diseño (Flexbox o Grid), es importante que revisemos también, quién nos permite hacer las cosas mucho más fáciles y con menos líneas de código (si eso es lo que queremos). Al revisar varios componentes de las dos formas, nos podemos percatar de cuál usar por encima de cuál. Sin embargo, la propuesta es que usemos CSS Grid para todo lo que tenga que ver con estructura de layout (el diseño de una página completa) y Flexbox para componentes (precisamente por eso que mencionas).
Me cuentas si queda respondida tu pregunta !! 💚
Genial profe! Quedó clarísimo!
Gracias por responder!
Y genial el curso por cierto
Una pregunta: ¿Existe alguna manera en grid de que al momento de ir cambiando de resolución, los elementos en la grid como tarjetas, se vayan apilando o comportando como bloque? ¿Por qué al momento de ir haciendo más pequeña la resolución lo único que hace es escalar la grid completa y no logro acomodarla... o a fuerza tengo que usar breakpoints?
¡Hola!, así es, a fuerza tienes que usar breakpoints, si la grid se colocara automáticamente entonces perdería sentido porque probablemente no estaría acomodándose a como queremos, por eso es que únicamente se escala la grid.
Al usar breakpoints (media queries) tú puedes cambiar el comportamiento de esa grid, puedes cambiar el número de filas, columnas y la alineación de los elementos, ese es el poder de CSS Grid :D
Entonces usando media queries, tendría que pasar de un display grid a un display flex para que en mobile por ejemplo, no se muestre una grid, si no las tarjetas acomodadas hacia abajo vd?
Teff dijo que en el nav que mostro, usaría el mismo html, no es el mismo
En qué parte Fabián ? Podrías indicarnos ?
2:48
Se puede usar grid-template-areas sin indicar la cantidad de celdas que queremos? 😮
Hola !!! Te refieres a que le colocamos nombres en vez de decir explícitamente si son 3, 4 o 5 celdas como con grid-template-columns y grid-templates-row ? 🥰La cantidad de "palabras" él los toma como cantidad de filas o columnas que deseamos 🥰
Grid gap ¿para que erá?
Para generar un espacio entre las columnas y filas que hayas creado. Puedes darle la separación en píxeles que mejor le venga a tu diseño.
Gracias Francisco!
Yo en ambos casos usaria Flexbox :D
Yo usaría Flexbox para ambos casos. Dada la explicación de la profe, en estos dos casos se podría tomar la dirección de los elementos como unidimensional (en el primero solo se ubican en el row axis, en el segundo se podría hacer como hizo la profe, o se podría poner todo en un column axis y ponerle un justify-self: end a los botones de accion)