La propiedad Flexible Box, o flexbox, de CSS3 es un modo de diseño que permite colocar los elementos de una página para que se comporten de forma predecible cuando el diseño de la página debe acomodarse a diferentes tamaños de pantalla y diferentes dispositivos. Para muchas aplicaciones, el modelo "caja flexible" produce una mejora sobre el modelo "bloque" porque no utiliza la propiedad float, ni hace que los márgenes del contenedor flexible interfieran con los márgenes de sus contenidos.
Muchos diseñadores verán que el modelo "caja flexible" es más sencillo de utilizar. Los elementos "hijos" de una "caja flexible" pueden colocarse en cualquier dirección y pueden tener dimensiones flexibles para adapterse al espacio visible. Posicionar los elementos "hijos" es por tanto mucho más sencillo, y los diseños complejos pueden hacerse más fácilmente y con código más limpio, ya que el orden de visualización de los elementos es independiente del orden que estos tengan en el código fuente. Esta independencia afecta intencionadamente únicamente a la representación visual, dejando el orden de locución y navegación a lo que diga el código fuente.
Lo que caracteriza un diseño flexible es su habilidad para alterar el ancho y alto de sus elementos para ajustarse lo mejor posible al espacio disponible en cualquier dispositivo. Un contenedor flexible expande sus elementos para rellenar el espacio libre, o los comprime para evitar que rebasen el área prevista.
El algoritmo del modelo de diseño de "cajas flexibles" no parte de niguna dirección predeterminada, al contrario de lo que ocurre con el modelo "bloque", que asume una disposición vertical de los elementos, o lo que pasa con el modelo "en línea", que asume una disposición horizontal. Mientras que el modelo "bloque" funciona bien para póginas, se queda muy corto cuando se trata de aplicaciones en las que hay que tener en cuenta el cambio de orientación del dispositivo o los cambios de tamaño realizados por los gestos del usuario. El modelo de "cajas flexibles" es más apropiado para diseños de pequeña escala, mientras que el (emergente) modelo "rejilla" es adecuado para diseños de gran escala. Ambos son parte del gran esfuerzo que el "CSS Working Group" está realizando para proveer de mayor inteorperabilidad a las aplicaciones web con todo tipo de usuarios, distintos modos de escritura, y otras necesidades de flexibilidad.
Estas son algunas de las propiedades principales de flexbox para el elementos padre:
ltr
de derecha a izquierda en rtl
ltr;
de izquierda a derecha en rtl
row
arriba a abajorow-reverse
pero de abajo hacia arribaflex-directiony
flex-wrappropiedades
, que juntas definen los ejes principal y transversal del contenedor flexible.
Por defecto es row nowrap.
justify-content
alinea los elementos individuales dentro del eje principal.
Esta propiedad no tiene efecto cuando solo hay una línea de elementos flexibles.
Estas son algunas de las propiedades principales de flexbox para el elementos hijo:
flex-grow
establecido en 1, el espacio restante en el contenedor se distribuirá por igual a todos los niños.
Si uno de los niños tiene un valor de 2, el espacio restante ocuparía el doble de espacio que los demás (o lo intentará, al menos).auto
palabra clave significa "ver mi propiedad de ancho o alto" (que fue temporalmente hecha por la main-size
palabra clave hasta que se desaprovechó).
La content
palabra significa "tamaño se basa en el contenido del elemento" - esta palabra clave no está bien apoyado, sin embargo, por lo que es difícil de probar y más difícil
saber lo que sus hermanos max-content
, min-content
y fit-content
lo hacen.
Si se establece en 0, el espacio adicional alrededor del contenido no se toma en cuenta. Si se establece en auto
, el espacio adicional se distribuye en función de su flex-grow
valor.flex-grow
, flex-shrinky
flex-basis
combinada. El segundo y tercer parámetro ( flex-shrinky
flex-basis
) son opcionales.
Por defecto es 0 1 auto.
Se recomienda que use esta propiedad abreviada en lugar de establecer las propiedades individuales. La mano corta establece los otros valores inteligentemente.align-items
) se anule para elementos Flex individuales.
enga en cuenta que float
, clear
y vertical-align
no tienen ningún efecto sobre un elemento flexible.Flex-grow:
#cont3 {Justify-content:
#cont2 {