CSS flexionam os recuos entre os elementos. Alinhando blocos com CSS usando contêiner flex

CSS Flexbox. (Módulo de layout de caixa flexível) - O módulo do layout de contêiner flexível é um método de colocação de elementos, a base do eixo é baseada em.

Flexbox consiste em fora recipiente Flex (Recipiente Flex) e itens flexíveis (itens flexíveis). Elementos flexíveis podem ser incorporados na string ou coluna, e o espaço livre remanescente é distribuído entre eles de várias maneiras.

O módulo Flexbox permite que você resolva as seguintes tarefas:

  • Coloque os elementos em uma das quatro direções: da esquerda para a direita, direita esquerda, de cima para baixo ou de baixo para cima.
  • Substituir o procedimento para exibir elementos.
  • Determinar automaticamente as dimensões dos itens para que eles se encaixem no espaço acessível.
  • Resolva o problema com centros horizontais e verticais.
  • Transfira os elementos dentro do recipiente sem permitir o seu estouro.
  • Criar colunas da mesma altura.
  • Criar pressionado para a parte inferior da página.

FlexBox resolve tarefas específicas - a criação de layouts unidimensionais, por exemplo, o painel de navegação, já que os elementos flex podem ser colocados apenas em um dos eixos.

Lista de problemas atuais das soluções do módulo e do navegador para eles que você pode ler no artigo da Philip Walton.

O que é flexbox.

Navegadores de suporte

Ie: 11.0, 10.0 -ms-
Raposa de fogo: 28.0, 18.0 -moz-
Cromada: 29.0, 21.0 -Webkit-
Safári: 6.1 -Webkit-
Ópera: 12.1 -Webkit.
safari do iOS: 7,0 -Webkit-
Opera Mini: 8
Navegador Android: 4.4, 4.1 -Webkit-
Chrome para Android: 44

1. Conceitos básicos

FIG. 1. Modelo Flexbox.

Para descrever o módulo Flexbox, um conjunto específico de termos é usado. O valor do fluxo flexível e o modo de gravação determinam a correspondência desses termos para as instruções físicas: topo / direita / inferior / esquerda, eixos: vertical / horizontal e tamanho: largura / altura.

Eixo principal. - O eixo ao longo dos quais os elementos flexões são estabelecidos. Estende principalmente medindo.

Início principal e fim principal - Linhas que definem o lado inicial e final do recipiente flexível, em relação aos quais os elementos flexíveis são estabelecidos (começando com o início principal para a extremidade principal).

Tamanho principal) - A largura ou a altura do contêiner flexível ou elementos flexionais, dependendo do fato de que eles são medidos principalmente, determinam o tamanho principal do contêiner flexível ou do elemento flex.

Eixo cruzado. - Axis perpendicular ao eixo principal. Estende-se na dimensão transversal.

Cross Start e Fim transversal - Linhas que definem o lado inicial e final do eixo transversal em relação aos quais os elementos flexíveis são estabelecidos.

Tamanho cruzado) - A largura ou a altura do recipiente flexível ou elementos flexíveis, dependendo do que está na dimensão transversal, é o tamanho transversal.


FIG. 2. Modo de linha e coluna

2. Flex-Recipiente

Recipiente Flex Define um novo contexto de formatação flexível para o seu conteúdo. O recipiente flexível não é um contêiner de bloco, portanto, essas propriedades CSS, como float, clara, alinhamento vertical, não funcionam para elementos filhos. Além disso, o contêiner flexível não afeta as propriedades da coluna *, criando alto-falantes no texto e pseudo-elementos :: primeira linha e :: primeira letra.

O modelo de marcação Flexbox está associado a um determinado valor da propriedade CSS da exibição do elemento HTML pai contendo blocos de sub-eleitorais dentro de si. Para controlar os elementos usando este modelo, você precisa definir a propriedade de exibição da seguinte maneira:

Recipiente Flex (/ * gera um bloco de contêiner flex * / display: -webkit-flex; display: flex;) .flex-contenter (/ * gera um nível de cadeia de contêiner flex * / display: -webkit-inline-flex Display: Inline-Flex;)

Depois de instalar esses valores de propriedades, cada elemento filho se torna automaticamente um elemento flexível, configurando em uma linha (ao longo do eixo principal). Neste caso, bloco e elementos minúsculos se comportam igualmente, isto é. A largura dos blocos é igual à largura de seus conteúdos, levando em conta os campos internos e os quadros do elemento.


FIG. 3. Elementos de alinhamento no modelo Flexbox

Se o bloco pai contiver texto ou imagens sem invasões, eles se tornarem elementos flexíveis anônimos. O texto está nivelando sobre a borda superior do bloco de contêineres, e a altura da imagem se torna igual à altura do bloco, isto é. É deformado.

3. Flex-Elements

Flex-Elements - blocos representando o conteúdo do recipiente flexível no fluxo. O contêiner Flex estabelece um novo contexto de formatação para o seu conteúdo, o que provoca os seguintes recursos:

  • Para elementos Flex, seu valor da propriedade de exibição é bloqueado. Valor de exibição: bloco inline; e exibir: célula de mesa; calculado em exibição: bloco; .
  • O espaço vazio entre os elementos desaparece: não se torna seu próprio elemento flexível, mesmo que o texto inter-elemento seja envolto em um elemento flexível anônimo. Para o conteúdo de um elemento Anonymous Flex, é impossível definir seus próprios estilos, mas eles as herdarão (por exemplo, parâmetros de fonte) do contêiner flexível.
  • O elemento flexível absolutamente posicionado não participa no layout de layout.
  • Campos de margem Os elementos flexos adjacentes não estão desmoronados.
  • Os valores percentuais de margem e preenchimento são calculados a partir do tamanho interno do bloco que os contêm.
  • margem: Auto; Expande, absorvendo espaço adicional na medição apropriada. Eles podem ser usados \u200b\u200bpara alinhar ou espalhar elementos flexivos adjacentes.
  • O tamanho mínimo automático de elementos Flex por padrão é o tamanho mínimo de seu conteúdo, isto é, largura mínima: Auto; . Para rolagem de contêineres, o tamanho mínimo automático é geralmente zero.

4. Flex-Elementos e Orientação

O conteúdo do recipiente flexível pode ser decomposto em qualquer direção e em qualquer ordem (reordenando os elementos Flex no interior do contêiner afeta apenas a renderização visual).

4.1. Direção do eixo principal: flex-direção

A propriedade pertence ao recipiente flexível. Gerencia a direção do eixo principal, ao longo dos quais os elementos Flex são empilhados, de acordo com o modo de gravação atual. Não herdado.

flex-direção.
Valores:
Fileira O valor padrão da esquerda para a direita (em RTL para a esquerda direita). Os elementos Flex são estabelecidos na string. O início (inicialização principal) e as direções do final (main-end) do eixo principal correspondem ao início (Inline-Start) e uma extremidade (end-end) do eixo inline (eixo inline).
Linha-reversa. Direção à esquerda direita (em RTL da esquerda para a direita). Os elementos flex são estabelecidos na string em relação à borda direita do recipiente (no RTL - para a esquerda).
coluna. Direção de cima para baixo. Os elementos Flex são estabelecidos na coluna.
Coluna-reversa. Coluna com elementos em ordem inversa, de baixo para cima.
inicial
herdar.

FIG. 4. Propriedade de direção flexível para idiomas à esquerda para a direita

Sintaxe

Flex-Recipiente (Display: -Webkit-Flex; -webkit-flex-direção: linha-reversa; display: flex; flex-direção: linha-reversa;)

4.2. Gerenciando contêiner multi-flex: Flex-Wrap

A propriedade determina se o contêiner flexível será de linha única ou multi-line e também define a direção do eixo transversal, que determina a direção de estabelecer novas linhas de contêiner flex.

Por padrão, os elementos flex são empilhados em uma linha ao longo do eixo principal. Quando estouro, eles irão além do quadro de limite do recipiente flexível. A propriedade não é herdada.


FIG. 5. Gerenciando multi-stream usando as propriedades do Wrap Flex para LTR-Language

Sintaxe

Recipiente Flex (Display: -Webkit-Flex; -Webkit-Flex-wrap: wrap; display: flex; flex-wrap: wrap;)

4.3. Resumo da direção e multiplay: Flex-Flow

A propriedade permite determinar as instruções dos eixos principais e transversais, bem como a possibilidade de transferir elementos Flex, se necessário para várias linhas. É uma gravação abreviada das propriedades flex-direção e flex-wrap. O valor padrão é Flex-Flow: Row Nowrap; . A propriedade não é herdada.

Sintaxe

