Alineación items
Tenemos una serie de propiedades dentro de flex para alinear correctamente nuestros ítems. La propiedad justify-content nos permite alinear los ítems en el eje principal (por defecto, eje horizontal), con la propiedad align-items alineamos los elementos en el eje secundario (por defecto el eje vertical), con la propiedad align-content podemos alinear el contenido del eje secundario entre líneas (sólo para contenedores multilínea). Vamos a ver los valores que puede tener cada una de estas propiedades.
justify-content
La propiedad justify-content nos sirve para posicionar los elementos del contenedor en una posición concreta a lo largo del eje principal con los valores: start(agrupa los ítems al principio del eje), end(agrupa los ítems al final del eje), center(agrupa los ítems al centro del eje principal), space-between(Los items flex se distribuyen uniformemente sobre la línea.), space-around(Los items flex se alinean uniformemente de tal manera que el espacio entre dos items adyacentes es el mismo), space-evenly(funciona parecido a space-around pero con un espacio igual alrededor de ellos). Ver ejemplo aquí.
align-items
La propiedad align-items se encarga de alinear los ítems en el eje secundario, cuando estamos trabajando sin wrap. Los valores que puede tomar esta propiedad son: start(alinea los ítems al principio del eje secundario), end(alinea los ítems al final del eje secundario), center(alinea los ítems al centro del eje secundario), strech(alinea los ítems estirándolos con el objetivo que cubran desde el principio hasta el final del contenedor), baseline(alinea los ítems según la base del contenido de los ítems del contenedor). Ver ejemplo aquí.
align-content
La propiedad align-content nos va a servir cuando estemos trabajando con contenedores multilínea (flex-wrap) para alinear cada una de las líneas del contenedor. Los valores que puede tener esta propiedad son: start(agrupa los ítems al principio del eje principal), end(agrupa los ítems al final del eje principal), center(agrupa los ítems al centro del eje principal), space-between(distribuye los ítems desde el principio al final), space-around(distribuye los ítems dejando el mismo espacio a los lados de cada uno), stretch(estira los ítems haciendo que ocupen de forma equitativa el espacio del contenedor). Ver ejemplo aquí. Es importante tener en cuenta que con esta propiedad estamos modificando la disposición vertical (eje principal), salvo que hayamos usado la propiedad flex-direction: column; donde el eje principal pasaría a ser el horizontal.
align-self
La propiedad align-self funciona igual que align-items, pero se utiliza sobre un hijo y no sobre el elemento padre(container). Con esta propiedad podemos cambiar el comportamiento de align-items y sobreescribirlo con comportamientos específicos para ítems concretos que no queremos que actúen igual, los valores que puede tener son: start(alinea los ítems al principio del eje secundario), end(alinea los ítems al final del eje secundario), center(alinea los ítems al centro del eje secundario), strech(alinea los ítems estirándolos con el objetivo que cubran desde el principio hasta el final del contenedor), baseline(alinea los ítems según la base del contenido de los ítems del contenedor) y auto(hereda el valor de align-items del padre, que si no se ha definido por defecto será strech). Ver ejemplo aquí.
place-content
Podemos establecer las propiedades align-content y justify-content con la propiedad place-content donde el primer parámetro es align-content y el segundo justify-content. En el caso de haber sólo un parámetro entonces se aplicará el mismo en ambas propiedades. Ver ejemplo aquí.
order
Dentro del apartado de las alineaciones, tenemos order, propiedad mediante la cual podemos establecer el orden de los elementos con números. Por defecto, los hijos de un contenedor tendrán un valor de 0. En el caso de indicar un valor la propiedad order, entonces los ítems se irán colocando según el valor dado del más pequeño (incluido negativos) al más grande. Ver ejemplo aquí.