使用网格为 Web 应用程序构建布局,我有一个侧边栏,我希望它足够宽以容纳其内容(所以,max-content
),但我不希望它变得太大,比如说不超过视口的 20%(所以,20vw
)。
我以为我会使用一些简单的东西:
.page {
width: 100vw;
height: 100vh;
display: grid;
grid-template-columns: min(max-content, 20vw) 1fr;
grid-template-areas: "side main";
}
但是 Firefox 提示我grid-template-columns
值不正确,因此被忽略。如果我直接使用:
grid-template-columns: max-content 1fr;
然后它就可以工作了,但是我没有想要避免侧边栏过大的安全措施。
CSS 函数中是否不允许使用诸如min-content
和 之类的关键字?max-content
还有什么其他方法可以实现我的目标?
看起来您正在寻找fit-content()函数:
不要使用固有最小宽度,尝试使用
minmax()
CSS 函数为“side”设置绝对最小宽度。下面的演示可以设置grid-template-columns
左右列(两个<select>
)的值和一个选项(复选框),从而转换为简单的弹性布局。如果“side”的内容较少,那么还max-content
可以;但如果内容较多,除非你通过minmax()
“side”和“main”限制,否则我不建议这样做。如果你设置了最大值,20vw
它会随着视口的扩大和缩小,所以它是固有的,所以它的行为不会像你预期的那样。注意:您可能会遇到一个非常恼人的 bug,它会影响
<select>
Stack Snippet 内部。所以,如果<select>
s 不起作用,请转到此处CodePen(我建议你去那里,这样更容易调整窗口大小)。另外,在模式下查看演示Full page并调整窗口大小。
它们在 min() 中是不允许的。请阅读此处的文档。
要指定尺寸范围,您需要使用minmax()。这确实可以接受
max-content
,但是最大内容在网格中并不像您假设的那样起作用。相反,它提供了内容可以容纳的最大尺寸。在这种情况下,它永远不会缩小。
您可能正在寻找
minmax(min-content, 20vw)
以下内容:此外,如果您希望强调 20vw 的限制,即使您的内容太大,您也可以使用
minmax(auto, 20vw)
您需要真正减小宽度才能看到差异。
PS:请阅读文档中有关 min-content 和 auto 关键字的描述以获得澄清。