Container Flex (Display: -Webkit-Flex; -Webkit-Flex-FLOOD: Envoltório de linha; Display: Flex; FLOW FLOW: Row Wrap;)

4.4. Ordem de exibição do elemento flex: ordem

A propriedade determina a ordem em que os elementos flex são exibidos e localizados dentro do contêiner flexível. Aplica-se a elementos flexíveis. A propriedade não é herdada.

Inicialmente, todos os elementos Flex têm ordem: 0; . Ao especificar o valor de -1 para o elemento, ele se move para o início do tempo, valor 1 - para o final. Se vários elementos Flex têm o mesmo valor do pedido, eles serão exibidos de acordo com a ordem original.

Sintaxe

Container Flex (Display: -Webkit-Flex; Display: Flex;) .flex-item (-Webkit-Order: 1; ordem: 1;)
FIG. 6. Ordem de exibição de elementos flex

5. Elementos flexíveis flexíveis

O aspecto determinante de um layout flexível é a capacidade de "dobrar" elementos flexos, alterando sua largura / altura (dependendo do tamanho do eixo principal) para preencher o espaço disponível na dimensão principal. Isso é feito usando a propriedade Flex. O recipiente flexível distribui o espaço livre entre seus elementos filhos (proporcionalmente ao seu coeficiente de crescimento flexível) para preencher o contêiner ou comprime-os (proporcional ao coeficiente de flex-shrink) para evitar o estouro.

O elemento Flex será completamente "inflexível" se seus valores Flex-Cresm e Flex-Shrink são zero e "flexível" caso contrário.

5.1. Conjunto de tamanhos flexíveis com uma propriedade: flex

A propriedade é um registro abreviado das propriedades de base flex-crescer, flex-shrink e flex. Valor padrão: Flex: 0 1 Auto; . Você pode especificar uma das três propriedades. A propriedade não é herdada.

Sintaxe

Flex-contêiner (exibição: -Webkit-flex; display: flex;) ..flex-item (-webkit-flex: 3 1 100px; -ms-flex: 3 1 100px; flex: 3 1 100px;)

5.2. Coeficiente de Crescimento: Flex-Crescer

A propriedade determina o coeficiente de crescimento de um elemento flexível em relação a outros elementos flexíveis no recipiente flexível durante a distribuição de espaço livre positivo. Se a soma dos valores dos elementos flexíveis Flex na string for menor que 1, ocupam menos de 100% do espaço livre. A propriedade não é herdada.


FIG. 7. Gestão do espaço livre no painel de navegação usando flex-crescer

Sintaxe

Container Flex (Display: -Webkit-Flex; Display: flex;) .flex-item (-Webkit-Flex-Flex-Flex: 3; Flex-Crescer: 3;)

5.3. Relação de compressão: flex-shrink

A propriedade indica o coeficiente de compressão do elemento Flex em relação a outros elementos flexíveis durante a distribuição de espaço livre negativo. É multiplicado pelo tamanho básico da base flexível. O espaço negativo é distribuído proporcionalmente ao tempo como o elemento pode ser trenós, portanto, por exemplo, um elemento flexível pequeno não diminuirá para zero até que o elemento Flex seja visivelmente reduzido. tamanho maior. A propriedade não é herdada.


FIG. 8. O estreitamento dos elementos flexionais na string

Sintaxe

Flex-Recipiente (Display: -Webkit-Flex; Display: flex;) .flex-item (-Webkit-flex-flex-shrink: 3; flex-shrink: 3;)

5.4. Tamanho Básico: Flex-Base

A propriedade define o tamanho principal inicial do elemento Flex antes da distribuição do espaço livre de acordo com os coeficientes de flexibilidade. Para todos os valores, exceto para automóvel e conteúdo, o tamanho flexível básico é definido, bem como largura nos modos de gravação horizontais. Os valores percentuais são determinados em relação ao tamanho do contêiner flexível, e se o tamanho não for especificado, o valor usado para a base flexível é o tamanho de seu conteúdo. Não herdado.

Sintaxe

Container Flex (Display: -Webkit-Flex; Display: Flex;) ..flex-item (-webkit-flex-flex-base: 100px; flex-base: 100px;)

6. Alinhamento

6.1. Alinhamento no eixo principal: Conteúdo da Justificação

A propriedade alinha os elementos flexos ao longo do eixo principal do recipiente flexível, distribuindo o espaço livre, desocupado por elementos Flex. Quando o item é convertido em um contêiner flex, os elementos padrão do flex são agrupados (se o campo Margin não for especificado). As lacunas são adicionadas após o cálculo dos valores da margem e do Flex-Crement. Se algum elemento tiver um valor diferente de zero de Flex-Crescer ou Margem: Auto; A propriedade não terá influência. A propriedade não é herdada.

Valores:
Flex-Start. O valor padrão. Os elementos flex são estabelecidos na direção proveniente da linha inicial do contêiner flex.
Flex-End. Os elementos flex são estabelecidos na direção proveniente da linha final do contêiner flexível.
Centro Os elementos Flex estão alinhados no centro do recipiente flexível.
Espaço entre. Os elementos Flex são distribuídos uniformemente sobre a linha. O primeiro elemento FLEX é colocado na borda da linha inicial, o último elemento Flex é lavar com a borda da linha final, e os elementos flex restantes na linha são distribuídos para que a distância entre dois elementos adjacentes seja o mesmo. Se o espaço livre remanescente for negativo ou na cadeia, há apenas um elemento Flex, esse valor é idêntico ao parâmetro Flex-Start.
Espaço-ao redor. Os elementos flex nas linhas são distribuídos para que a distância entre dois elementos flexos adjacentes seja a mesma e a distância entre os primeiros / últimos elementos Flex e as bordas do contêiner flexível variasse da distância entre os elementos Flex.
inicial Define o valor da propriedade padrão.
herdar. Herda o valor da propriedade do elemento pai.

FIG. 9. Alinhamento de elementos e distribuição de espaço livre usando as propriedades de conteúdo de justificação

Sintaxe

Container Flex (Display: -Webkit-Flex; -Webkit-Justify-Conteúdo: Flex-Start; Display: Flex; Justify-Conteúdo: Flex-Start;)

6.2. Alinhe o eixo transversal: alinhados e alinhar-si

Os elementos Flex podem ser alinhados no eixo transversal da linha atual do contêiner flexível. Os itens de alinhamento define o alinhamento para todos os elementos de contêiner de flex, incluindo elementos flexíveis anônimos. Alinhar-Self permite que você substitua esse alinhamento para elementos flexíveis individuais. Se algum dos elementos transversais da margem Flex é automático, o alinhamento não tem efeito.

6.2.1. Alinhar-itens.

A propriedade alinha os elementos flexionais, incluindo elementos flexíveis anônimos no eixo transversal. Não herdado.

Valores:
Flex-Start.
Flex-End.
Centro
Linha de base As linhas básicas de todos os elementos flexíveis envolvidos no alinhamento coincidem.
Alongamento.
inicial Define o valor da propriedade padrão.
herdar. Herda o valor da propriedade do elemento pai.
FIG. 10. Alinhamento de elementos em um recipiente vertical

Sintaxe

Flex-Recipiente (Display: -Webkit-Flex; -WebKit-Align-Itens: Flex-Start; Display: Flex; Align-Itens: Flex-Start;)

6.2.2. Alinhar-self.

A propriedade é responsável pelo alinhamento de um elemento flexível separado na altura do recipiente flexível. Substitui o alinhamento especificado por alinhamento de itens. Não herdado.

Valores:
AUTO. O valor padrão. O elemento Flex usa o alinhamento especificado na propriedade Alinhar-Items Flex Contêiner.
Flex-Start. A borda superior do elemento FLEX é colocada de perto com a linha Flex (ou a uma distância, levando em conta os campos de margem especificados e a estrutura de fronteira do elemento) passando pelo início do eixo transversal.
Flex-End. A borda inferior do elemento FLEX é colocada de perto com a linha Flex (ou a uma distância, levando em conta os campos de margem especificados e a estrutura de fronteira do elemento) passando pela extremidade do eixo transversal.
Centro Os campos do Flex Element são centrados no eixo transversal dentro da linha Flex.
Linha de base O elemento Flex está alinhado com a linha de base.
Alongamento. Se o tamanho transverso do elemento FLEX for calculado como automático e nenhum dos valores transversais da margem não for igual ao Auto, o elemento será esticado. O valor padrão.
inicial Define o valor da propriedade padrão.
herdar. Herda o valor da propriedade do elemento pai.

FIG. 11. Alinhamento de elementos flexíveis individuais

Sintaxe

Flex-Recipiente (Display: -Webkit-Flex; Display: flex;) .flex-item (-webkit-align-self: centro; alinhar-self: centro;)

