Grid-auto-columnas | Trucos CSS - Trucos CSS - Aprender Marketing
CSS

Grid-auto-columnas | Trucos CSS – Trucos CSS

Los grid-auto-columns La propiedad CSS es parte de la Especificación de diseño de cuadrícula CSSespecificando el tamaño de las columnas de cuadrícula que se crean sin tener un tamaño explícito. En otras palabras, esta propiedad establece el tamaño de las columnas implícitas y todas las demás columnas que no se han dimensionado explícitamente en grid-template-columns Propiedad.

 

.grid-container {
  display: grid;
  grid-template-areas: "media detail detail";
  grid-template-columns: 200px 400px;
  grid-auto-columns: 150px;
}

Este ejemplo crea un contenedor de cuadrícula con tres columnas definidas por grid-template-areasLas dos primeras columnas tienen un tamaño explícito establecido por grid-template-columnspero no la última columna. aquí es donde grid-auto-columns ingresa y establece el tamaño de esta columna para 150px.

grid-auto-columns casos de uso

Como dijimos arriba, grid-auto-columns establece el tamaño de todas las columnas que no tienen un tamaño explícito. Ahora la pregunta es, ¿qué columnas no tienen un tamaño explícito? ¿O cómo crea la cuadrícula columnas sin un tamaño explícito?

Aquí hay algunas situaciones en las que esto puede suceder.

Columnas definidas por grid-template-areas que no tienen un tamaño explícito establecido por grid-template-columns

El primer caso es el que vimos al principio de este artículo. Una cuadrícula puede tener una columna explícita definida por grid-template-areas sin que su tamaño sea establecido explícitamente por grid-template-columns Propiedad.

.grid-container {
  display: grid;
  grid-template-areas: "media detail detail"; /* 3 columns */
  grid-template-columns: 200px 150px; /* 2 sizes */
}

La primera columna se establece en 200px y el segundo tiene un tamaño fijo de 150pxY dado que la última columna no tiene un tamaño explícito, se establecerá en auto y ocupar el espacio disponible que dejan las otras dos columnas.

Si sumamos y grid-auto-columns al ejemplo anterior también podemos controlar el tamaño de la última columna:

.grid-container {
  display: grid;
  grid-template-areas: "media detail detail";
  grid-template-columns: 200px 150px;
  grid-auto-columns: 150px;
}

Ahora, como puede ver en la siguiente imagen, el tamaño de la última columna se establece en 150px:

Tres columnas, con el tamaño de la última columna establecido en 150px usando grid-auto-columns Propiedad.

Tenga en cuenta que las canciones que no tienen una medida clara son auto-Talla.

Las columnas implícitas se crean cuando hay más elementos de cuadrícula que celdas

Una red definida por grid-template-columns, grid-template-rows o y grid-template-areas se llama un red transparentelo que significa que todas las rutas de cuadrícula tienen un tamaño establecido. Digamos, por ejemplo, que tenemos 12 elementos HTML secundarios en un contenedor de cuadrícula principal, y definimos explícitamente tres columnas y cuatro filas en la cuadrícula.

.grid {
  display: grid;
  grid-template-rows: repeat(4, auto);
  grid-template-columns: repeat(3, auto);
}

Tenemos cuadrículas implícitas para estas columnas y filas porque no hay información de tamaño. Solo el número de columnas y el número de filas.

Una situación en la que encontrará columnas implícitas es cuando hay más elementos de cuadrícula que columnas definidas. Imagine en nuestro último ejemplo que ahora tenemos más de 12 elementos HTML. Anteriormente, establecimos tres columnas y cuatro filas, por lo que hay exactamente 12 celdas en la cuadrícula, la cantidad perfecta para nuestros 12 elementos. Pero con más de 12 elementos, de repente tenemos un problema de desbordamiento, ¿no?

¡De nada! CSS Grid algoritmo de colocación automática crea filas o columnas adicionales para almacenar los elementos adicionales. Estas columnas y filas adicionales se denominan rastros implícitos.

De forma predeterminada, el algoritmo de inserción automática crea trazos de línea para contener elementos adicionales. En el siguiente ejemplo, queremos que nuestra cuadrícula coloque los elementos adicionales en columnas (no en filas), por lo que debemos configurar el algoritmo para colocar automáticamente columnGenial, ahora nuestra rejilla es capaz de contener cualquier cosa, sin importar cuántos objetos le arrojemos.

Sin embargo, el tamaño de las columnas implícitas se ajusta automáticamente en función del espacio restante. es por eso grid-auto-columns es muy útil: podemos dar un tamaño a todas estas columnas y la cuadrícula CSS dejará de llenar columnas cuando llegue al último elemento, incluso si la última columna en la última fila de la cuadrícula no alcanza el ancho completo de la cuadrícula,

