使网格容器填充列而不是行
P粉551084295
2023-08-27 20:59:46
<p>我希望我的网格像这样垂直填充:</p>
<pre class="brush:php;toolbar:false;">1 4 7
2 5 8
3 6 9
... arbitrary number of additional rows.</pre>
<p>相反,它会像这样水平填充:</p>
<pre class="brush:php;toolbar:false;">1 2 3
4 5 6
7 8 9</pre>
<p><strong>我想指定网格中的列数,而不是行数。</strong></p>
<p>这就是我的 div 使用内联 CSS 样式的样子:</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>网格的宽度必须为 3 列,这一点很重要,但我希望项目按列填充,而不是按行填充。这在 CSS 网格中可能吗?我已通读此 https://css-tricks.com/snippets/css/complete-guide-grid/ 但没有看到任何有关顺序的内容。</p>
<p>CSS Flexbox 有 <code>flex-direction</code>,CSS Grid 没有类似的属性吗?</p>
对于根据需要创建新列且未定义行的垂直流动网格,请考虑使用 CSS 多列布局(示例)。 CSS 网格布局(至少当前实现 - 级别 1)无法执行此操作任务。问题是这样的:
在 CSS 网格布局中,
grid-auto-flow
和grid-template-rows
/grid-template-columns 属性。
更具体地说,如果同时定义了
grid-auto-flow: row
(默认设置)和grid-template-columns
,网格项可以在水平方向上很好地流动,根据需要自动创建新行。这个概念在问题的代码中得到了说明。但是,切换到
grid-template-rows
后,网格项会堆叠在单列中。使用
grid-auto-flow: row
和grid-template-rows
不会自动创建列。必须定义grid-template-columns
(因此,与grid-auto-flow
呈反比关系)。相反的情况下也有同样的行为。
定义了
grid-auto-flow:column
和grid-template-rows
后,网格项可以在垂直方向上很好地流动,并根据需要自动创建新列。但是,切换到
grid-template-columns
后,网格项会堆叠在一行中。 (这是大多数人问的问题,包括在这个问题中。)不会自动创建行。这需要定义
grid-template-rows
。 (这是最常提供的解决方案,但通常会被拒绝,因为布局的行数是可变的。)因此,请考虑采用多列布局解决方案,如上所述。
规范参考:7.7。自动放置:
grid-auto-flow
属性