6.3. Linhas de contêiner flexíveis: alinhamento de conteúdo

A propriedade linhas as linhas no recipiente flexível na presença de espaço adicional no eixo transversal, similarmente para alinhar elementos individuais No eixo principal usando a propriedade de conteúdo de justificação. A propriedade não afeta o recipiente flexível de linha única. Não herdado.

Valores:
Flex-Start. As linhas são armazenadas para o início do recipiente flexível. A borda da primeira linha é colocada perto da borda do recipiente flexível, cada um subsequente - perto da linha anterior.
Flex-End. Linhas são colocadas no final do recipiente flexível. A borda da última linha é colocada perto da borda do recipiente flexível, cada um anterior - perto da linha subseqüente.
Centro As linhas são armazenadas para o centro do recipiente flexível. As linhas estão localizadas próximas umas das outras e alinhadas no centro do recipiente flexível com uma distância igual entre a borda inicial do conteúdo do recipiente flexível e a primeira string e entre a borda final do conteúdo do recipiente flexível e do última string.
Espaço entre. As linhas são uniformemente distribuídas no recipiente flexível. Se o espaço livre restante for negativo ou o contêiner Flex tiver apenas uma linha Flex, esse valor é idêntico ao Flex-Start. Caso contrário, a borda da primeira linha é colocada próxima à borda inicial do conteúdo do contêiner Flex, a borda da última linha é próxima da borda final do conteúdo do recipiente flexível. As linhas restantes são distribuídas para que a distância entre duas linhas adjacentes seja a mesma.
Espaço-ao redor. As linhas são distribuídas uniformemente no recipiente flexível com meio espaço em ambas as extremidades. Se o espaço livre remanescente for negativo, esse valor é idêntico ao centro central. Caso contrário, as cadeias são distribuídas de tal forma que a distância entre quaisquer duas linhas adjacentes é a mesma, e a distância entre as primeiras / últimas linhas e as bordas do conteúdo do contêiner flexível variou da distância entre as linhas.
Alongamento. O valor padrão. As fileiras de elementos Flex são uniformemente esticadas, preenchendo todo o espaço disponível. Se o espaço livre restante for negativo, esse valor é idêntico ao Flex-Start. Caso contrário, o espaço livre será dividido igualmente entre todas as linhas, aumentando seu tamanho transversal.
inicial Define o valor da propriedade padrão.
herdar. Herda o valor da propriedade do elemento pai.
FIG. 12. Alinhamento multi-line de elementos flex

Sintaxe

Flex-Container (Display: -Webkit-Flex-Flex-Flex-Fluxo: Envoltório de linha; -T -WebKit-Align-Content: Flex-End; Display: Flex; FLOW FLOW: Envoltório de linha; Alinhamento: Flex-End Altura: 100px;)

Módulo de layout do Flexbox (caixa flexível) destina-se a fornecer mais de método eficaz Localização, alinhamento e distribuição de espaço livre entre os elementos no recipiente, mesmo quando seu tamanho é desconhecido antecipadamente e / ou dinâmico (portanto, a palavra "flex").

A ideia básica da marcação flexível (flex) é fornecer um recipiente com a capacidade de alterar a largura / altura (e ordem) de seus elementos, a fim de a melhor maneira Preencha o espaço disponível (principalmente para colocação em todos os tipos e tamanhos de telas). O contêiner do Flexbox expande elementos para preencher o espaço livre ou compactá-los para evitar o estouro.

O mais importante é que a Flexbox é uma agnóstica direcional em contraste com os layouts usuais (blocos com base em elementos de posicionamento vertical e string com base no posicionamento horizontal). Apesar do fato de que eles funcionam bem o suficiente, eles não têm flexibilidade para apoiar aplicativos grandes ou complexos (especialmente quando se trata de mudanças na orientação, alteração de tamanho, alongamento, compressão, etc.).

Observação. O Flexbox é mais adequado para componentes de aplicativos e pequenos layouts, enquanto a grade CSS é projetada para layouts maiores.

Noções básicas e terminologia

Como o Flexbox é um módulo inteiro, não uma propriedade separada, contém muitas coisas diferentes, incluindo um conjunto inteiro de propriedades. Alguns deles são projetados para instalar seu contêiner (o elemento pai conhecido como o "contêiner flexível"), enquanto outros devem ser instalados com elementos filho (conhecidos como "elementos flexíveis").

Se o sistema de layout usual é baseado em direções de bloco e string, o Flexbox é baseado em "Direções de Flex-Flow". Por favor, dê uma olhada neste desenho da especificação explicando a ideia básica do Flexbox.

Basicamente elementos serão localizados ao longo eixo principal. (do principal-início para o fim) ou eixo cruzado. (de Cross-Start to Cross-End).

Navegadores de suporte

Módulo de layout de caixa flexível CSS

Chrome para Android

O BlackBerry Browser começando com 10 versão suporta uma nova sintaxe.

Propriedades para contêiner.

Propriedades para elementos.

Propriedades para o elemento pai (contêiner flex)

exibição

Determina o recipiente flexível; Uma string ou bloco depende do valor transmitido. Inclui um contexto flexível para todos os seus elementos filhos diretos.

Recipiente (exibição: flex; / * ou interline-flex * /)

Por favor, note que as colunas CSS não afetam o contêiner flexível.

flex-direção.


Define o eixo principal, determina assim a direção dos elementos localizados no recipiente. Flexbox (além do wrapper opcional) é o conceito de um layout unidirecional. Pense em elementos flexos, principalmente como linhas horizontais ou alto-falantes verticais.

Contêiner (Direção Flex: Row | Row-Reverse | Coluna | Column-Reverse;)

  • linha (padrão) - Da esquerda para a direita em LTR; Direito à esquerda em RTL;
  • linha-reversa. - Direito à esquerda em LTR; Da esquerda para a direita em RTL;
  • coluna. - A mesma coisa é essa linha, apenas de cima para baixo;
  • coluna-reversa. - a mesma coisa é reversa, apenas a partir do fundo;

flex-Wrap.


Por padrão, os itens tentarão preencher apenas uma só linhas. Você pode alterar esse comportamento e permitir que os itens sejam transferidos para a próxima linha, se necessário.

Container (Flex-Wrap: NowRap | Enrole | Wrap-Reverse;)

  • nowrap (padrão) - Todos os elementos Flex serão localizados em uma linha;
  • embrulho. - Os elementos Flex serão localizados em várias linhas, de cima para baixo;
  • wrap-reverse. - Os elementos Flex serão localizados em várias linhas, bottom-up;

justificar-conteúdo


Determina o alinhamento ao longo do eixo principal. Isso ajuda a distribuir o espaço livre restante depois de tudo corrigido e não corrigido em elementos Flex de largura ter atingido o tamanho máximo. Também ajuda a realizar algum controle sobre o alinhamento dos elementos quando eles transbordam a string.

Contêiner (Justifique o conteúdo: Flex-Start | Flex-End | Center | Espaço entre | Espaço em volta;)

  • flex-Start (padrão) - Os elementos são pressionados até o início da linha;
  • flex-End. - os elementos são pressionados no final da string;
  • centro - Os elementos estão localizados no centro ao longo da string;
  • espaço entre. - Os elementos são colocados uniformemente na linha; O primeiro elemento está no início da linha, o último elemento. Localizado no final da linha;
  • espaço-ao redor. - Os elementos são colocados uniformemente na linha com o mesmo espaço perto deles. Por favor, note que o espaço visualmente não é o mesmo, já que todos os elementos têm o mesmo espaço em ambos os lados. O primeiro elemento terá uma unidade de espaço no lado do contêiner, mas duas unidades entre ele e o próximo elemento, porque o próximo elemento também possui uma unidade de dois lados.

alinhar-itens.


Esta propriedade determina o comportamento dos elementos Flex ao longo do eixo transversal na linha atual. Pense nisso como O, apenas para o eixo transversal (eixo principal perpendicular).

Contêiner (alinhar-artigos: Flex-Start | Flex-End | Center | Stretch;)

  • flex-Start - Elementos são colocados no início do eixo transversal;
  • flex-End - Elementos são colocados no final do eixo transversal;
  • centro - Elementos estão localizados no centro do eixo transversal;
  • linha de base - Os elementos estão alinhados pela linha de base;
  • estiramento (padrão) - Estique para preencher todo o recipiente (largura mínima / largura máxima ainda é observada);

alinhamento de conteúdo


Observação. Esta propriedade não funciona quando há apenas uma linha de elementos Flex.

