Escolar Documentos
Profissional Documentos
Cultura Documentos
1
FLEXBOX
Flexible Box Layout é um tipo de display para organizar layout, por ser unidimensional é geralmente
usado em layouts pequenos ou para organizar os conteúdos dentro do Grid Layout (tipo de display, que por
ser bidimensional é usado em layouts mais avançados e complexos); Mas voltando o foco ao flexbox, veremos
com se tornou prático e fácil, posicionar elementos dentro de seu site com este super display,
desenvolvedores mais antigos acostumados a criar seus layouts com tabelas, ou usando o position, float right,
float left, clear e depois uns hackezinhos para tentar corrigir erros que isto podia causar, sentem uma grande
diferença na hora de programar usando esta maravilha que é o flexbox, outra boa prática do uso de flexbox é
na criação de sites responsivos, pois com o flexbox isto mudou drasticamente, e com poucas linhas de código,
é possível ter um site mais dinâmico e totalmente responsivo, e/ou adaptável aos mais variados tamanhos de
telas disponíveis no mercado hoje.
O uso do flexbox facilita a vida de qualquer desenvolvedor que o domine, pois corrige erros de box
model, como padding, margin, e border, além do tamanho do elemento, e centralização vertical, o flexbox traz
a ideia de que os filhos (hierarquia) com elementos flexbox podem se posicionar em qualquer direção, e ter
dimensões flexíveis para se adaptar, você pode posicionar os elementos independente da sua posição na
estrutura do html, o bom ao use usar flexbox, é que por ainda ser uma especificação você use os prefixos,
-webkit-, -moz-, -ms-, e -o-.
Antes de se usar o flexbox, verifique seu funcionamento e uso nos navegadores através do site do Can i Use.
2
ENTENDA O FUNCIONAMENTO E A TERMINOLOGIA DO FLEXBOX
Flex Container: Você precisa definir um elemento para receber o flex-container com a propriedade
display, com os seguintes valores: o flex ou inline-flex, veja no exemplo abaixo como se comportam os filhos
da div id=pai, após o uso do display flex, note eles já se colocam alinhados na horizontal, porque este é o
padrão.
Flex-Items: São os elementos que serão filhos do flex Container. E recebem o alinhamento Cross Axis,
ou seja o alinhamento transversal, que neste caso é o eixo que ocorre verticalmente, de baixo para cima e
vice-versa.
Veja no exemplo abaixo com é fácil centralizar uma div usando o flexbox.
3
PROPRIEDADES GERAIS DO FLEXBOX
OBS: Se você determinar valor reverso como por exemplo flex-direction:row-reverse, os valores
mudam de posição e se você estiver alinhando no main axis então onde era flex-start passa a ser flex-end, e
assim sucessivamente, ou se estava alinhando no cross-axis onde era cross start passa a ser cross-end. E o
mesmo acontece se você usar flex-direction:column, o eixo principal se torna o cross axis e secundário main
axis, ou seja os eixos principais são os determinados em seu fluxo.
Bom para iniciarmos os nossos estudos nas propriedades flexbox, vamos dividi-lo em duas partes, onde
na primeira parte iremos estudar o flex-container e na outra os flex-items.
Flex-direction: column; ordena os flex-items em forma de coluna de cima para baixo, sentido cross start para
cross end.
Flex-direction: column-reverse; ordena os flex-items em forma de coluna no sentido de baixo para cima e
inverte os flex-items, sentido cross end para cross start com os flex-items invertidos.
Flex-wrap – Este controla se o flex-item será single-line ou multi-line, e a direçãodo cross-axis, que
determina em que direção novas linhas serão empilhadas. Na imagem abaixo o flex-direction:row está
definido.
5
Flex-wrap: no-wrap; Este é o valor padrão, se este estiver definido todos os flex-items são dispostos em linha,
um ao lado do outro, no sentido main start para o main end.
Flex-wrap: wrap; Com este é possível a criação de uma segunda linha caso a primeira não seja suficiente para
todos os flex-items, tornando o conteiner multi-line, no sentido main start para o main end, do cross start
para o cross end, e caso haja uma quebra de linha segue o mesmo sentido, ah não ser que outros atributos
sejam definidos como veremos mais a frente, mesclando propriedades.
Flex-wrap: wrap-reverse; Valor com a mesma função do wrap mas que inverte os flex-items. Ou seja continua
da esquerda para a direita, mas fica de baixo para cima.
Justify-Content: Alinha os flex-items através do eixo principal da linha atual do flex-container (se
flex-direction:row então main axis, horizontal, se flex-direction:column então cross axis), também exerce um
controle sobre o alinhamento dos itens quando eles se tornam multi-line. Eles ocupam o tamanho total do
flex-container desde baixo até em cima o (cross end até o cross start).
Na imagem abaixo o flex-direction:row está definido.
6
Justify-Content: flex-start; Alinha os flex-itens a partir da esquerda para a direita um ao lado do outro dentro
do flex-container, este é o valor padrão, sentido main start para o main end.
Justify-Content: flex-end; Alinha os flex-itens a partir da direita para a esquerda sem desordenar os flex-itens,
dentro do flex-container, sentido main end para o main start.
Justify-Content: center; alinha os flex-itens no centro do flex-container, sentido main center e restante em
direção ao main start e main end.
Justify-Content: space-between; distribui os flex-itens igualmente no main axis dispondo eles a partir dos
cantos direito esquerdo para o centro, sentido main start e main end em direção ao main center com
distâncias iguais.
Justify-Content: space-around; igual ao space-between com a diferença de que os flex-itens não são próximos
as laterais main start e main end, na verdade ele possui margem esquerda e direita.
7
Align-Items: alinha no eixo secundário ao determinado, ou seja, se flex-direction: row estiver
definido, então o secundário é o eixo cross axis, se o flex-direction:column estiver definido, então será o main
axis, da linha atual do flex-container. Align-items define o alinhamento padrão para todos os itens. E o
tamanho é relacionado ao tamanho do conteúdo. Na imagem abaixo o flex-direction:row está definido.
Align-items: center; Alinha os flex-items no centro do flex-container, itens no centro do cross center.
Alignt-items: stretch; Os flex-items preenchem toda a altura do flex-container, ou seja de baixo até em cima,
este é o valor padrão, posicionando-se à esquerda no main start em direção ao main end. O cross size (hight
porque é eixo secundário, se fosse column seria width) é relativo ao tamanho do flex-container.
8
Align-Content: Distribui as linhas de intens ao longo do eixo transversal (secundário), ou seja, se
definido flex-direction:row então alinha no cross axis, se definido flex-direction:column alinha no main axis
o Align-Content só apresenta algum efeito quando o container possui multi-line ou seja quando possui mais de
uma linha dentro do container. Basicamente quando definimos o flex-wrap: wrap.
Na imagem abaixo o flex-direction:row está definido.
9
Align-content: flex-start; As linhas são dispostas na parte superior do container no cross start.
Align-content: center; As linhas são agrupadas no centro do container no cross center, com total tamanho
entre as extremidades.
Align-content: stretch; Este é o valor padrão, neste as linhas se esticam par ocupar o tamaho total do
flex-container, o espaço livre é dividido igualmente aumentando o seu cross size (altura).
Align-content: space-between; Este “cola” as linhas nas extremidades, e são distribuídas uniformemente
dentro do flex-container no sentido cross-axis(vertical), ou seja elas são distribuídas de cima para baixo e
muito próximas das extremidades cross start e cross end.
Align-content: space-around; Este é parecido com o space-between com a diferença de que as extremidades
não ficam próximas, pois é como se as linhas criassem margens, e não chegam a se aproximar no cross end e
no cross start.
Flex-flow: É um atalho para definirmos duas propriedades ao mesmo tempo a flex-direction e flex-
wrap, que em conjunto definem os eixos principais e transversais do recipiente flex.
Flex-flow: row nowrap; Este é o padrão os itens são exibidos em uma única linha, da esquerda para a
direita. Sentido main start para o main end e cross start para o cross end.
Neste pode ser usado todos os valores flex-direction e flex-wrap disponíveis nesta ordem.
Order: Determina a ordem com que os itens são exibidos no container, os itens podem ser
reordenados sem a necessidade de alterar o html, os itens dentro do mesmo recipiente são apresentados em
ordem crescente de acordo com seus valores, elementos com o mesmo valor serão mostrados na ordem em
que aparecem no código fonte, o valor inicial de order é 0 (zero), é possível determinar um valor negativo.
Order destina-se apenas a afetar a ordem visual dos elementos e não a sua ordem lógica ou de tabulação,
order não deve ser usado em mídias não-visuais como a fala. Veja na imagem abaixo exemplos do uso de
order.
10
Align-self: Permite sobrescrever o alinhamento padrão align-items, para itens individuais na linha
atual, substituindo o valor.
Align-self: center; A caixa de margem do item flex esta centrada no eixo transversal se o tamanho cruzado do
item for maior que o do recipiente flex, ele irá transbordar igualmente em ambas as direções.
Align-self: baseline; Se o eixo inline do flex item é o mesmo do cross axis, este valor é idêntico a flex-start, do
contrário, participa do alinhamento pela linha-base (baseline), todos os items flex na linha são alinhados por
sua baseline e o item com a maior distância entre sua baseline e a extremidade de cross start é colocado na
linha de extremidade deste. O alinhamento de fallback para o first baseline é o start e o único para o last
baseline é o end.
Align-self: stretch; O conteúdo do flex-item é esticado do cross start até o cross end.
11
Flex-Grow: Especifica a ampliação do item em relação aos outros, desde que haja espaço
disponível, sendo que o valor inicial de flex-grow é 0 (zero), e não são aceitos números negativos. A
propriedade flex-grow é geralmente usada em conjunto com a flex-shrink e a flex-basis, tendo como
propriedade de declaração única, flex, até porque o valor que irá crescer é em relação ao flex-basis.
Flex-grow: <número?>, você deve especificar o valor em forma de número, que você deseje que o flex-item
cresça em relação aos outros.
12
13
Flex-Shrink: ao contrário do flex-grow esta propriedade determina o fator de encolhimento de um
flex-item, o valor a ser determinado é um número, o fator de encolhimento é determinado pela propriedade
flex-basis quando distribui espaço negativo ente os itens. Se a soma de Main Size e Cross Size de todos os
items for maior que o tamanho do flex container, é possível “encolher” estes flex items, desde que não
possuam valor 0 (zero) . Um flex-item com o a propriedade flex-shrink : 2, diminuirá o dobro do que item
flex-shrink : 1. O valor padrão de cada flex-item é flex-shrink : 1 (por este motivo que quando você declara
largura, ou altura aos flex-items, que se somados passam do tamanho do flex-container, eles estranhamente
não saltam pra fora). Para que o browser reconheça o valor determinado em flex-basis quando a soma dos
valores dos flex-items ultrapassarem o tamanho do container possa ser obedecido, você precisa declarar ao
flex-container, a propriedade flex-wrap: wrap, que determina ao flex-container, que se caso não haja espaço
disponível na mesma linha que os flex-items ocupem a linha abaixo, caso contrário eles ficarão exprimidos já
que esta é a determinação padrão dada a cada flex-item com o flex-shrink: 1, claro se caso você não alterar
este valor. A propriedade flex-shrink é usualmente usada em conjunto com o flex-grow e o flex-basis através
da propriedade de declaração única flex.
14
15
Flex-Basis: Esta propriedade trata dos mesmos valores de width e height do flex-item(se o
flex-direction:row estiver definido ele afeta na largura width, se o flex-direction:column estiver definido,
então afetará na altura hight.) e determina o tamanho inicial do item antes mesmo do espaço livre ser dividido
no container, flex-basis também determina o tamanho do box de conteúdo do container, salvo quando
box-sizing estiver sendo usado. A propriedade flex-basis é usualmente usada em conjunto com o flex-grow e o
flex-shrink através da propriedade de declaração única flex. Flex-basis pode receber valores numéricos, de
porcentagem de pixels ou auto que é o padrão,(ocupando todo espaço disponível em relação ao eixo principal
determinado, se flex-direction:row então de cima até embaixo, se column da ponta esquerda até a direita), o
flex-basis se sobrepõe a qualquer valor como width e height que você queira determinar.
Na imagem abaixo o flex-direction:row está definido.
Flex: Esta propriedade é a declaração única das propriedades flex-grow, flex-shrink, e flex-basis
(nesta ordem), flex é usado para determinar o main size do elemento, os valores iniciais padrão são: 0 1
auto (Itens sem ampliação, com redução para não extrapolarem o flex-container, e para seu tamanho ser em
relação ao seu conteúdo), as propriedades flex-grow e flex-shrink são opcionais e podem ser omitidas da
declaração do flex. Quando o valor de flex-grow é omitido este é como se fosse 1. Quando o valor de
flex-shrink é omitido este é como se fosse 1. Quando o valor de flex-basis é omitido, considera-se que seja 0%.
16
Além deste valor pré-determinado encontrado, considere outros três valores que seriam importantes
estudar como:
Flex: none; É o mesmo que flex: 0 0 auto, ou seja, os flex- itens não serão flexíveis, pois não crescerão (0),
não se diminuirão (0) e seu tamanho será em relação ao conteúdo (auto).
Flex: auto; È o mesmo que flex: 1 1 auto, ou seja, os flex-itens poderão crescer (1), poderão encolher (1), e seu
tamanho será de acordo com o conteúdo (auto).
Flex: N; É o mesmo que flex: N 0 0, ou seja, os flex-itens poderão crescer o N é um valor real que poderá ser
determinado (N), não poderá encolher (0), e o tamanho será zero, vazio (0).
https://codepen.io/justd/full/yydezN/
20
BIBLIOGRAFIA
http://desenvolvimentoparaweb.com/css/flexbox/#section_flex-direction acessado em 03/01/18
21