Digamos que dimensionamos estas columnas de cuadrícula implícitas para 250px:

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 150px);
  grid-auto-flow: column; /* Set the auto-placement algorithm to column */
  grid-auto-columns: 250px;
}

Ahora, no importa cuántas columnas implícitas se creen, todas tendrán un tamaño establecido 250px.

Cuadrícula de una fila y cinco columnas con columnas de cuadrícula automáticas que establecen columnas implícitas.
La red explícita está marcada con una línea sólida y la red implícita está marcada con una línea discontinua.

Las columnas implícitas se crean cuando colocamos un elemento fuera de la cuadrícula explícita

Otro escenario donde grid-auto-columns La propiedad es útil cuando se crean trazas implícitas cuando colocamos un elemento fuera de la cuadrícula explícita. Los rastros implícitos se crean automáticamente para dejar espacio para este elemento.

.grid-container {
  display: grid;
  grid-template-columns: 150px 150px 150px; /* 3 explicit columns */
  grid-auto-columns: 150px; /* Size of the implicit columns */
}

.grid-item:last-child {
  grid-column: 5; /* Placed in 5th column in a 3-column grid */
  grid-row: 3;
}

Entonces, lo que hicimos allí se configuró al final .grid-item niño en la quinta columna… ¡pero no hay una quinta columna en nuestra cuadrícula de tres columnas! Esto coloca el último elemento de la cuadrícula fuera de la cuadrícula explícita, lo que crea dos seguimientos de columna implícitos. Aunque estas columnas se crean para nosotros, podemos configurarlas para 150px usando grid-auto-columns Propiedad.

Una cuadrícula de cinco por tres donde la celda de la última fila y la última columna contiene el último elemento de la cuadrícula.
Colocar el último elemento secundario en la quinta columna de una cuadrícula explícita de tres columnas da como resultado dos seguimientos de columna implícitos. Establecemos el tamaño de estas columnas a 150px usando grid-auto-columns Propiedad.

Sintaxis

grid-auto-columns: <track-size>+
Definición completa

where
<track-size> = <track-breadth> | minmax( <inflexible-breadth> , <track-breadth> ) | fit-content( [ <length> | <percentage> ] )

where
<track-breadth> = <length-percentage> | <flex> | min-content | max-content | auto <inflexible-breadth> = <length> | <percentage> | min-content | max-content | auto

where
<length-percentage> = <length> | <percentage>
  • Valor inicial: auto
  • Se refiere a: contenedores de red
  • Heredado: no
  • Valor calculado: como se especifica, pero con longitudes relativas convertidas a longitudes absolutas
  • Porcentajes: se refiere a la dimensión correspondiente del área de contenido
  • Tipo de animación: si las longitudes de la lista coinciden, por tipo valor calculado para el elemento c lista de pistas estimada; discreto por lo demás

Múltiples tamaños de pista

Podemos establecer múltiples tamaños de columna para cuadrículas usando el grid-auto-columns En este caso, el tamaño de varias pistas funciona como un patrón y se repite según sea necesario.

.grid-container {
  display: grid;
  grid-template-columns: 150px 150px;
  grid-auto-columns: 50px 100px 200px;
}

.grid-item:last-child {
  grid-column: 8;
}

Aquí movemos el último elemento secundario de nuestra cuadrícula fuera de las columnas explícitas y nuestra cuadrícula crea columnas implícitas para contener ese elemento como resultado. Esta cuadrícula tiene dos columnas explícitas (150px 150px) y como el último elemento quiere estar en la octava columna (grid-column: 8), seis columnas implícitas se generan automáticamente en la cuadrícula.

los grid-auto-columns establece el tamaño de la primera columna implícita en 50pxel segundo a 100px y una tercera columna para 200pxComo tenemos más de tres columnas implícitas, nuestra cuadrícula repite este patrón para dimensionarlas.

Una cuadrícula con varios tamaños de columna establecidos por la propiedad grid-auto-columns. El conjunto de valores se repite como el tamaño de las columnas implícitas.

Si tuviéramos una columna implícita más, ¿cuál sería el tamaño de esa columna?

¡Muéstrame la respuesta!

Podría ser 150pxpero apuesto a que lo sabías sin mirar. 😀

Valores

los grid-auto-columns los valores son casi los mismos que los valores de grid-template-columns propiedad, excepto en grid-auto-columns no puede usar los siguientes valores:

  • none
  • [linename]
  • repeat()
  • subgrid
  • masonry
/* Keyword values */
grid-auto-columns: auto;
grid-auto-columns: min-content;
grid-auto-columns: max-content;

/* single track-size values */
grid-auto-columns: 200px;
grid-auto-columns: 30vmin;
grid-auto-columns: 50%;
grid-auto-columns: 1.5fr;
grid-auto-columns: minmax(100px, 2fr);
grid-auto-columns: minmax(min-content, 1fr);
grid-auto-columns: fit-content(15rem);