Contêiner (Alinhe-Conteúdo: Flex-Start | Flex-End | Center | Espaço entre | Space-around | Stretch;)

  • flex-Start. - As linhas estão localizadas no início do recipiente;
  • flex-End. - As linhas estão localizadas no final do recipiente;
  • centro - As linhas são colocadas no centro do recipiente;
  • espaço entre. - As linhas são distribuídas uniformemente, a primeira linha está localizada no início do recipiente e a última linha no final;
  • espaço-ao redor. - linhas são distribuídas uniformemente, com mesma distância entre eles;
  • estiramento (padrão) - As linhas são estendidas pela largura para ocupar o espaço restante;

Propriedades para subsidiárias (elementos flex)

pedido


Por padrão, todos os elementos estão localizados na ordem original. No entanto, a propriedade Order gerencia a ordem em que os elementos dentro do recipiente estão localizados.

Item (ordem: ; }

flex-crescer.


A propriedade determina a capacidade de aumentar o elemento em tamanho, se necessário. É preciso um valor sem dimensões como uma proporção que determina como a quantidade de espaço livre dentro do recipiente deve ocupar o elemento.

Se todos os elementos tiverem uma propriedade Flex-Grow instalada em 1, o espaço livre dentro do contêiner será distribuído uniformemente entre todos os elementos. Se um dos elementos for definido como 2, o elemento será o dobro do espaço do que o restante (pelo menos tentar).

Item (Flex-Crescer: ; / * padrão 0 * /)

É impossível indicar números negativos.

flex-Base.

Determina o tamanho do elemento padrão, antes da distribuição do espaço restante. Pode ser de comprimento (20%, 5rem, etc.) ou palavra-chave. A palavra-chave automática significa "Parece que minha propriedade de largura ou altura". O conteúdo do conteúdo significa que o "tamanho é baseado no conteúdo do elemento" é a palavra-chave ainda não é muito bem suportada, por isso é difícil verificar, e ainda mais difícil descobrir o que torna seu conteúdo min, max- Conteúdo e conteúdo de ajuste.

Item (Flex-Base: | AUTO; / * Padrão Auto * /)

Se definido como 0, o espaço adicional em torno do conteúdo não será levado em conta. Se você instalar automaticamente, o espaço adicional será distribuído com base no valor.

flex.

Esta é uma redução para e. O segundo e terceiro parâmetros (flex-shrink e flex-base) não são obrigatórios. O valor padrão é definido como 0 1 Auto.

Item (Flex: Nenhum | [<"flex-grow"> <"flex-shrink">? || <"flex-basis"> ] }

alinhar-self.


Esta propriedade permite que você substitua o alinhamento padrão (ou especificado usando a propriedade) para elementos flexíveis individuais.

Por favor, olhe para a explicação das propriedades para entender os valores disponíveis.

Item (Align-Self: Auto | Flex-Start | Flex-End | Center | Stretch;) .Item (Align-self: Auto | Flex-Start | Flex-End | Center | Stretch;)

Por favor, note que o flutuador, claro e alinhamento vertical não tem influência no elemento Flex.

Exemplos

Vamos começar com exemplo simplesA tarefa decisiva que ocorre quase todos os dias: a central central. Não pode ser mais fácil se você estiver usando Flexbox.

Pai (Display: Flex; Altura: 300px;) .Child (largura: 100px; altura: 100px; margem: auto;)

Depende do fato de que a margem instalada no automóvel no recipiente flexível absorve espaço adicional. Assim, a instalação da margem vertical no automático no item fará um item centrado perfeitamente nos dois eixos.

Agora vamos usar mais algumas propriedades. Considere uma lista de 6 elementos, todos com um tamanho fixo em termos estéticos, mas eles podem ser automáticos. Nós os queremos uniformemente distribuídos ao longo do eixo horizontal e, para que, ao alterar o tamanho do navegador, tudo estava em ordem (sem solicitações de mídia!).

Flex-Container (Display: Flex; FLOW FLOW: Envoltório de linha; Conteúdo da justificação: espaço-ao redor;)

Preparar! Tudo o mais é apenas alguns problemas de design. Abaixo está um exemplo no Codepen, certifique-se de ir até lá e tentar alterar o tamanho das janelas para ver o que acontece.

Vamos tentar mais alguma coisa. Imagine que temos navegação localizada na borda direita no topo da tela, mas queremos que ele esteja localizado no centro nas telas de tamanho médio e estava em uma coluna em pequenas telas. Fácil como uma torta.

Navegação (Display: Flex; FLOW FLOW: Envoltório de linha; Conteúdo de justificação: flex-end;) @media tudo e (largura máxima: 800px) (.Navegação (Conteúdo de justifusão: espaço-ao around;) @media tudo e (largura máxima: 500px) (.Navigação (direção flex: coluna;)))

Vamos tentar fazer algo ainda melhor, brincando com a flexibilidade dos nossos elementos flexíveis! E quanto ao layout móvel de três chone com uma tampa e um rodapé para toda a largura da tela, e que não há dependência da ordem inicial dos elementos.

Wrapper (display: flex; flex-flow: filme de linha;) .Header, .main, .nav, .aside, .footer (flex: 1 100%;) @media tudo e (min-largura: 600px) (. (Flex: 1 auto;)) @media tudo e (largura mínima: 800px) (.main (flex: 2 0px;) .SEIDE-1 (ordem: 1;). (Ordem: 2;). (Ordem: 3;) .Footer (ordem: 4;))

Propriedades relacionadas

Erros

Claro, o Flexbox não é sem erros. A melhor coleção que eu vi é representada por Flexbugs de Philip Walton e Greg Whitworth. Este é um local de código aberto para rastrear todos os erros, então acho que é melhor deixar o link.

A propriedade Order gerencia a ordem em que os elementos filho aparecem dentro do contêiner flexível. Por padrão, eles estão localizados na ordem como inicialmente adicionados ao contêiner flex.

Valores

.flex-item (ordem:<целое число>; }

os elementos Flex podem ser reordenados usando esta propriedade simples sem alterar o código HTML.

Valor padrão: 0.

flex-crescer.

Essa propriedade define o coeficiente de crescimento que determina até onde o elemento Flex aumentará em relação aos restantes elementos Flex no contêiner flexível, ao distribuir um espaço livre positivo.

Valores

.flex-item (Flex-Crescer:<число>; }

Se todos os elementos Flex tiverem o mesmo valor flexível, todos os elementos terão o mesmo tamanho no contêiner.

O segundo elemento Flex leva mais espaço em relação ao tamanho de outros elementos flexíveis.

Valor padrão: 0.

flex-Shrink.

o flex-shrink define um coeficiente de compactação que determina até que ponto o elemento flexível será compactado em relação aos elementos flexos restantes no contêiner flexível, durante a distribuição de espaço livre negativo.

Valores

.flex-item (flex-shrink:<число>; }

Por padrão, todos os elementos flex podem ser compactados, mas se definirmos o valor flex-shrink zero (sem compactação), os elementos retiveram o tamanho original.

Valor padrão: 1.

Números negativos são inaceitáveis.

flex-Base.

Essa propriedade leva os mesmos significados que as propriedades de largura e altura e define o tamanho principal inicial do elemento Flex, antes que o espaço livre seja distribuído de acordo com os coeficientes.

Valores

.flex-item (Flex-Base: Auto |<ширина>; }

flex-Base é especificado para o quarto elemento Flex e dita seu tamanho inicial.

Valor padrão: Auto.

flex.

Esta propriedade é uma redução para as propriedades do Flex-Crement, Flex-Shrink e Flex-Base. A cultura de outros valores também pode ser instalada automática (1 1 Auto) e Nenhum (0 0 Automático).

Valores

.flex-item (flex: nenhum | Auto | [ ? || ]; }

Valor padrão: 0 1 Auto.

A W3C recomenda usar a propriedade Flex abreviada, em vez de propriedades individuais, já que o Flex redefine corretamente quaisquer componentes não especificados para uso típico.

alinhar-self.

A propriedade Align permite que você substitua o alinhamento padrão (ou o valor especificado por meio de itens de alinhamento) para elementos flexíveis individuais. Para entender os valores disponíveis, consulte a descrição dos itens de alinhamento para o contêiner flex.

Valores

.flex-item (alinhar-self: Auto | Flex-Start | Flex-End | Center | Stretch;)

Para o terceiro e quarto flex elementos, o alinhamento é substituído pela propriedade Align-Self.

Módulo Flexbox-leuauta. (Caixa flexível - "bloco flexível", em este momento Recomendação do candidato W3C) coloca a tarefa de oferecer uma maneira mais eficiente de estabelecer, nivelamento e distribuição de espaço livre entre elementos em um recipiente, mesmo quando seu tamanho é desconhecido e / ou dinâmico (daí a palavra "flexível").

