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 许可协议
默认情况下,网格项不能小于其内容的大小。
网格项目的初始大小为
min-width: auto
和min-height: auto
。您可以通过将网格项目设置为
min-width: 0
、min-height: 0
或overflow
与visible
d223d52d152bb7a 以外的任何值来覆盖此行为。从规范:
下面是关于弹性项目的更详细的解释,但它也适用于网格项目:
这篇文章还涵盖了 嵌套容器 的潜在问题 以及主要浏览器之间已知的渲染差异。
要修复您的布局,请对您的代码进行以下调整:
jsFiddle 演示
1fr
vsminmax(0, 1fr)
上面的解决方案在网格项级别运行。有关容器级别的解决方案,请参阅这篇文章: