W3docs

Propiedad CSS grid-auto-flow

La propiedad CSS grid-auto-flow especifica cómo fluyen los elementos colocados automáticamente en la cuadrícula. Ver ejemplos con distintos valores.

La propiedad grid-auto-flow controla cómo funciona el algoritmo de colocación automática de la cuadrícula, es decir, cómo se distribuyen en el grid los elementos que no has posicionado de forma explícita.

Cuando colocas elementos manualmente con grid-column-start, grid-row-start o grid-area, el navegador los sitúa exactamente donde indicas. El resto de elementos se colocan automáticamente, y grid-auto-flow decide el orden y la dirección que usa el navegador para rellenar las celdas restantes. Esta propiedad es ideal cuando tienes un contenedor de cuadrícula con un número variable o desconocido de elementos hijo y quieres que se distribuyan de forma predecible sin dimensionar cada uno.

Esta propiedad acepta las siguientes palabras clave: row, column, dense, row-dense y column-dense. Puedes usar una sola palabra clave (row, column o dense) o dos palabras clave, donde una establece la dirección y la otra es dense (row dense / column dense). Si no especificas una dirección, se asume row.

Cómo funciona

  • row (el valor predeterminado) rellena la cuadrícula fila a fila, de izquierda a derecha, añadiendo nuevas filas según sea necesario.
  • column rellena columna a columna, de arriba abajo, añadiendo nuevas columnas según sea necesario.
  • dense activa un algoritmo de empaquetado denso. Por defecto (empaquetado disperso), el algoritmo solo avanza hacia adelante, por lo que un elemento grande puede dejar un hueco que los elementos más pequeños posteriores omiten. Con dense, el navegador retrocede para rellenar esos huecos con cualquier elemento que quepa, lo que puede hacer que los elementos aparezcan fuera del orden del DOM. Úsalo solo cuando la densidad visual sea más importante que el orden de lectura o de tabulación, ya que puede perjudicar la accesibilidad.
Valor inicialrow
Se aplica aContenedores de cuadrícula.
Se heredaNo.
AnimableNo.
VersiónCSS Grid Layout Module Level 1
Sintaxis DOMobject.style.gridAutoFlow = "row";

Sintaxis

Sintaxis de la propiedad CSS grid-auto-flow

grid-auto-flow: row | column | dense | row-dense | column-dense | initial | inherit;

Ejemplo: grid-auto-flow: column

Con grid-auto-flow: column, los cuatro elementos rellenan la cuadrícula columna a columna. Compáralo con el ejemplo de row que sigue para ver la diferencia en el orden de colocación.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grey-container {
        display: grid;
        grid-template-columns: auto auto auto;
        grid-template-rows: auto auto;
        grid-auto-flow: column;
        gap: 10px;
        background-color: #ccc;
        padding: 10px;
      }
      .grey-container > div {
        background-color: #eee;
        text-align: center;
        padding: 20px 0;
        font-size: 30px;
      }
    </style>
  </head>
  <body>
    <h2>Grid-auto-flow property example</h2>
    <h3>grid-auto-flow: column</h3>
    <div class="grey-container">
      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
    </div>
  </body>
</html>

Aquí los elementos se colocan rellenando cada columna. En el siguiente ejemplo podemos ver que los elementos se colocan rellenando cada fila.

Ejemplo: grid-auto-flow: row

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .white-container {
        display: grid;
        grid-template-columns: auto auto auto;
        grid-template-rows: auto auto;
        grid-auto-flow: row;
        gap: 10px;
        background-color: #ccc;
        padding: 10px;
      }
      .white-container > div {
        background-color: #fff;
        text-align: center;
        padding: 20px 0;
        font-size: 30px;
      }
    </style>
  </head>
  <body>
    <h2>Grid-auto-flow property example</h2>
    <h3>grid-auto-flow: row</h3>
    <div class="white-container">
      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>4</div>
    </div>
  </body>
</html>

Ejemplo: grid-auto-flow: row (con colocación explícita)

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grey-container {
        height: 250px;
        width: 250px;
        display: grid;
        gap: 20px;
        grid-template: repeat(4, 1fr) / repeat(2, 1fr);
        grid-auto-flow: row;
        background-color: #ccc;
        padding: 10px;
      }
      .box1 {
        background-color: #00f3ff;
        grid-row-start: 3;
      }
      .box2 {
        background-color: #ff00d4;
      }
      .box3 {
        background-color: #827c7c;
      }
      .box4 {
        grid-column-start: 2;
        background-color: orange;
      }
    </style>
  </head>
  <body>
    <div class="grey-container">
      <div class="box1"></div>
      <div class="box2"></div>
      <div class="box3"></div>
      <div class="box4"></div>
    </div>
  </body>
