小编典典

防止内容扩展网格项目

css

TL; DR:table-layout: fixed CSS网格有什么类似的东西吗?


我试图用几个月的大4x3网格创建年视图日历,而白天则嵌套7x6网格。

日历应填满页面,因此Year网格容器的宽度和高度分别为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);
}

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

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

网格项(=日单元格)非常简洁,因为页面上有数百个。当日期数字标签过大(使用左上角的按钮随意使用笔中的字体大小)时,网格将逐渐变大并超过页面的正文大小。

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

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

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


阅读 261

收藏
2020-05-16

共1个答案

小编典典

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

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

你可以通过设置网格项目覆盖这种行为min-width: 0min-height: 0overflow比其它任何值visible

从规格:

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 */
}

2020-05-16