Tengo un diseño simple de caja flexible con un contenedor como:
.grid {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
}
Ahora quiero que los elementos en la última fila estén alineados con el otro. justify-content: space-between;
debe usarse porque el ancho y la altura de la cuadrícula se pueden ajustar.
Actualmente parece
Aquí, quiero que el elemento en la parte inferior derecha esté en la "columna central". ¿Cuál es la forma más sencilla de lograr eso? Aquí hay un pequeño jsfiddle que muestra este comportamiento.
.exposegrid {
display: flex;
flex-flow: row wrap;
justify-content: space-between;
}
.exposetab {
width: 100px;
height: 66px;
background-color: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(0, 0, 0, 0.4);
border-radius: 5px;
box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
margin-bottom: 10px;
}
<div class="exposegrid">
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
<div class="exposetab"></div>
</div>
css
flexbox
grid-layout
Thorben Croisé
fuente
fuente
Respuestas:
Agregue uno
::after
que rellene automáticamente el espacio. No es necesario contaminar su HTML. Aquí hay un codepen que lo muestra: http://codepen.io/DanAndreasson/pen/ZQXLXjfuente
justify-content: space-between;
de.grid
y se retira.grid:after
y funciona de la misma. Ahora si intentaste algo como esto, se rompe totalmente. Observe que los anchos para cada conjunto de 4 no suman 100%. En el violín del OP, los anchos se configuran en px para que su solución no funcione en esta situación.space-between
. Sin embargo, cuando configuro elflex-basis
de.grid:after
al mismo tamaño que los otros elementos en la cuadrícula (por punto de interrupción, anulando el código de módulo predeterminado / base anterior), la última fila se extendió correctamente. Parece funcionar en Safari, iOS, Firefox, Chrome (necesito probar IE) y mi tamaño de fila más grande es 3 en mi implementación inicial.{ content: "";flex: 0 0 32%;max-width: 480px;}
y cambié el ancho máximo con cambios de consulta de medios para que la cuadrícula fuera perfecta en todos los anchos.Una técnica sería insertar una cantidad de elementos adicionales (tantos como la cantidad máxima de elementos que alguna vez esperas tener en una fila) que tienen altura cero. El espacio todavía está dividido, pero las filas superfluas colapsan en nada:
http://codepen.io/dalgard/pen/Dbnus
En el futuro, esto se puede lograr mediante el uso de múltiples
::after(n)
.fuente
Como han mencionado otros carteles: no hay una forma limpia de alinear a la izquierda la última fila con flexbox (al menos según las especificaciones actuales)
Sin embargo, para lo que vale: con el Módulo de diseño de cuadrícula CSS, esto es sorprendentemente fácil de producir:
Básicamente, el código relevante se reduce a esto:
1) Convertir el elemento contenedor en un contenedor de cuadrícula
2) Establezca la cuadrícula con columnas automáticas de ancho 100px. (Tenga en cuenta el uso de autocompletar (como se indica en este documento
auto-fit
, que (para un diseño de 1 fila) contrae las pistas vacías a 0), lo que hace que los elementos se expandan para ocupar el espacio restante. 'diseño cuando la cuadrícula tiene solo una fila, que en nuestro caso no es lo que queremos (consulte esta demostración para ver la diferencia entre ellos).3) Establezca espacios / canales para las filas y columnas de la cuadrícula, aquí, dado que desea un diseño de 'espacio intermedio', el espacio en realidad será un espacio mínimo porque crecerá según sea necesario.
4) Similar a flexbox.
Mostrar fragmento de código
Codepen Demo (Cambiar tamaño para ver el efecto)
fuente
auto-fit
, hubo un error en Chrome 57-60 (y en los navegadores basados en su motor, como Samsung Internet 6.0) porque la especificación era un poco ambigua en ese momento. Ahora se ha aclarado la especificación y las nuevas versiones de Chrome se procesanauto-fit
correctamente, pero los navegadores con motores antiguos todavía están en uso, así que tenga cuidado con este valor.:after
pseudoelementos puede conducir a resultados no deseados en casos extremos.Sin ningún marcado adicional, solo agregar
::after
funcionó para mí especificando el ancho de la columna.Con el HTML como este:
fuente
flex-basis: 10em
lugar de ancho.No puedes Flexbox no es un sistema de cuadrícula. No tiene las construcciones del lenguaje para hacer lo que está pidiendo, al menos no si está usando
justify-content: space-between
. Lo más cercano que puede obtener con Flexbox es usar la orientación de la columna, que requiere establecer una altura explícita:http://cssdeck.com/labs/pvsn6t4z (nota: prefijos no incluidos)
Sin embargo, sería más simple usar columnas, que tienen un mejor soporte y no requieren establecer una altura específica:
http://cssdeck.com/labs/dwq3x6vr (nota: prefijos no incluidos)
fuente
Una posible solución es usar
justify-content: flex-start;
en el.grid
contenedor, restricciones de tamaño en sus elementos secundarios y márgenes en los elementos secundarios apropiados , dependiendo del número deseado de columnas.Para una cuadrícula de 3 columnas, el CSS básico se vería así:
Es otra solución imperfecta, pero funciona.
http://codepen.io/tuxsudo/pen/VYERQJ
fuente
Sé que hay muchas respuestas aquí, pero ... La forma más simple de hacer esto es con un en
grid
lugar deflex
ygrid template columns
conrepeat
yauto fills
, donde debe establecer el número de píxeles que ha dado a cada elemento,100px
desde su código de fragmento.fuente
Si.! Podemos pero con algunas consultas de medios y el número máximo de columnas están predefinidas .
Aquí estoy usando 4 columnas. Revisa mi código:
NOTA
1) No es necesario crear div hijo. Puede ser cualquier otra etiqueta como 'img' r lo que quieras ...
2) Si quieres más columnas, ajusta las consultas de medios y el número máximo de columnas.
fuente
Si desea una cuadrícula con algo de espacio entre los elementos y los elementos que comienzan sin ningún espacio inicial, entonces esta solución simple funciona:
Si desea el espacio inicial de 5px, simplemente elimine el margen negativo :) Simple.
https://jsfiddle.net/b97ewrno/2/
La respuesta aceptada, aunque es buena, hace que no haya espacio entre los elementos en la segunda fila.
fuente
Si desea alinear el último elemento a la cuadrícula, use el siguiente código:
Contenedor de rejilla
Artículo en la cuadrícula
El truco consiste en establecer el ancho máximo del elemento igual al ancho máximo de .card-grid: después.
Demostración en vivo en Codepen
fuente
Es posible usar "flex-start" y agregar los márgenes manualmente. Requiere un poco de pirateo matemático, pero definitivamente es fácil de hacer y es fácil de usar con un preprocesador CSS como LESS.
Ver por ejemplo este MENOS mixin:
Y luego se puede usar fácilmente para mostrar un diseño de cuadrícula sensible:
Aquí hay un ejemplo de
http://codepen.io/anon/pen/YyLqVB?editors=110
fuente
Este problema se resolvió para mí usando la cuadrícula CSS,
Esta solución es aplicable solo si tiene un número fijo de columnas, es decir, no. de elementos para mostrar en una sola fila
-> usando la cuadrícula pero sin especificar el número de filas, ya que el número de elementos aumenta, se ajusta en columnas y agrega filas dinámicamente, he especificado tres columnas en este ejemplo
-> no tiene que dar ninguna posición a su hijo / células, ya que lo solucionará, lo que no queremos.
fuente
Esta versión es la mejor manera para bloques con ancho fijo:
http://codepen.io/7iomka/pen/oxxeNE
En otros casos - versión de dalgard
http://codepen.io/dalgard/pen/Dbnus
fuente
Hay una forma sin flexbox, aunque deberá cumplir con las siguientes condiciones. 1) El contenedor tiene relleno. 2) Los artículos son del mismo tamaño y sabes exactamente cuántos quieres por línea.
El relleno más pequeño en el lado derecho del contenedor permite el relleno adicional a la derecha de cada elemento de la lista. Suponiendo que otros elementos en el mismo padre que el objeto de la lista están rellenados con 0 5%, quedará al ras con ellos. También puede ajustar los porcentajes a la cantidad de margen que desee o usar calcular valores px.
Por supuesto, puede hacer lo mismo sin el relleno en el contenedor utilizando nth-child (IE 9+) para eliminar el margen en cada tercer cuadro.
fuente
Usando flexbox y algunas consultas de medios, hice esta pequeña solución: http://codepen.io/una/pen/yNEGjv (es un poco hacky pero funciona):
fuente
Hice un SCSS mixin para ello.
Este es el enlace codepen: http://codepen.io/diana_aceves/pen/KVGNZg
Solo tiene que establecer el ancho de los elementos en porcentaje y número de columnas.
Espero que esto pueda ayudarte.
fuente
Aquí hay otro par de mezclas de scss.
Estos mixins suponen que no va a utilizar complementos js como Isotope (no respetan el orden de marcado html, por lo que se equivocan con las reglas nss de css).
Además, podrá aprovecharlos al máximo, especialmente si está escribiendo sus puntos de respuesta de manera móvil. Lo ideal sería utilizar flexbox_grid () en el punto de interrupción más pequeño y flexbox_cell () en los siguientes puntos de interrupción. flexbox_cell () se encargará de restablecer los márgenes previamente establecidos que ya no se usan en puntos de interrupción más grandes.
Y, por cierto, siempre y cuando configure correctamente las propiedades flexibles de su contenedor, también puede usar solo flexbox_cell () en los elementos, si es necesario.
Aquí está el código:
Uso:
Obviamente, depende de usted eventualmente establecer el relleno / margen / ancho del contenedor y los márgenes inferiores de la celda y similares.
¡Espero eso ayude!
fuente
Esto es bastante hacky, pero funciona para mí. Estaba tratando de lograr espacios / márgenes consistentes.
http://codepen.io/rustydev/pen/f7c8920e0beb0ba9a904da7ebd9970ae/
fuente
Parece que nadie propuso la solución de crecimiento flexible en el último artículo. La idea es tener su último elemento flexible para tomar todo el lugar que pueda usando flex-grow: 1.
Nota: Esta solución no es perfecta, especialmente si tiene elementos centrados dentro de sus elementos flexibles, ya que se centrará en el último elemento posiblemente enorme.
fuente
Esta es una combinación de muchas de las respuestas, pero hace exactamente lo que estaba necesitando, es decir, alinear al último niño en un contenedor flexible a la izquierda mientras se mantiene el comportamiento de espacio intermedio (en este caso, es de tres columnas diseño).
Aquí está el marcado:
fuente
flex-grow: 0.9
lugar deflex-basis
trabajos para cualquier cantidad de columnas. Probado en un montón de navegadores modernos: funciona en todos ellos, pero el relleno está roto en IE (pero funciona en Edge0Asumiendo:
Establezca un margen izquierdo en cada elemento, excepto el primer, quinto y noveno elemento, y así sucesivamente. Si el margen izquierdo es de 10 px, entonces cada fila tendrá un margen de 30 px distribuido entre 4 elementos. El ancho porcentual para el artículo se calcula de la siguiente manera:
Esta es una solución decente para problemas relacionados con la última fila de flexbox.
fuente
Si conoce el ancho de los espacios entre los elementos en la fila y la cantidad de elementos en una fila, esto funcionaría:
fuente
Simplemente use el truco Jquery / Javascript para agregar un div vacío:
fuente
Oh chico, creo que encontré una buena solución con CSS mínimo y sin JS. Echale un vistazo:
¡La clave aquí es recordar que lo que estamos tratando de lograr es exactamente lo que
text-align: justify
hace!Los elementos vacíos en el HTML están ahí para que la última fila se muestre perfectamente sin cambiar la apariencia, pero puede que no sea necesario dado lo que está tratando de lograr. Para un equilibrio perfecto en cada situación, necesita al menos x-4 elementos vacíos, x es el número de elementos para mostrar, o n-2, n es el número de columna que desea mostrar.
fuente
Simplemente agregue algunos elementos falsos con las mismas propiedades, excepto la altura establecida en 0px hasta el final.
fuente
quieres alinear
usar en
align-content: flex-start;
lugar dejustify-content: space-between;
esto tira los elementos de la última fila hacia la izquierda y también distribuye el espacio de manera uniforme,
https://codepen.io/anon/pen/aQggBW?editors=1100
¡La solución de danAnderson NO ES DINÁMICA. PERIODO!
cuando el ancho del elemento cambió de 25 a 28, dan anderson falla el espacio entre imágenes
danAnderson: https://codepen.io/anon/pen/ZwYPmB?editors=1100
dinámico: https://codepen.io/anon/pen/aQggBW?editors=1100
Eso es lo que he estado tratando de decir. dans es hacky .....
fuente
Pude hacerlo
justify-content: space-between
en el contenedorfuente