A ideia principal do Guarda Flex no recipiente dotou a capacidade de alterar a largura / altura (e ordem) de seus elementos para o melhor enchimento do espaço (na maioria dos casos - para suportar todos os tipos de exibições e telas ). O contêiner flexível estica os elementos para preencher o espaço livre ou comprime-os para evitar a fronteira.

O mais importante, o Flexbox-Leieut não depende da direção, em contraste com as leiantes usuais (blocos, localizados verticalmente, e os elementos em linha são horizontalmente). Enquanto a Liaut usual é ótima para páginas da Web, não tem flexibilidade (sem canalybur) para suportar aplicativos grandes ou complexos (especialmente quando se trata de alterar a orientação, redimensionamento, alongamento, compressão, etc.).

Comente: Flexbox-Leuaout é mais adequado para partes compostas da aplicação e leuautics de pequena escala, enquanto a grade é mais usada para laianos em grande escala.

Fundamentos

Porque O Flexbox é um módulo inteiro e não apenas uma única propriedade, combina muitas propriedades. Alguns deles devem ser aplicados ao contêiner (elemento pai, o chamado recipiente Flex.), enquanto outras propriedades se aplicam a elementos filho, ou elementos Flex..

Se a Leuaout usual é baseada nas direções de blocos e elementos em linha, o Flex-Liaut é baseado nas "direções de fluxo flexível". Confira este esquema da especificação, explicando a ideia básica do Flex-leuaitov.

A maioria dos elementos será distribuída ao longo eixo principal. (de principal começo. antes main-End.) ou junto eixo transversal (de start-start. antes transversal.).

  • eixo principal. - O eixo principal ao longo dos quais os elementos Flex estão localizados. Nota, não é necessariamente horizontal, tudo depende da propriedade Flex-Direction (veja abaixo).
  • principal começo. | main-End. - Os elementos Flex são colocados em um recipiente da posição inicial da posição principal.
  • tamanho principal. - Largura ou altura do elemento Flex, dependendo do valor primário selecionado. O valor principal pode ser largura ou altura do elemento.
  • eixo cruzado. - eixo transversal perpendicular ao principal. Sua direção depende da direção do eixo principal.
  • start-start. | transversal. - Flex Linhas são preenchidas com elementos e estão localizadas em um recipiente da posição de início cruzado até a posição transversal.
  • tamanho cruzado - A largura ou a altura do elemento flexível, dependendo do tamanho da dimensão, é igual a esta magnitude. Esta propriedade coincide com a largura ou a altura do item, dependendo do tamanho da dimensão.

Propriedades.

display: Flex | Inline-Flex;

Aplica-se a:

Determina o contêiner flexível (inline ou bloco, dependendo do valor selecionado), conecta o contexto flexível para todos os seus descendentes imediatos.

Exibir: outros valores | Flex | Inline-Flex;

Tenha em mente:

  • Colunas CSS não funcionam com um recipiente flexível
  • flutuar, claro e alinhamento vertical não funcionam com elementos flex

flex-direção.

Aplica-se a: Elemento Parental Flex-Recipiente.

Define o eixo principal do eixo principal, determinando assim a direção para elementos flexos colocados no recipiente.

Flex-Direction: Row | Row-Reverse | Coluna | Coluna-reversa.
  • linha (padrão): da esquerda para a direita para LTR, à direita para a esquerda para RTL;
  • linha-reversa: direita para a esquerda para LTR, da esquerda para a direita para RTL;
  • coluna: semelhante à linha, de cima para baixo;
  • coluna-REVERSE: semelhante à linha reversa, de baixo para cima.

flex-Wrap.

Aplica-se a: Elemento Parental Flex-Recipiente.

Determina se o recipiente será de linha única ou multi-line, bem como a direção do eixo transversal determinando a direção na qual novas linhas serão localizadas.

Flex-Wrap: NowRAP | Wrap | Wrap-reverse.
  • nowrap (padrão): linha única / de esquerda para a direita para LTR, direita para a esquerda para RTL;
  • envoltório: multi-line / da esquerda para a direita para LTR, à direita para a esquerda para RTL;
  • wrap-Reverse: Multi-Line / Direita para a esquerda para LTR, da esquerda para a direita para RTL.

fluxo flexível.

Aplica-se a: Elemento Parental Flex-Recipiente.

Esta é uma redução para as propriedades do flex-direção e do filme flexível, que juntos definem o eixo principal e transversal. O padrão leva o valor da linha Nowrap.

FLOX FLOW:<"flex-direction" > || <"flex-wrap" >

Aplica-se a: Elemento Parental Flex-Recipiente.

Determina o alinhamento em relação ao eixo principal. Ajuda a distribuir o espaço livre restante no caso quando os elementos da linha não são "alongamento" ou alongamento, mas já alcançaram seu tamanho máximo. Também permite que de alguma forma controlar o alinhamento dos elementos quando a string é liberada.

: Flex-Start | Flex-end | Centro | Espaço-entre | Espaço-ao redor.
  • flex-Start: Os elementos são deslocados para o início da linha;
  • flex-End: Os elementos são deslocados até o final da string;
  • centro: Os elementos estão alinhados no centro da linha;
  • espaço-entre: elementos são distribuídos uniformemente (o primeiro elemento no início da linha, o último - no final);
  • espaço em torno: elementos são distribuídos uniformemente com uma distância igual entre si e as fronteiras da string.

Aplica-se a: Elemento Parental Flex-Recipiente.

Define o comportamento padrão para os elementos Flex são relativos ao eixo transversal na linha atual. Considere esta versão do conteúdo de justificação para o eixo transversal (perpendicular ao principal).

: Flex-Start | Flex-end | Centro | Linha de base | Alongamento.
  • flex-Start: O limite intermediário para itens está localizado na posição de início cruzado;
  • flex-End: A borda transversal para itens está localizada na posição transversal;
  • centro: Os elementos estão alinhados no centro do eixo transversal;
  • linha de base: elementos estão alinhados para sua linha de base;
  • estiramento (padrão): Os elementos são esticados, preenchendo o contêiner (tendo em conta a largura min-largura / max).

Aplica-se a: Elemento Parental Flex-Recipiente.

Alinha as linhas de contêineres flexíveis na presença de um espaço livre no eixo transversal, da mesma forma que o conteúdo de justificação faz no eixo principal.

Comente: Esta propriedade não funciona com uma única caixa de flexbox.

: Flex-Start | Flex-end | Centro | Espaço-entre | Espaço-ao redor | Alongamento.
  • flex-Start: As linhas estão alinhadas em relação ao início do contêiner;
  • flex-End: As linhas são alinhadas em relação ao final do recipiente;
  • centro: As linhas estão alinhadas no centro do recipiente;
  • espaço-entre: linhas são distribuídas uniformemente (a primeira linha no início da linha, este último está no final);
  • espaço-ao redor: as linhas são distribuídas uniformemente com uma distância igual;
  • estiramento (padrão): As linhas são esticadas, preenchendo o espaço livre.

pedido

Aplica-se a:

Por padrão, os elementos Flex estão localizados em sua ordem original. No entanto, a propriedade Order pode controlar a ordem de sua localização no recipiente.

Pedido:<inteiro\u003e

flex-crescer.

Aplica-se a: Um elemento filha / flex.

Determina para o elemento flexível a capacidade de "crescer", se necessário. Leva um valor indexado que serve como uma proporção. Determina que fração de um espaço livre dentro do contêiner um elemento pode ocupar.

Se todos os itens tiverem uma propriedade Flex-crescer como 1, cada descendente receberá o mesmo tamanho dentro do contêiner. Se você definir um dos descendentes para 2, então levará duas vezes mais espaço do que outros.

Flex-Cresm:<número\u003e (padrão 0)

flex-Shrink.

Aplica-se a: Um elemento filha / flex.

Determina para o elemento flexível a capacidade de comprimir se necessário.

Flex-Shrink: (Padrão 1)

Números negativos não são aceitos.

flex-Base.

Aplica-se a: Um elemento filha / flex.

Determina o tamanho padrão para o elemento antes da distribuição do espaço no contêiner.

Flex-Base:<comprimento\u003e. | Auto (auto padrão)

flex.

Aplica-se a: Um elemento filha / flex.

Esta é uma redução para crescer flex, flex-shrink e flex. O segundo e terceiro parâmetros (flex-shrink, flex-base) são opcionais. O valor padrão é 0 1 Auto.

Flex: Nenhum | [<"flex-grow" > <"flex-shrink" >? || <"flex-basis" > ]

alinhar-self.

Aplica-se a: Um elemento filha / flex.

