Make grid container fill columns instead of rows
P粉551084295
2023-08-27 20:59:46
<p>I want my grid to fill vertically like this: </p>
<pre class="brush:php;toolbar:false;">1 4 7
2 5 8
3 6 9
... arbitrary number of additional rows.</pre>
<p>Instead, it will fill horizontally like this: </p>
<pre class="brush:php;toolbar:false;">1 2 3
4 5 6
7 8 9</pre>
<p><strong>I want to specify the number of columns in the grid, not the number of rows. </strong></p>
<p>This is what my div looks like using inline CSS styling: </p>
<p><br /></p>
<pre class="snippet-code-html lang-html prettyprint-override"><code><div style="display:grid; grid-template-columns:1fr 1fr 1fr;">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
</div></code></pre>
<p><br /></p>
<p>It's important that the grid is 3 columns wide, but I want the items to fill in columns, not rows. Is this possible in CSS grid? I've read through this https://css-tricks.com/snippets/css/complete-guide-grid/ but don't see anything about order. </p>
<p>CSS Flexbox has <code>flex-direction</code>, doesn’t CSS Grid have a similar property? </p>
For a vertically flowing grid that creates new columns as needed and has no defined rows, consider using CSS Multi-Column Layout (Example). CSS Grid Layout (at least the current implementation - Level 1) cannot perform this operation task. The question is this:
In CSS grid layout, the
grid-auto-flow
andgrid-template-rows
/grid-template-columns properties.
More specifically, grid items can be oriented horizontally if both
grid-auto-flow: row
(the default setting) andgrid-template-columns
are defined Flows nicely, automatically creating new rows as needed. This concept is illustrated in the code in the question.However, after switching to
grid-template-rows
, the grid items are stacked in a single column.Using
grid-auto-flow: row
andgrid-template-rows
will not automatically create columns.grid-template-columns
must be defined (thus, inversely related togrid-auto-flow
).The opposite case also has the same behavior.
With
grid-auto-flow:column
andgrid-template-rows
defined, grid items can flow nicely in the vertical direction and be automatically created as needed new column.However, after switching to
grid-template-columns
, the grid items are stacked in a row. (This is the question most people ask, including in this question.)Rows will not be created automatically. This requires defining
grid-template-rows
. (This is the most commonly offered solution, but is usually rejected because the layout has a variable number of rows.)Therefore, please consider adopting the multi-column layout solution, as mentioned above.
Specification reference: 7.7. Automatic placement:
grid-auto-flow
Properties