/* multiple track-size values */
grid-auto-columns: 100px 1fr;
grid-auto-columns: 200px min-content 1fr;
grid-auto-columns: 100px 200px 50px 10%;
grid-auto-columns: minmax(100px, auto) auto max-content fit-content(200px);

/* Global values */
grid-auto-columns: inherit;
grid-auto-columns: initial; /* same as `auto` */
grid-auto-columns: revert;
grid-auto-columns: revert-layer;
grid-auto-columns: unset;

<length>

Este valor puede ser cualquier longitud de CSS no negativa válida, como px, em y rem por cierto para especificar el tamaño de la pista (es decir, el ancho) de la columna.

<percentage>

Este es un valor no negativo relativo al tamaño integrado interno del contenedor de red. Si el tamaño del contenedor de red depende del tamaño de sus pistas, entonces el porcentaje debe tratarse de la misma manera que la declaración. auto.

Una desventaja de usar un valor de porcentaje es que si agrega espacios entre pistas, el tamaño de los espacios se agregará al tamaño de las pistas, lo que puede causar un desbordamiento. fr unidad o auto palabra clave para dimensionar las pistas y evitar que esto suceda.

<flex>

Es un valor no negativo expresado en fr unidades y le permite crear cuadrículas flexibles configurando el tamaño de la pista como parte de espacio libre en el contenedor de la cuadrícula De esta manera, cuando la cuadrícula cambia de ancho, también lo hacen las columnas, lo que hace que la cuadrícula responda mejor.

Por ejemplo, considere un contenedor de red que es 900px de ancho y tiene tres columnas implícitas. Digamos que el ancho de la primera columna implícita (izquierda) es fijo (es decir, no cambia) en 300px mientras que la segunda columna ocupa una unidad fraccionaria (1fr), y la tercera columna pesa dos unidades fraccionarias (2fr):

.grid-container {
  display: grid;
  width: 900px;
  grid-auto-columns: 300px 1fr 2fr;
}

Las segundas dos columnas son fraccionarias, por lo que ocuparán el espacio disponible restante. Y en este caso, el espacio disponible es todo lo que queda después de arreglar la primera columna 300px se tiene en cuenta el ancho.Luego, las dos segundas columnas dividen lo que queda de acuerdo con la cantidad de fracciones que obtienen.

En este ejemplo, el espacio restante y disponible es 600px (es decir 900px menos 300px). Las segundas columnas obtienen una fracción (1fr) de este espacio y obtiene la tercera columna dos fracciones (2fr). Hagamos un poco de matemáticas por un momento para encontrar el ancho de una sección de 600px:

1fr = ([Grid Container Width] - [Fixed Column Width]) / [Sum of the flex factors]
1fr = (900px - 300px) / 3
1fr = 600px / 3
1fr = 200px

¡Ajá! es una fracción 200pxY como la segunda columna es 1frtiene que ser 200px así como Esto nos deja con 400px del espacio disponible (p. ej. 900px300px200px), lo cual sucede dos veces el tamaño de la segunda columna es el doble del tamaño de la segunda columna 2fr (1fr(2))!

minmax(min, max)

los minmax() La función toma dos argumentos: un valor de longitud mínima y un valor de longitud máxima. Y lo que le dice a un contenedor de red es que grid-auto-columns podría ser no más estrecho del valor mínimo, pero no más amplio del valor máximo. Nuestra Guía de funciones CSS tiene una explicación más profunda y detallada de cómo funciona la función.

Tome el siguiente ejemplo:

grid-auto-columns: 200px minmax(100px, 400px);

Aquí hay dos columnas: una es 200px de ancho y otra que se expresa como minmax(100px, 400px)Parece raro, ¿no? Pero todo lo que dice es que la segunda columna deber tomar al menos 100px espacio, pero no más de dos partes del espacio disponible después de las primeras columnas 200px es tomado en cuenta.

En palabras más sencillas: mientras haya más de 100px del espacio disponible, entonces la segunda columna se puede doblar para 400px pero tengo que detenerme ahí. De lo contrario, la columna es 100px amplio.

los min y max argumentos toman todos los siguientes valores excepto min El valor no puede ser un valor flexible (p. ej. 1fr):

<length-percentage> | <flex> | min-content | max-content | auto

Entonces esto no es válido ya que min valor es un valor flexible:

grid-auto-columns: minmax(1fr, 500px) 3fr;

Pero estos son perfectamente válidos:

grid-auto-columns: minmax(auto, 1fr) 3fr;
grid-auto-columns: minmax(200%, 1fr) 1fr;

auto

los auto palabra clave se comporta de manera similar a minmax(min-content, max-content) en la mayoría de los casos.

