【发布时间】:2017-12-05 18:13:03
【问题描述】:
我正在尝试创建一个有序的多列列表,但在使用 CSS 网格布局规则时遇到了困难。
期望的结果应该是响应式的。在小屏幕上 2 个网格列,在大屏幕上最多 4 个,同时保持列顺序。
而不是像这样被订购:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15
它们的顺序应该是这样的:
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12
我觉得我和this fiddle很亲近。
ol {
margin: 0;
padding: 0;
list-style: none;
background-color: grey;
display: grid;
grid-template-columns: repeat(auto-fit, minmax(33.333%, 50%));
grid-auto-flow: column;
grid-template-rows: repeat(5, 1em);
}
li {
outline: 1px solid orange;
}
<ol>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
<li>Item 7</li>
<li>Item 8</li>
<li>Item 9</li>
<li>Item 10</li>
<li>Item 11</li>
<li>Item 12</li>
<li>Item 13</li>
<li>Item 14</li>
<li>Item 15</li>
</ol>
特别是,我正在努力解决这些问题:
a) 需要grid-auto-flow: column 才能使列换行工作,但也迫使我添加grid-template-rows: repeat(5, 1em) 来指定行数,这会破坏响应能力。有没有办法根据内容和列数自动计算行数?
b) 为什么列宽不均匀分布,为什么不适应屏幕尺寸?这不是minmax 的用途吗?
【问题讨论】:
-
由于某种原因,使用
grid-auto-flow: column似乎破坏了行的自动填充机制。我设法做到这一点的唯一方法是使用媒体查询。 codepen.io/danield770/pen/JJLpgR/?editors=1100 - 但我想那是作弊:)