防止内容扩展网格项

新手上路,请多包涵

TL;DR: 对于 CSS 网格,是否有类似 table-layout: fixed 的东西?


我试图创建一个年视图日历,其中月份有一个大的 4x3 网格,其中嵌套了 7x6 网格。

日历应该填满页面,因此年网格容器的宽度和高度各为 100%。

 .year-grid {
  width: 100%;
  height: 100%;

  display: grid;
  grid-template: repeat(3, 1fr) / repeat(4, 1fr);
}

.month-grid {
  display: grid;
  grid-template: repeat(6, 1fr) / repeat(7, 1fr);
}

这是一个工作示例: https ://codepen.io/loilo/full/ryXLpO/

为简单起见,该笔中的每个月都有 31 天,从星期一开始。

我还选择了一个小得离谱的字体来演示这个问题:

网格项目(= 日单元格)非常紧凑,因为页面上有数百个。一旦日期数字标签变得太大(随意使用左上角的按钮在笔中调整字体大小),网格的大小就会增长并超过页面的主体大小。

有什么办法可以防止这种行为?

我最初宣布我的年份网格的宽度和高度为 100%,所以这可能是开始的点,但我找不到任何符合该需求的与网格相关的 CSS 属性。

免责声明: 我知道有一些非常简单的方法可以在不使用 CSS 网格布局的情况下设置日历样式。但是,这个问题更多的是关于该主题的一般知识,而不是解决具体示例。

原文由 Loilo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 323
1 个回答

默认情况下,网格项不能小于其内容的大小。

网格项目的初始大小为 min-width: automin-height: auto

您可以通过将网格项目设置为 min-width: 0min-height: 0overflowvisible d223d52d152bb7a 以外的任何值来覆盖此行为。

从规范:

6.6.网格项目的自动最小尺寸

为了给网格项提供更合理的默认最小尺寸,本规范定义了 auto 的值 min-width / min-height 也适用于指定的自动最小尺寸轴到网格项目,其 overflowvisible 。 (效果类似于强加于弹性项目的自动最小尺寸。)

下面是关于弹性项目的更详细的解释,但它也适用于网格项目:

这篇文章还涵盖了 嵌套容器 的潜在问题 以及主要浏览器之间已知的渲染差异


要修复您的布局,请对您的代码进行以下调整:

 .month-grid {
  display: grid;
  grid-template: repeat(6, 1fr) / repeat(7, 1fr);
  background: #fff;
  grid-gap: 2px;
  min-height: 0;  /* NEW */
  min-width: 0;   /* NEW; needed for Firefox */
}

.day-item {
  padding: 10px;
  background: #DFE7E7;
  overflow: hidden;  /* NEW */
  min-width: 0;      /* NEW; needed for Firefox */
}

jsFiddle 演示


1fr vs minmax(0, 1fr)

上面的解决方案在网格项级别运行。有关容器级别的解决方案,请参阅这篇文章:

原文由 Michael Benjamin 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题