Quiero usar flexbox que tiene una cierta cantidad de elementos que son todos del mismo ancho. Me di cuenta de que flexbox distribuye el espacio de manera uniforme, en lugar del espacio en sí.
Por ejemplo:
.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>
El primer artículo es mucho más grande que el segundo. Si tengo 3 elementos, 4 elementos o n elementos, quiero que todos aparezcan en la misma línea con la misma cantidad de espacio por elemento.
¿Algunas ideas?
flex
propiedad es una propiedad abreviada para losflex-grow
,flex-shrink
yflex-basis
propiedades. Se recomienda usar la taquigrafía sobre las propiedades individuales ya que la taquigrafía restablece correctamente cualquier componente no especificado para acomodar usos comunes. El valor inicial es0 1 auto
.min-width: 0
para lograr el uso de elementos secundarios con texto desbordado. Ver css-tricks.com/flexbox-truncated-textPodrías agregar
flex-basis: 100%
para lograr esto.Ejemplo actualizado
Por lo que vale, también podría usarlo
flex: 1
para obtener los mismos resultados.La abreviatura de
flex: 1
es la misma queflex: 1 1 0
, que es equivalente a:fuente
flex: 0 1 auto
. Lo que significa que la configuraciónflex: 1
dará como resultadoflex: 1 1 auto
. Esto no funcionará. La respuesta correcta es laflex: 1 1 0
indicada anteriormente por Adamflex: 1
resultadosflex: 1 1 0
no esflex: 1 1 auto
como la que estás reclamando. Eche un vistazo a la especificación oficial de W3 en la sección 'taquigrafía flexible' : cuandoflex-basis
se "omite de la taquigrafía flexible, su valor especificado es0
", noauto
. Gracias por el voto negativo al azar.flex: 1
yflex-direction: column
. La altura de los niños no era la misma cuando se colocaban otros elementos dentro de los niños. Lo único que lo solucionó fue la configuraciónflex: 1 1 0
. Todavía se mantiene hoy con cromo 55.0.2883.87flex: 1
tiene el mismo comportamientoflex: 1 1 0
yflex: 0 1 auto
tiene un comportamiento diferente.Debe agregar
width: 0
para hacer que las columnas sean iguales si el contenido de los elementos lo hace crecer más grande.fuente
.item
hace que crezca más de.item
lo que sería naturalmente.flex: 1 1 0;
, en lugar deflex-grow: 1 1 0;
flex-basis
to0
sirve para el mismo propósito que configurarwidth
to0
.La respuesta aceptada por Adam (
flex: 1 1 0
) funciona perfectamente para contenedores flexbox cuyo ancho es fijo o determinado por un antepasado. Situaciones en las que desea que los niños encajen en el contenedor.Sin embargo, puede tener una situación en la que desea que el contenedor se ajuste a los niños, con los niños del mismo tamaño en función del niño más grande. Puede hacer que un contenedor flexbox se ajuste a sus hijos de la siguiente manera:
position: absolute
y no ajustewidth
oright
, odisplay: inline-block
Para tales contenedores flexbox, la respuesta aceptada NO funciona, los niños no tienen el mismo tamaño. Supongo que esta es una limitación de flexbox, ya que se comporta igual en Chrome, Firefox y Safari.
La solución es usar una cuadrícula en lugar de una caja flexible.
Demostración: https://codepen.io/brettdonald/pen/oRpORG
fuente
No soy un experto en flex, pero llegué estableciendo la base al 50% para los dos elementos con los que estaba tratando. Crecer a 1 y reducir a 0.
Estilo en línea:
flex: '1 0 50%',
fuente