Permite que você substitua o alinhamento padrão ou em itens de alinhamento, para elementos flexíveis individuais.

Consulte a descrição da propriedade Align Item para uma melhor compreensão dos valores disponíveis.

Alinhar-self: auto | Flex-Start | Flex-end | Centro | Linha de base | Alongamento.

Exemplos

Vamos começar com um exemplo muito, muito simples, ocorrendo quase todos os dias: alinhamento exatamente no centro. Não há nada mais fácil se você usar o Flexbox.

.Parent (exibição: flex; altura: 300px; / * Ou nada * / ) .Child (largura: 100px; / * Ou nada * / Altura: 100px; / * Ou nada * / Margem: Auto; / * Magia! * /)

Este exemplo é baseado no fato de que a margem no recipiente flexível especificada como automático absorve o espaço desnecessário, então a tarefa de referência assim lança o elemento exatamente no centro de ambos os eixos.

Agora vamos usar algumas propriedades. Apresente um conjunto de 6 elementos de tamanho fixo (para beleza), mas com a capacidade de alterar o tamanho do contêiner. Queremos distribuí-los uniformemente horizontalmente, de modo que quando a janela do navegador é redimensionada, tudo parecia bom (sem gravador de mídia!).

.flex-contenter ( / * Primeiro criar um contexto flex * / Exibir: flex; / * Agora vamos definir a direção do fluxo e se queremos que os elementos sejam transferidos para uma nova string * Lembre-se que isso é o mesmo que: * Flex-Direction: linha; * Flex-Wrap: Enrole; * / FLEX-FLOW: envoltório de linha; / * Agora definimos como o espaço * / : Espaço-ao redor; )

Preparar. Tudo o resto é uma questão de registro. Abaixo está localizado Codepen, que demonstra este exemplo. Certifique-se de tentar esticar / apertar a janela do navegador e ver o que acontece.

Confira esta caneta!

Vamos tentar mais alguma coisa. Imagine que precisamos de uma navegação alinhada na borda direita no topo do nosso site, mas queremos que ele se alinhe no centro de telas de tamanho médio e se transformasse em uma coluna em pequenas. Tudo é simples o suficiente.

/ * Grandes telas * / .Navegação (exibição: flex; flex-flow: envoltório de linha; / * Desloca elementos até o final da linha no eixo principal * / : Flex-End; ) @Media tudo e (largura máxima: 800px) (.Navegação ( / * Para as telas de tamanho médio, alinhamos a navegação no centro, distribuindo uniformemente o espaço livre entre os elementos * / : Espaço-ao redor; ))) / * Pequenas telas * / @Media todos e (largura máxima: 500px) (.Navegação ( / * Em pequenas telas em vez de uma string, temos elementos na coluna * / Direção Flex: Coluna; )) Confira esta caneta!

Vamos tentar algo melhor e jogar com flexibilidade de flex-elementos! Que tal orientado em dispositivos móveis Layout de três chone com boné completo e porão? E outra ordem de localização.