</html>

Resultado

propiedad grid-auto-flow

Ejemplo: grid-auto-flow: column (con colocación explícita)

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grey-container {
        height: 250px;
        width: 250px;
        display: grid;
        gap: 20px;
        grid-template: repeat(4, 1fr) / repeat(2, 1fr);
        grid-auto-flow: column;
        background-color: #ccc;
        padding: 10px;
      }
      .box1 {
        background-color: #00f3ff;
        grid-row-start: 3;
      }
      .box2 {
        background-color: #827c7c;
      }
      .box3 {
        background-color: #ff00d4;
      }
      .box4 {
        grid-column-start: 2;
        background-color: #4cbb13;
      }
    </style>
  </head>
  <body>
    <div class="grey-container">
      <div class="box1"></div>
      <div class="box2"></div>
      <div class="box3"></div>
      <div class="box4"></div>
    </div>
  </body>
</html>

Ejemplo: grid-auto-flow: column-dense

Los dos ejemplos siguientes muestran las variantes de empaquetado dense. Como box1 se coloca explícitamente en la fila 3 (grid-row-start: 3), deja un hueco al inicio de la cuadrícula. La palabra clave dense permite al navegador mover un elemento posterior a ese hueco en lugar de dejarlo vacío: más compacto, pero los elementos ya no siguen el orden del código fuente.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grey-container {
        height: 250px;
        width: 250px;
        display: grid;
        gap: 20px;
        grid-template: repeat(4, 1fr) / repeat(2, 1fr);
        grid-auto-flow: column-dense;
        background-color: #ccc;
        padding: 10px;
      }
      .box1 {
        background-color: #0ad6e0;
        grid-row-start: 3;
      }
      .box2 {
        background-color: #841c72;
      }
      .box3 {
        background-color: #827c7c;
      }
      .box4 {
        grid-column-start: 2;
        background-color: #4cbb13;
      }
    </style>
  </head>
  <body>
    <div class="grey-container">
      <div class="box1"></div>
      <div class="box2"></div>
      <div class="box3"></div>
      <div class="box4"></div>
    </div>
  </body>
</html>

Ejemplo: grid-auto-flow: row-dense

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .grey-container {
        height: 250px;
        width: 250px;
        display: grid;
        gap: 20px;
        grid-template: repeat(4, 1fr) / repeat(2, 1fr);
        grid-auto-flow: row-dense;
        background-color: #ccc;
        padding: 10px;
      }
      .box1 {
        background-color: #0ad6e0;
        grid-row-start: 3;
      }
      .box2 {
        background-color: #841c72;
      }
      .box3 {
        background-color: #827c7c;
      }
      .box4 {
        grid-column-start: 2;
        background-color: #4cbb13;
      }
    </style>
  </head>
  <body>
    <div class="grey-container">
      <div class="box1"></div>
      <div class="box2"></div>
      <div class="box3"></div>
      <div class="box4"></div>
    </div>
  </body>
</html>

Valores

ValorDescripciónPruébalo
rowColoca los elementos rellenando cada fila, añadiendo nuevas filas si es necesario. Este es el valor predeterminado de esta propiedad.Pruébalo »
columnColoca los elementos rellenando cada columna, añadiendo nuevas columnas si es necesario.Pruébalo »
denseColoca los elementos para rellenar cualquier hueco en el grid, independientemente del tamaño del elemento. Esto puede hacer que los elementos colocados automáticamente aparezcan fuera del orden del DOM.Pruébalo »
row-denseColoca los elementos rellenando cada fila y rellena los huecos en el grid.Pruébalo »
column-denseColoca los elementos rellenando cada columna y rellena los huecos en el grid.Pruébalo »
initialHace que la propiedad use su valor predeterminado.
inheritHereda la propiedad de su elemento padre.

Cuándo usarlo

Utiliza grid-auto-flow cuando el número de elementos de la cuadrícula sea dinámico —una lista de tarjetas, un muro de fotos, una nube de etiquetas— y quieras que el navegador los coloque por ti. Cambia a column cuando el contenido deba leerse de arriba abajo antes de saltar a la siguiente columna, y añade dense solo cuando rellenar cada hueco sea más importante que mantener los elementos en el orden del código fuente.

El tamaño de las pistas creadas implícitamente se controla por separado con grid-auto-columns y grid-auto-rows. Para diseños explícitos, consulta grid-template y el capítulo principal de CSS Grid.

Práctica

Práctica
¿Qué hace la propiedad CSS grid-auto-flow?
¿Qué hace la propiedad CSS grid-auto-flow?
Was this page helpful?