【发布时间】:2018-07-04 04:53:42
【问题描述】:
我正在使用 CSS 网格为卡片项目列表创建水平滚动。当您到达水平滚动的末尾时,我需要在左侧列表的第一项和右侧列表的最后一项留出间距。但是,当滚动列表中间时,两侧不应有任何间距。
要求
- 卡片列表开头的间距(左侧)
- 卡片列表末尾的间距(右侧)
- 显示的卡片数量必须为 2.5(在页面加载时,显示 2.5 卡片表示可以水平滚动)
- 列表中的项目数量可能不同,因此无法使用显式网格
它应该如何查看列表开头的示例,左侧有间距:
在右侧滚动时的外观示例,以及在左侧滚动时的外观示例:
在列表末尾应该如何显示的示例,右侧有间距:
这是codepen on what I am trying to achieve。
我曾尝试在 ol 上使用 ::before 和 ::after 来尝试填充列表开头和结尾的空白区域,但结果很奇怪。
ol {
padding: 0;
list-style: none;
display: grid;
grid-auto-flow: column;
grid-gap: 1rem;
overflow-x: auto;
grid-template-columns: 1rem repeat(auto-fill, calc((20rem - 2rem) / var(--visible-cards))) 1rem;
margin-left: -1rem;
margin-right: -1rem;
&::before,
&::after {
content: '';
}
&::before {
grid-column: 1;
background: blue;
}
&::after {
grid-column: -1;
background: red;
}
::after 并不像我认为的那样通过应用grid-column: -1 在列表的末尾,而是在可见区域的末尾,在水平滚动开始之前。有谁知道达到要求的方法?如果您这样做,请提前感谢!
【问题讨论】:
-
将
grid-column: -1应用于::after伪项目不会做任何事情(除了使::before项目黯然失色),因为您正在使用隐式 网格。grid-row和grid-column属性中的负整数值仅适用于 explicit 网格 (more details)。 -
啊!感谢您指出这一点!