De auto las dimensiones de la pista se pueden estirar desde align-content y justify-content propiedades, ocuparán el espacio restante en el contenedor de red predeterminado (ya sabe, autoeso dijo auto los tamaños de pista no pueden ganar una batalla contra fr unidades al asignar el espacio restante, se ajustan al tamaño máximo de su contenido.

Eche un vistazo a la salida de estas dos canciones de muestra:

grid-auto-columns: auto auto auto;
grid-auto-columns: auto 1fr auto;

Cuando las tres columnas se establecen en auto (que también podríamos escribir como repeat(3, auto) — pero hablaremos de eso más adelante), todo lo que hacen es compartir el mismo espacio. Pero cuando colocamos una unidad fraccionaria en el medio como la segunda columna, auto las columnas son tan anchas como su contenido y 1fr la columna ocupa el espacio restante.

Demostración del comportamiento de una unidad fr en trazas automáticas

min-content

los min-content la palabra clave representa pequeñísimo el posible espacio que un elemento puede ocupar en un contenedor de red sin desbordar su contenido. El contenido puede ser textos, imágenes o videos.

Digamos que el contenido es «CSS es impresionante». min-content es el ancho del mundo «grande» porque es la parte más ancha del contenido (más ancho que «css» y «e» combinados). Si la columna se vuelve más estrecha, entonces el texto comienza a desbordar el contenedor.

En código se ve así:

.grid {
  display: grid;
  grid-auto-columns: min-content 1fr;
  gap: 1rem;
}

… lo que lleva a algo como esto:

Demostración del comportamiento de la palabra clave min-content en un diseño de cuadrícula

max-content

los max-content la palabra clave representa el tamaño más pequeño requerido para que un elemento se ajuste a todo su contenido sin envolverse ni desbordarse. Sé que un nombre que incluye «max» hace que suene como si estuviéramos tratando con un tamaño máximo, por lo que este valor puede ser un dolor de cabeza.

Si revisamos nuestra min-content ejemplo anterior, una cuadrícula con un valor de tamaño de max-content crecerá hasta que su contenido quepa en una línea. Entonces, en el caso de «CSS es increíble» max-content ¿Cuánto espacio ocupan estas tres palabras juntas en una línea?

.grid {
  display: grid;
  grid-auto-columns: max-content 1fr;
  gap: 1rem;
}
Demostración del comportamiento de la palabra clave max-content en un diseño de cuadrícula

fit-content(<length-percentage>)

los fit-content() función (hay una explicación sólida de esto en nuestra Guía de funciones CSS) usa el espacio disponible y acepta un percentage o length valor como el tamaño máximo permitido para una cuadrícula mientras se asegura de que la pista nunca se exceda max-content y nunca se contrae por encima del mínimo. El mínimo es a menudo, pero no siempre, igual a min-content.

.grid {
  display: grid;
  grid-auto-columns: fit-content(700px) fit-content(700px) 1fr;
  gap: 1rem;
}

En la siguiente figura, la primera columna no se extiende más allá max-content tamaño (es decir, el ancho de las palabras «fit-content(700px)» en una sola línea): solo se estira para ajustarse a su contenido. Sin embargo, la segunda columna tiene mucho más contenido y deja de estirarse después de convertirse en un ancho de 700pxque es la restricción establecida en la función:

Comportamiento de visualización cuando el contenido cabe en una cuadrícula CSS.
Entonces, lo que estamos diciendo aquí sobre las dos primeras columnas es que deben ser tan anchas como su contenido máximo, pero solo hasta 700pxSi puede caber todo el contenido dentro de ese límite, genial, deténgase allí. max-content f. De lo contrario, muestre todo lo que pueda hasta que 700pxluego comience a dividir en líneas adicionales.

Ejemplos

Vamos a crear una galería que tenga tres imágenes en tres columnas, y en caso de que se agreguen más imágenes, queremos que caigan en cascada a una nueva fila y columna. Para hacer esto, necesitamos crear tres columnas explícitas y colocar los elementos adicionales fuera de estas tres columnas, porque esto puede conducir a columnas implícitas e, hipotéticamente, no sabemos cuántas columnas se generarán, podemos controlar el tamaño de estas columnas implícitas, usando grid-auto-columns Propiedad.

.gallery {
  display: grid;
  grid-template-columns: repeat(3, minmax(200px, 1fr));
  grid-auto-columns: minmax(100px, 200px);
  gap: 1rem;
}
Una galería creada por CSS Grid que tiene tres columnas explícitas y tres implícitas.
Establecemos el tamaño de las columnas implícitas en minmax(100px, 200px) usando grid-auto-columns.

Especificaciones

Módulo de diseño de cuadrícula CSS 1 (Recomendación del candidato)

Compatibilidad con navegador

Más información

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Botón volver arriba