Eu quero usar o flexbox que possui algum número de itens com a mesma largura. Percebi que o flexbox distribui o espaço uniformemente, e não o próprio espaço.
Por exemplo:
.header {
display: flex;
}
.item {
flex-grow: 1;
text-align: center;
border: 1px solid black;
}
<div class="header">
<div class="item">asdfasdfasdfasdfasdfasdf</div>
<div class="item">z</div>
</div>
O primeiro item é muito maior que o segundo. Se eu tiver 3 itens, 4 itens ou n itens, desejo que todos apareçam na mesma linha com uma quantidade igual de espaço por item.
Alguma ideia?
flex
propriedade é um atalho para osflex-grow
,flex-shrink
eflex-basis
propriedades. É recomendável usar a abreviação sobre as propriedades individuais, pois ela redefine corretamente qualquer componente não especificado para acomodar usos comuns. O valor inicial é0 1 auto
.min-width: 0
para conseguir usar elementos filho com texto transbordando. Veja css-tricks.com/flexbox-truncated-textVocê pode adicionar
flex-basis: 100%
para conseguir isso.Exemplo atualizado
Pelo que vale, você também pode usar
flex: 1
os mesmos resultados.A abreviação de
flex: 1
é igual aflex: 1 1 0
, que é equivalente a:fonte
flex: 0 1 auto
. O que significa que a configuraçãoflex: 1
resultará emflex: 1 1 auto
. Isso não vai funcionar. A resposta correta éflex: 1 1 0
como declarado acima por Adamflex: 1
resultadosflex: 1 1 0
não éflex: 1 1 auto
como você está reivindicando. Veja a especificação oficial do W3 na seção 'flex shorthand' : quandoflex-basis
é "omitido da flex shorthand, seu valor especificado é0
", nãoauto
. Obrigado pelo voto aleatório.flex: 1
eflex-direction: column
. A altura das crianças não era a mesma quando outros elementos eram colocados nas crianças. A única coisa que consertou foi definirflex: 1 1 0
. Ele ainda permanece hoje com o cromo 55.0.2883.87flex: 1
tem o mesmo comportamentoflex: 1 1 0
eflex: 0 1 auto
tem um comportamento diferente.Você precisa adicionar
width: 0
para tornar as colunas iguais se o conteúdo dos itens aumentar.fonte
.item
fazê-lo crescer mais do que.item
seria naturalmente.flex: 1 1 0;
, em vez deflex-grow: 1 1 0;
flex-basis
para0
serve para o mesmo propósito que a configuraçãowidth
de0
.A resposta aceita por Adam (
flex: 1 1 0
) funciona perfeitamente para contêineres flexbox cuja largura é fixa ou determinada por um ancestral. Situações em que você deseja que as crianças encaixem no recipiente.No entanto, você pode ter uma situação em que deseja que o contêiner caiba nas crianças, com as crianças do mesmo tamanho com base na criança maior. Você pode fazer com que um contêiner flexbox se adapte a seus filhos:
position: absolute
e não configuraçãowidth
ouright
, oudisplay: inline-block
Para esses recipientes flexbox, a resposta aceita NÃO funciona, as crianças não têm o mesmo tamanho. Presumo que essa seja uma limitação do flexbox, pois se comporta da mesma maneira no Chrome, Firefox e Safari.
A solução é usar uma grade em vez de uma caixa flexível.
Demonstração: https://codepen.io/brettdonald/pen/oRpORG
fonte
Não sou especialista em flex, mas cheguei lá definindo a base para 50% para os dois itens com os quais estava lidando. Aumente para 1 e diminua para 0.
Estilo embutido:
flex: '1 0 50%',
fonte