Flexbox - CSS layout
O CSS flexbox (Flexible Box Layout Module) é um módulo de layout hierárquico (pai-filho). Por padrão, consideramos a classe container o elemento pai e a classe item os elementos filhos. Os objetos da classe item podem ser organizadas em linhas ou colunas, o espaço entre os filhos podem ser distribuído de várias maneiras. O emprego do flexbox é bastante versátil para a criação de layouts
Para utilizar esta técnica basta declarar a propriedade display como: display: flex ou display: inline-flex
A imagem abaixo apresenta um exemplo desta relação hierárquica seguido de seu código HTML. Note que a classe container engloba a classe item. Cada elemento filho possui duas classes, a primeira comum a todos a segunda particular a cada elemento

Propriedades do Flex container
As propriedades que serão descritas abaixo referem-se ao comportamento da entidade pai (container)
flex-direction
Valor: | row | row-reverse | column | column-reverse |
---|---|
Valor inicial: | row |
Aplicado a: | Flex containers |
Herdado: | Não |
Porcentagem: | Não aplicável |
Animável: | Não |
A propriedade flex-direction define a direção que em que os itens da entidade filho serão dispostos. Em colunas (do topo para a base ou da base para o topo) ou em linhas (da direita para a esquerda ou da esquerda para a direita)
A figura abaixo apresenta um exemplo desta aplicação, caso a propriedade flex-direction não seja atribuída, o padrão é a disposição row

Abaixo um código simplificado para testar a propriedade
flex-wrap
Valor: | nowrap | wrap | wrap-reverse |
---|---|
Valor inicial: | nowrap |
Aplicado a: | Flex containers |
Herdado: | Não |
Porcentagem: | Não aplicável |
Animável: | Não |
Por padrão, não importa quantos itens a entidade filho possua, todos os dispostos em uma única linha. Caso seja desejável uma quebra de linha, a propriedade flex-wrap pode ser implementada.
Esta propriedade é bastante explorada para oferecer uma maior responsividade a página, este tópico será discutido a frente.
O flex-wrap pode ser utilizado em direcionamento em linha (flex-direction: row), respondendo ao comprimento do container, ou em coluna (flex-direction: column), respondendo a altura do container
Abaixo em exemplo do emprego da propriedade:

Ver código completo (redimensione a página para ver o efeito)
Exemplo do flew-wrap para direção coluna (altura do container fixada)
Abaixo um código simplificado para testar a propriedade
flex-flow
Valor: | < flex-direction || flex-wrap > |
---|---|
Valor inicial: | row nowrap |
Aplicado a: | Flex containers |
Herdado: | Não |
Porcentagem: | Não aplicável |
Animável: | Não |
Em alguns casos, duas ou mais propriedades podem ser agrupadas com uma única declaração, como é o caso do flex-flow. Esta propriedade agrupa o flex-direction e o flex-wrap
Abaixo um código simplificado para testar esta propriedade.
justify-content
Valor: | flex-start | flex-end | center | space-between | space-around |
---|---|
Valor inicial: | flex-start |
Aplicado a: | Flex containers |
Herdado: | Não |
Porcentagem: | Não aplicável |
Animável: | Não |
A propriedade justify-content é bastante usual na técnica flex-container, é responsável pela distribuição dos objetos sob a hierarquia do container.
A referência para a distribuição é definida pelo flex-direction, ou seja, para um flex-direction:row a distribuição será horizontal, para um flex-direction:column a distribuição será na vertical.
Abaixo um exemplo do emprego da propriedade. Para uma melhor visulaização dos pontos iniciais e finais das distribuições, foram removidas as margens dos primeiros e últimos elementos - margem esquerda e margem direita respectivamente

Abaixo em exemplo do emprego desta mesma propriedade, mas considerando uma orientação vertical (flex-direction: column) Assim como no exemplo anterior, as margens dos primeiros e últimos itens foram removidas, neste caso as margens superiores e inferiores respectivamente
Note que para visualizar algum efeito no valor space-between, é necessário que a dimensão do container seja superior a soma das dimensões dos itens, neste caso em particular, o valor não foi observado

A figura abaixo trás o mesmo exemplo visualizado anteriormente, entretanto com a altura do container adequada.
Para a elaboração dos exemplos que trazem containers em colunas, foi necessário incorporar um container em um nível hierárquico superior aos demais containers. Esta abordagem pode ser implementada sempre que necessário. Lembrando que o flex-directions possui dois níveis hierárquicos, desta forma, quando um container engloba outros containers, estes são considerados filhos do primeiro.

Abaixo dois códigos simplificados para testar a propriedade.
align-items
Valor: | flex-start | flex-end | center | baseline | stretch |
---|---|
Valor inicial: | stretch |
Aplicado a: | Flex containers |
Herdado: | Não |
Porcentagem: | Não aplicável |
Animável: | Não |
A propriedade align-items é semelhante a propriedade justify-content, com a diferença de organizar os itens perpendicularmente a orientação estabelecida pelo flex-direction
Abaixo um exemplo do emprego da propriedade. Para visualização do efeito do valor baseline, as tamanho das fontes foram alterados. Esta propriedade se aplica da mesma forma com a declaração da flex-direction:column

Abaixo o código simplificado para testar a propriedade.
Propriedades do Flex item
As propriedades que serão descritas abaixo referem-se ao comportamento da entidade filho (item), ou seja todos os blocos estruturais englobados pelo container.
O exemplo abaixo exemplifica esta relação hierárquica considerando filhos de diferentes blocos HTML.
Como apresentado na figura e em seguida no respectivo código, os diferentes elementos estruturais herdaram a entidade filho do container. Notem que todos os elementos estruturais na segunda linha hierárquica respondem as disposições definidas no container, neste caso o justify-content: space-around; e align-items:center;
