【问题标题】:CSS responsive grid layout: grid-column span breaking minmaxCSS 响应式网格布局:grid-column span 打破 minmax
【发布时间】:2019-06-23 19:42:36
【问题描述】:

我有一个像这样的整洁的响应式网格:

grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));

这使得每个网格项目至少有 200 像素宽。其中一项(红色项)的宽度是原来的两倍,如下所示:

grid-column-end: span 2;

到目前为止很棒!

现在,当我调整到较小的宽度时,红色项目将网格强制为两列。这给了我一个奇怪的小列,即使我将最小宽度指定为 200 像素。看:

我真的希望红色项目折叠成一列,这样网格就不会中断。

但问题是,我不知道总网格的宽度,所以我不能使用在特定视口大小触发的媒体查询。

有没有办法将红色项目强制到一列,或者以另一种方式定义网格列来解决这个问题?

【问题讨论】:

  • 虽然您可能不知道设计开始中断的确切尺寸,但您需要开始寻找那些断点,然后使用媒体查询来预测中断。顺便说一句,如果您可以发布您的minimal reproducible example 代码(包括允许该代码重现您的问题的虚拟内容),那么您可能会得到更好或更多的答案。或者,您应该/可以首先针对移动设备(小屏幕)进行设计,然后使用断点来调整大屏幕的设计。这可能会也可能不会简化您需要做的工作。
  • 不幸的是我做不到。我正在开发一个可视化网站构建器,这是我在客户设计自己的布局时预期的问题。例如,200px 值可以是任何给定的宽度。
  • 如果没有足够的代码来重现问题(即使是在非常基础的层面上),也很难提供解决方案。我们只能在这一点上猜测。例如,也许您可​​以将第一项从当前网格中取出。让它作为一个单独的容器,无论是网格还是弹性。但这只是猜测;没有代码,我无法测试或显示结果。
  • 您是在寻找纯 CSS 解决方案还是愿意使用 javascript?

标签: css css-grid


【解决方案1】:

在使用网格时,您需要牢记尺寸和一些数学知识。 如果您告诉一个项目跨越 2 列,那么这意味着您总是希望网格中至少有 2 列,如果屏幕变小,它不会变成 1 列网格。 现在您的网格的最小宽度为 400 像素。

对于那个奇怪大小的列,因为您有 2 列,而第 2 列的宽度最小为 200 像素,之后的项目会留下那个奇怪的大小。

您可以在该断点处编写一个媒体查询,以告诉您的项目 1 留在第 1 列中,这样应该可以修复它。

@media screen and (max-width:415px){
.item1 {
grid-column: 1;
background:red;
}
}

查看我在此处链接的 Codepen

see on Codepen

【讨论】:

  • 虽然我总是不同意在没有充分理由的情况下进行这种高度特定的媒体查询,但似乎这是唯一的解决方案,除了将标记分解成更小的部分,这在它自己的方式。据我所知,在 CSS 更新以使网格项目可以span minmax(1, 2) 列之前,我们将不得不处理黑客攻击。
  • 我正在热切地等待span minmax
猜你喜欢
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多