提问人:Loilo 提问时间:4/10/2017 最后编辑:Loilo 更新时间:7/26/2023 访问量:279657
防止内容扩展网格项
Prevent content from expanding grid items
问:
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 网格布局的情况下设置该日历的样式。然而,这个问题更多的是关于该主题的一般知识,而不是解决具体的例子。
答:
默认情况下,网格项不能小于其内容的大小。
网格项的初始大小为 和 。min-width: auto
min-height: auto
您可以通过将网格项设置为 或设置为 以外的任何值来覆盖此行为。min-width: 0
min-height: 0
overflow
visible
从规格:
为了给网格项提供更合理的默认最小大小,本规范定义了 / 的值,同时将指定轴中的自动最小大小应用于 .(效果类似于对柔性项目施加的自动最小尺寸。
auto
min-width
min-height
overflow
visible
以下是涵盖 flex 项的更详细说明,但它也适用于网格项:
这篇文章还介绍了嵌套容器的潜在问题以及主要浏览器之间已知的渲染差异。
若要修复布局,请对代码进行以下调整:
.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 */
}
1fr
与minmax(0, 1fr)
上述解决方案在网格项级别运行。有关容器级解决方案,请参阅以下帖子:
评论
min-width: 0;
minmax
里克简直完美!
前面的答案很好,但我也想提一下,网格有一个固定的布局等效物,你只需要写而不是作为你的轨道大小。minmax(0, 1fr)
1fr
评论
minmax(0, 1fr)
有效,因为实际上是 的简写,它不是原始问题的正确值。1fr
minmax(auto,1fr)
现有的答案可以解决大多数情况。但是,我遇到了一个情况,我需要网格单元格的内容是 。我通过绝对定位在包装器中解决了它(不理想,但我知道的最好的),如下所示:overflow: visible
.month-grid {
display: grid;
grid-template: repeat(6, 1fr) / repeat(7, 1fr);
background: #fff;
grid-gap: 2px;
}
.day-item-wrapper {
position: relative;
}
.day-item {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
padding: 10px;
background: rgba(0,0,0,0.1);
}
https://codepen.io/bjnsn/pen/vYYVPZv
评论
.day-item-wrapper
.month-grid > * { position: relative; }
评论