Flexbox, CSS
Flexbox, CSS
espacios entre ítems en un contenedor, incluso cuando las dimensiones de esos ítems son
desconocidas y/o dinámicas (en virtud de eso el término "flex").
Qué es el Flexbox
Durante mucho tiempo, las únicas herramientas disponibles para crear diseños CSS y
posicionar elementos con buena compatibilidad entre browsers eran float y position. Sin
embargo, estas herramientas tienen algunas limitaciones muy frustrantes, especialmente
cuando se trata de responsividad. Algunas tareas que consideramos básicas en un diseño,
como centrar verticalmente un elemento secundario en relación con un elemento principal
o hacer que los elementos secundarios ocupen la misma cantidad de espacio, o que las
columnas tengan el mismo tamaño independientemente de la cantidad de contenido
interno, fueron imposibles. o muy difícil de manejar con floats o position, al menos de
forma práctica y flexible. La herramienta Flexbox (de Flexible Box) fue creada para hacer
estas tareas más sencillas y funcionales: los secundarios de un elemento con Flexbox se
pueden posicionar en cualquier dirección y pueden tener dimensiones flexibles para
adaptarse.
Elementos
Flexbox es un módulo completo y no una propiedad única; algunos de ellos deben
declararse en el contenedor (el elemento principal, que llamamos de flex container),
mientras que otros deben declararse en los elementos secundarios (el flex ítems). Si el
diseño "estándar" se basa en las direcciones block e inline, el diseño Flex se basa en
direcciones de "flex flow". A continuación, se muestra un diagrama de la especificación,
que explica la idea central detrás del diseño Flex.
<div class="flex-container">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
.flex-container {
display: flex;
Display
Esta propiedad define un flex container; inline o block dependiendo de los valores
pasados. Coloca todos los elementos secundarios directos en un contexto Flex.
.container {
Flex-direction
Establece el eje principal, definiendo así la dirección en la que los flex ítems están
alineados en el flex container. Flexbox es (con la excepción de un wrapping opcional)
un concepto de diseño unidireccional. Piensa en los flex ítems inicialmente posicionaids
o en líneas horizontales o en columnas verticales.
.flex-container {
flex-wrap
Por estándar, los flex ítems todos intentarán encajarse en una sola línea. Con esta
propiedad puedes modificar este comportamiento y permitir que los ítems pasen a la
siguiente línea según sea necesario.
.flex-container {
flex-flow
o La propiedad flex-flow es una propiedad shorthand (una misma declaración incluye
varios valores relacionados con más de una propiedad) que incluye flex-direction y
flex-wrap. Determina cuáles serán los ejes principal y transversal del contenedor. El
valor estándar es row nowrap.
Justify-content
Esta propiedad define la alineación de los ítems a lo largo del eje principal. Ayuda a
distribuir el espacio libre que queda en el contenedor, ya sea que todos los flex ítems
de una línea sean inflexibles o flexibles, pero ya hayan alcanzado su tamaño máximo.
También ejerce cierto control sobre la alineación de los ítems cuando sobrepasan el
límite de la línea.
.flex-container {
o Flex-end: los ítems se alinean a lo largo del borde final (end) de acuerdo con la flex-
direction del contenedor.
o start: los ítems se alinean a lo largo del borde de inicio de la dirección del writing-
mode (modo de escritura).
o end: los ítems se alinean a lo largo del borde final de la dirección del writing-mode
(modo de escritura).
o left: los ítems están alineados a lo largo del borde izquierdo del contenedor, a
menos que esto no tenga sentido con el flex-direction que se está utilizando. En
este caso, se comporta como start.
o right: los ítems están alineados a lo largo del borde derecho del contenedor, a
menos que esto no tenga sentido con el flex-direction que se está utilizando. En
este caso, se comporta como start.
Nota: el soporte dado por los navegadores para estos valores es difuso. Por ejemplo,
space-between no tiene soporte en ninguna versión de Edge (hasta la elaboración de
este tutorial) y start / end / left / right aún no se han implementado en Chrome. Para
obtener tablas detalladas, consulte MDN. Los valores más seguros son flex-start, flex-
end y center.
También hay dos palabras clave adicionales que puedes usar junto con estos
valores: safe y unsafe. Safe asegura que, independiente de cómo hagas este tipo de
posicionamiento, no sea posible "empujar" un elemento y hacer con que sea
renderizado hacia afuera de la pantalla (por ejemplo, sobre el tope) de una manera que
haga con que el contenido sea imposible de mover con el desplazamiento de la pantalla
(el CSS llama a esto de "pérdida de datos").
Align-ítems
Establece el comportamiento estándar de cómo flex ítems están alineados según el
eje transversal (cross axis). En cierto modo, funciona de manera similar al justify-
content, pero en el eje transversal (perpendicular al eje principal).
.flex-container {
Los modificadores safe y unsafe se puede usar junto con todas estas palabras clave
(por favor verifique el soporte de cada navegador) y sirven para evitar cualquier
alineación de elementos que haga con que el contenido sea inaccesible (por ejemplo,
fuera de la pantalla).
align-content
Organiza las líneas dentro de un flex container cuando hay espacio adicional en el eje
transversal, similar a cómo justify-content alinea ítems individuales dentro del eje
principal.
Importante: Esta propiedad no tiene efecto cuando solo hay una línea de flex ítems en
el contenedor.
.flex-container {
}
o flex-start / start: ítems alineados con el inicio del contenedor. El valor (con mayor
soporte de los navegadores) flex-start se guía por la flex-direction, mientras que
start se guía por la dirección del writing-mode.
Los modificadores safe y unsafe se puede usar junto con todas estas palabras clave
(por favor verifique el soporte de cada navegador) y sirven para evitar cualquier
alineación de elementos que haga con que el contenido sea inaccesible (por ejemplo,
fuera de la pantalla).
1
2
3
Por estándar los flex ítems, se organizan en la pantalla en orden de código. Pero la
propiedad order controla el orden en que aparecen en el contenedor.
.flex-item {
Flex-grow
Define la habilidad de un flex ítem de crecer, según el caso. El valor de esta propiedad
es un valor numérico sin indicación de unidad, que se utiliza para calcular la proporción.
Este valor dicta la cantidad de espacio disponible en el contenedor que ocupará el ítem.
flex-shrink
Establece la habilidad de un flex ítem para contraerse, según el caso.
.flex-item {
flex-shrink: <número>; */\* el valor estándar es 0 \*/* }
flex-basis
Establece el tamaño estándar de un elemento antes de que se distribuya el espacio
remanente del contenedor. Puede ser un largo (por ejemplo, 20%, 5rem, etc.) o una
palabra clave. La palabra clave auto significa "observe mis propiedades de altura o
ancho" (lo que era hecho por la palabra clave t main-size, que fue depreciada). La
palabra clave content significa "establezca el tamaño según el contenido interno del
ítem"; esta palabra clave aún no tiene mucho soporte, por lo que no es fácil de probar,
al igual que sus relacionadas: max-content, min-content y fit-content.
.flex-item {
.item {
align-self
Permite que la alineación estándar (o lo que esté definido por align-items) se
sobrescriba para ítems individuales.
Por favor consulte la explicación de la propiedad align-items para entender cuáles son
los posibles valores.
.item {
¡Importante!