.wrapper (display: flex; flex-flow: envoltório de linha;) / * Especificamos todos os elementos de 100% de largura * / .Header, .main, .nav, .aside, .footer (flex: 1 100%;) / * Neste caso, confiamos na ordem original para a orientação em * dispositivos móveis: * 1. Header * 2. Nav * 3. Main * 4. Além de * 5. Rodapé * / / * Telas médias * / @Media tudo e (largura mínima: 600px) ( / * Ambos sagebar estão localizados em uma linha * / .asida (flex: 1 Auto;)) / * Grandes telas * / @Media tudo e (largura mínima: 800px) ( / * Nós mudamos os elementos de lugares.aside-1 i.main, e também informar * elemento.main levar duas vezes mais espaço do que Sidbars. * / .main (flex: 2 0px;) .SEIDE-1 (ordem: 1;). (Ordem: 2;) .SEIDE-2 (ordem: 3;). "Ordem: 4;))

Se você disser curto, o layout com Flexbox nos dá soluções simples de tarefas difíceis uma vez. Por exemplo, quando você precisa alinhar o elemento vertical ou pressione o porão para a parte inferior da tela, ou simplesmente inserir vários blocos em uma linha para que eles ocupem tudo o espaço livre. Tais tarefas são resolvidas sem flexão. Mas, por via de regra, essas soluções são mais relacionadas às "muletas" - as recepções para usar CSS não se destinam. Enquanto com flexbox, essas tarefas são resolvidas exatamente como o modelo flexível está pensando.

Módulo de layout de caixa CSS flexível (módulo CSS para módulos com blocos flexíveis), curta flexbox, criado para remover falhas ao criar uma variedade de estruturas HTML, incluindo adaptadas sob diferentes larguras e altura, e faça um layout de lógico e simples. E a abordagem lógica, como regra, funciona em lugares inesperados, onde o resultado não foi verificado - nossa lógica!

O Flexbox permite-lhe controlar elegantemente os parâmetros mais diferentes dos elementos dentro do recipiente: direção, ordem, largura, altura, alinhamento, distribuição de espaço livre, alongamento e compressão de elementos.

Conhecimento básico

Flexbox consiste em um contêiner e seus elementos filhos (itens) (elementos flexíveis).

Para incluir flexbox, qualquer Elemento HTML. suficiente para atribuir a exibição da propriedade CSS: flex; ou exibir: Inline-Flex; .

1
2

Depois de ligar as propriedades do flex, dois eixos são criados dentro do contêiner: principal e transversal (perpendicular (⊥), eixo cruzado). Todos os elementos aninhados (primeiro nível) são construídos no eixo principal. Por padrão, o eixo principal é horizontal e tem a direção da esquerda para a direita (→), e o eixo transversal, respectivamente, vertical e é direcionado de cima para baixo (↓).

O eixo principal e cruzado pode ser alterado em lugares, então os elementos serão localizados no topo (↓) e quando eles param de encaixar em altura, eles se moverão da esquerda para a direita (→) - isto é, os eixos simplesmente mudados em lugares . Ao mesmo tempo, o começo e o final da localização dos elementos não muda - apenas direcções (eixo) mudam! É por isso que você precisa imaginar o eixo dentro do contêiner. No entanto, não é necessário pensar que existem alguns eixos "físicos" e eles influenciam alguma coisa. O eixo aqui é apenas a direção do movimento dos elementos dentro do recipiente. Por exemplo, se indicamos o alinhamento dos elementos no centro do eixo principal e, em seguida, alterou a direção deste eixo principal, ele será alterado e alinhamento: os elementos estavam no meio horizontalmente e aço no meio verticalmente. . Consultar exemplo.

Outro recurso importante da caixa Flex é a presença de uma linha na direção transversal. Para entender o que estamos falando, vamos imaginar que há um eixo horizontal principal, muitos elementos e eles não "subir" no contêiner, então eles vão para outra linha. Aqueles. O recipiente parece com isto: o recipiente, dentro de duas linhas, em cada linha para vários elementos. Apresentado? Agora lembre-se que podemos alinhar verticalmente não apenas elementos, mas também linhas! Como funciona bem visível no exemplo da propriedade. E então parece esquematicamente:

Propriedades CSS.O que pode afetar o modelo de construção de layout: flutuar, limpar, alinhar vertical, colunas não funcionam no design flexível. Ele usa outro modelo para a construção de um layout e essas propriedades CSS são simplesmente ignoradas.

Propriedades CSS Flexbox.

Flexbox contém regras de CSS diferentes para controlar todo o design flexível. Alguns precisam ser aplicados ao contêiner principal, enquanto outros para os elementos deste contêiner.

Para contêiner

Exibição:

Inclui propriedade Flex para item. Nesta propriedade, o elemento investido nele cai: apenas os descendentes do primeiro nível são afetados - eles se tornarão elementos do contêiner flexão.

  • flex. - O elemento é esticado para toda a largura e tem seu espaço total entre os blocos circundantes. Remo ocorre no início e no final do bloco.
  • inline-Flex. - O elemento é simplificado por outros elementos. Nesse caso, sua parte interna é formatada como elemento de bloco, e o próprio elemento é como embutido.

flex e Inline-Flex diferem no fato de que interagir de maneira diferente com os elementos circundantes, como exibir: bloco e exibição: bloco inline.

Direção Flex:

Altera a direção do eixo principal do contêiner. O eixo transversal muda de acordo.

  • linha (padrão) - direção dos elementos da esquerda para a direita (→)
  • coluna. - Direção de elementos de cima para baixo (↓)
  • linha-reversa. - direção dos elementos à direita (←)
  • coluna-reversa. - direção dos elementos de baixo para cima ()
Flex-Wrap:

Gerencia a transferência de elementos que incomodavendo para o recipiente.

  • nowrap (padrão) - Elementos aninhados estão localizados em uma linha (durante a direção \u003d linha) ou em uma coluna (durante a direção \u003d coluna), independentemente de serem colocadas no recipiente ou não.
  • embrulho. - Inclui a transferência de itens para a próxima linha se eles não forem colocados no contêiner. Isso inclui o movimento de elementos no eixo transversal.
  • wrap-reverse. - Também esse envolve apenas a transferência não será para baixo e para cima (na direção oposta).
FLEX-FLOW: Wrap de direção

Combina as propriedades flex-direção e flex-wrap. Eles são frequentemente usados \u200b\u200bjuntos, então a propriedade Flex-Flow foi criada para gravar menos código.

fLOX-FLOW aceita os valores das duas propriedades, separadas por um espaço. Ou você pode especificar um valor de qualquer propriedade.

/ * Apenas flex-direção * / flex-flow: linha; FLEX-FLOW: ROW-REVERSE; FLEX-FLOW: Coluna; FLEX-FLOW: coluna-reversa; / * Apenas flex-wrap * / flex-flow: Nowrap; FLEX-FLOW: Enrole; FLEX-FLOW: Wrap-Reverse; / * Imediatamente ambos os significados: flex-direção e flex-wrap * / flex-flow: linha Nowrap; FLOX-FLOW: envoltório da coluna; FLOW FLOW: REVERSO REVERSO DA COLUNA-REVERSO; Justificar-conteúdo:

Alinha elementos no eixo principal: se direção \u003d linha, depois horizontalmente e se a direção \u003d coluna, então verticalmente.

  • flex-Start (padrão) - Os elementos vão desde o começo (no final, pode haver um lugar).
  • flex-End. - Os elementos são equalizados por um fim (o local permanecerá no início)
  • centro - no centro (lugar permanecerá à esquerda e à direita)
  • espaço entre. - elementos extremos são pressionados nas bordas (o local entre os elementos é distribuído uniformemente)
  • espaço-ao redor. - O espaço livre é distribuído uniformemente entre os elementos (os elementos extremos não são pressionados nas bordas). O espaço entre a borda do recipiente e os elementos extremos serão duas vezes menos do que o espaço entre os elementos no meio da linha.
  • espaço-uniformemente
Alinhamento de conteúdo:

Alinha as fileiras nas quais os elementos no eixo transversal estão localizados. O mesmo que justificar conteúdo apenas para o eixo oposto.

Nota: funciona quando há pelo menos 2 linhas, isto é. Se houver apenas uma linha, nada acontece.

Aqueles. Se flex-direção: linha, esta propriedade alinhará linhas invisíveis verticalmente |. É importante notar que a elevação do bloco deve ser ajustada rigidamente e deve ser maior que a altura da série, caso contrário as próprias linhas esticarão o contêiner e seu alinhamento perderá seu significado, porque não há espaço livre entre eles. . Mas quando flex-direção: coluna, as linhas se movem horizontalmente → e a largura do contêiner é quase sempre maior que a largura da série e o alinhamento das linhas imediatamente adquire o significado ...

  • estiramento (padrão) - linhas estiramento preenchendo a corda completamente
  • flex-Start. - As linhas são agrupadas no topo do recipiente (pode haver um lugar no final).
  • flex-End. - As linhas são agrupadas na parte inferior do contêiner (o local permanecerá no início)
  • centro - As linhas são agrupadas no centro do recipiente (o local permanecerá nas bordas)
  • espaço entre. - As linhas extremas são pressionadas para as bordas (o local entre as linhas é distribuído uniformemente)
  • espaço-ao redor. - O espaço livre é distribuído uniformemente entre as linhas (os elementos extremos não são pressionados para as bordas). O espaço entre a borda do recipiente e os elementos extremos serão duas vezes menos do que o espaço entre os elementos no meio da linha.
  • espaço-uniformemente - Também esse espaço-ao redor, apenas a distância nos elementos extremos para as bordas do recipiente é o mesmo entre os elementos.
Alinhamento de itens:

Alinha elementos no eixo transversal dentro da linha (linha invisível). Aqueles. As fileiras são alinhadas por meio de alinhamento, e os elementos dentro dessas linhas (cordas) através de itens de alinhamento e tudo isso no eixo transversal. Não há tal separação do eixo principal, não há conceitos de série e elementos estão alinhados através de conteúdo de justificação.

  • estiramento (padrão) - Elementos estiramento preenchendo a string completamente
  • flex-Start. - Os elementos são pressionados ao início da linha
  • flex-End. - Os elementos são pressionados no final da linha
  • centro - Elementos estão nivelando no centro da linha
  • linha de base - Elementos estão alinhados pelo texto da linha de base

Para elementos de contêiner

Flex-Cresm:

Especifica o fator crescente do elemento na presença de um espaço livre no contêiner. O padrão Flex - crescer: 0 ou seja. Não dos elementos deve aumentar e preencher um espaço livre no recipiente.

Flex - Crescer: 0

  • Se todos os elementos indicam flex-crescer: 1, todos se estendem igualmente e preenchem tudo o espaço livre no contêiner.
  • Se um dos elementos indicar o Flex - crescer: 1, ele preencherá todo o espaço livre no contêiner e o alinhamento por meio de Justify-Content Work não poderá funcionar: Não há nada para alinhar o espaço livre ...
  • Quando flex-crescer: 1. Se um deles tiver flex-crescer: 2, será 2 vezes mais do que todos os outros
  • Se todos os blocos flexíveis dentro do contêiner Flex tiverem flex-crescer: 3, então eles serão do mesmo tamanho
  • Com flex-crescer: 3. Se um deles tem flex-crescer: 12, será 4 vezes mais do que todos os outros

Como funciona? Suponha que o contêiner tenha uma largura de 500px e contenha dois elementos, cada um com uma largura básica de 100PX. Portanto, 300 pixels livres permanecem no recipiente. Agora, se você especificar flex-crescer: 2 primeiro elemento; e o segundo fluxo crescer: 1; Os blocos levarão toda a largura do contêiner disponível e a largura do primeiro bloco será de 300px e o segundo 200PX. Isto é explicado pelo fato de que o espaço livre disponível 300px no contêiner foi distribuído entre os elementos na proporção 2: 1, + 200px do primeiro e + 100px segundo.

Nota: No valor que você pode especificar números fracionários, Por exemplo: 0.5 - Flex-Crescer: 0,5

Flex-Shrink:

Especifica o fator de redução do elemento. O recurso é o flexível oposto - crescer e determina como o elemento deve ser compactado se não houver espaço livre no contêiner. Aqueles. A propriedade começa a trabalhar quando a soma dos tamanhos de todos os elementos é maior que o tamanho do contêiner.

Padrão Flex-Shrink: 1

Suponha que o contêiner tenha uma largura de 600px e contenha dois elementos, cada um com uma largura de 300px - Flex-Base: 300px; . Aqueles. Dois elementos preencher completamente o recipiente. O primeiro elemento indicará flex-shrink: 2; e o segundo flex-shrink: 1; . Agora reduzindo a largura do recipiente em 300px, isto é. Os elementos devem ser com 300px para ser localizado dentro do recipiente. Eles serão comprimidos em uma proporção de 2: 1, ou seja. A primeira unidade vai se juntar ao 200px, e o segundo a 100 px e as novas dimensões dos elementos serão 100px e 200px.

Nota: No valor, você pode especificar números fracionários, por exemplo: 0.5 - Flex-Shrink: 0.5

Flex-Base:

Define a largura básica do elemento - a largura antes das condições restantes que afetam a largura do elemento serão calculadas. O valor pode ser especificado em PX, EM, REM,%, VW, VW, etc. A largura final dependerá da largura da base e dos valores de flex-crescer, flex-shrink e conteúdo dentro do bloco. Com Auto, o elemento recebe uma largura básica em relação ao conteúdo dentro dela.

Padrão: Auto.

Às vezes é melhor instalar a largura do elemento rigidamente através da propriedade da largura usual. Por exemplo, largura: 50%; Isso significará que o elemento dentro do recipiente será exatamente 50%, no entanto, as propriedades Flex-Crese e Flex-Shrink também funcionarão. Isso pode ser necessário quando o elemento é esticado por conteúdo dentro dele, mais especificado na base flexível. Exemplo.

flex-Base será "difícil" se redefinir a tração e compressão: Flex-Base: 200px; Flex-crescer: 0; Flex-Shrink: 0; . Tudo isso pode ser escrito como flex: 0 0 200px; .

Flex: (crescer com base)

Gravação curta de três propriedades: Flex-Crescer Flex-Shrink Flex Base.

Padrão: Flex: 0 1 Auto

No entanto, você pode especificar um e dois valores:

Flex: Nenhum; / * 0 0 Auto * / / * Number * / Flex: 2; / * Flex-Crement (Flex-Base vai para 0) * / / * Não Número * / Flex: 10em; / * Flex-Base: 10em * / Flex: 30px; / * Flex-Base: 30px * / flex: Auto; / * Flex-Base: Auto * / Flex: Conteúdo; / * Flex-Base: Conteúdo * / Flex: 1 30px; / * Flex-Crescer e Flex-Base * / Flex: 2 2; / * Flex-Crescer e Flex-Shrink (Flex-Base Going 0) * / Flex: 2 2 10%; / * Flex-crescer e flex-shrink e Flex-Base * / Align-self:

Permite alterar a propriedade de itens de alinhamento, apenas para um item separado.

Padrão: do contêiner de itens de alinhamento

  • alongamento. - O elemento é esticado enchendo a string completamente
  • flex-Start. - O elemento é pressionado para o início da linha
  • flex-End. - O elemento é pressionado para o final da string
  • centro - O elemento é nivelado no centro da linha
  • linha de base - O elemento é alinhado pela linha básica do texto

Pedido:

Permite alterar a ordem (posição, posição) do elemento na linha geral.

Padrão: ordem: 0

Por padrão, os elementos têm ordem: 0 e colocar na ordem de sua aparência no código HTML e direção da linha. Mas se você alterar o valor da propriedade Order, os itens serão construídos em ordem de valores: -1 0 1 2 3 .... Por exemplo, se um dos itens indicar a ordem: 1, você será primeiro zero e, em seguida, um elemento de 1.

Portanto, é possível, por exemplo, um primeiro elemento a se transformar no final, sem alterar a direção do movimento de outros elementos ou código HTML.

Notas

Qual é a diferença entre a Flex-Base da largura?

Abaixo de diferenças importantes entre a base flexível e a largura / altura:

    flex-Base funciona apenas para o eixo principal. Isso significa que quando flex-direção: Flex Flex-Base controla a largura (largura) e, quando flex-direção: a coluna controla a altura (altura). .

    a Flex-Base se aplica apenas aos elementos flexionados. Então, se você desativar flex no contêiner, esta propriedade não terá efeito.

    Os elementos absolutos do contêiner não participam do design Flex ... e, portanto, o flex-base não afeta os elementos do contêiner flexível se estiverem absolutamente posicionados: Absolute. Eles precisarão especificar largura / altura.

  • Ao usar os valores Flex Properties 3 (Flex-Crescer / Flex-Shrink / Flex Base), você pode combinar e escrever curto e largura crescer ou encolher você precisa escrever separadamente. Por exemplo: flex: 0 0 50% \u003d\u003d Largura: 50%; Flex-shrink: 0; . Às vezes é apenas inconveniente.

Se possível, ainda dê a preferência flex. Use a largura somente quando o Flex-Base não é adequado.

Diferenças Flex-Base da largura - Bug ou Fich?

O conteúdo dentro do elemento Flex corta e não pode ir além de seus limites. No entanto, se você definir a largura por largura ou largura máxima, e não flexionar, o elemento dentro do contêiner flexível poderá ir além desse contêiner (às vezes você precisa desse comportamento). Exemplo:

Exemplos de layout flexível

Nos exemplos, em qualquer lugar usa prefixos para navegador transversal. Eu fiz isso para ler css conveniente. Portanto, veja os exemplos mais recentes. versões do Chrome ou firefox.

# 1 exemplo simples com alinhamento vertical e horizontal

Vamos começar com o exemplo mais simples - nivelamento verticalmente e horizontalmente simultaneamente e em qualquer altura do bloco, mesmo borracha.

Texto no meio

Ou mais, sem bloqueio dentro:

Texto no meio

# 1.2 Separação (lacuna) entre os elementos do bloco flexível

Para posicionar os elementos do contêiner nas bordas e selecionar arbitrariamente o elemento após o qual haverá uma pausa, você precisa usar a propriedade da margem esquerda: Auto ou Margin-Direita: Auto.

# 2 menu adaptativo no flex

Faça um menu no topo da página. Em uma tela larga, deve estar certa. Em média, alinhado no meio. E em um pequeno elemento deve estar em uma nova linha.

# 3 colunas adaptativas 3

Este exemplo mostra a rapidez e convenientemente 3 colunas, que, ao se estreitar, se transformarão em 2 e depois em 1.

Por favor, note que isso pode ser feito sem usar regras de mídia, todos no Flex.

1
2
3
4
5
6

Vá para Jsfiddle.net e altere a largura da seção "Result"

# 4 blocos adaptativos no flex

Suponha que precisemos retirar 3 blocos, um grande e dois pequenos. Ao mesmo tempo, é necessário que os blocos se encaixem em pequenas telas. Faço:

1
2
3

Vá para Jsfiddle.net e altere a largura da seção "Result"

# 5 Galeria em flex e transição

Este exemplo mostra a rapidez com que você pode fazer um acordeão bonito com fotos no Flex. Preste atenção à propriedade de transição para flex.

# 6 flexionar em flex (apenas um exemplo)

Tarefa Faça um bloco flexível. De modo que o início do texto em cada bloco estava na mesma linha horizontal. Aqueles. Com a largura da largura, os blocos crescem em altura. É necessário que a imagem esteja no topo, o botão está sempre no andar de baixo, e o texto no meio começou em uma linha horizontal ...

Para resolver este problema, os próprios blocos são estendidos pela Flex e a largura máxima possível é instalada. Cada unidade interna também é flexível com um design, com uma direção flexível: coluna; e elemento no meio (onde o texto está localizado) é esticado flex-crescer: 1; Para preencher todo o espaço livre, o resultado é alcançado - o texto começou com uma linha ...

Mais exemplos

Suporte ao navegador - 98,3%

Claro, não há suporte completo, mas todos navegadores modernos Suporte a desenhos do Flexbox. Para alguns, você ainda precisa especificar os prefixos. Para uma foto real, olhe em Caniuse.com e veja que 96,3% do navegador usado hoje funcionará sem prefixos, com prefixos de 98,3%. Este é um ótimo indicador, a fim de usar corajosamente o Flexbox.

Para saber quais prefixos são relevantes hoje (junho de 2019), vou dar um exemplo de todas as regras flexíveis com prefixos necessários:

/ * Recipiente * / .flex (display: -webkit-box; display: -ms-flexbox; display: flex; exibir: -webkit-inline-caixa; display: -ms-inline-flexbox; display: inline-flex; -Webkit-box-orient: vertical;-web-work-orient-direção: normal; -ms-flex-direção: coluna; flex-direção: coluna; -ms-flex-wrap: wrap; flex-wrap: wrap; -FLEX-FLOW: Coluna Wrap; FLOW FLOW: Coluna Wrap; -WEBKIT-Box-Pack: Justify; -ms-flex-pack: Justify; Justify-Content: Space - entre; -ms-flex-line-line-back: Distribuir; Alinhamento de alinhamento: espaço-ao redor;) / * elementos * / .flex-item (-webkit-box-flex: 1; -ms-flex-positivo: 1; flex-crescer: 1; -ms-flex- Negativo: 2; flex-shrink: 2; -ms-flex-flex-preferido: 100px; flex-base: 100px; -ms-flex: 1 2 100px; flex: 1 2 100px; -ms-flex-item-align : Centro; alinhar-self: centro; -Webkit-box-ordinal-grupo: 3; -ms-flex-ordem: 2; ordem: 2;)

É melhor se as propriedades com prefixos irão para a propriedade original.
Não há desnecessário para prefixos hoje (por Caniuse) hoje (por Caniuse), mas em geral prefixos mais.

Cromada. Safári. Raposa de fogo. Ópera. Ie. Android iOS.
20- (antigo) 3.1+ (antigo) 2-21 (antigo) 10 (tweercer) 2.1+ (antigo) 3.2+ (antigo)
21+ (novo) 6.1+ (novo) 22+ (novo) 12.1+ (novo) 11+ (novo) 4.4+ (novo) 7.1+ (novo)
  • (Novo) - Nova Sintaxe: Display: Flex; .
  • (Tweener) - Antiga sintaxe não oficial 2011: Display: Flexbox; .
  • (Antigo) - antiga sintaxe 2009: display: caixa;

Vídeo

Bem, não se esqueça do vídeo, às vezes também é interessante e compreensível. Aqui está um par de populares:

Links úteis para flex

    flexboxFroggy.com - Jogo Educacional Flexbox.

    O FlexPlorer é um designer de código flexível visual.