- 我想要实现的目标:**
使用CSS Grid Layout,使页面具有右列,右列的大小从其内容中得出,但最多只能达到窗口宽度的20%。
- 我认为它会如何工作**
div {
border-style: solid;
}
#container {
width: 300px;
height: 300px;
display: grid;
grid-template-columns: 1fr minmax(auto, 20%);
}
<div id="container">
<div>
some content
</div>
<div>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec cursus eu leo ac ultrices. Vivamus ornare, orci sed pretium sollicitudin
</div>
</div>
看起来不错,但是当我删除第二个div
的内容时,左列没有折叠:
一个二个一个一个
- 我的问题:**
我以为自从minmax()
(...)定义了大于或等于最小值且小于或等于最大值的尺寸范围。
这意味着在我的例子中,宽度从auto
(当div
为空时,= 0
)设置为20%
。但是它仍然保持在20%。为什么会这样?
4条答案
按热度按时间q8l4jmvw1#
适应内容函数只接受一个参数,即最大值。设置了此属性的网格列/行仍将根据其内容占用所需的最小空间,但不会超过最大值。
参见本文:Becoming a CSS Grid Ninja!
您可以在解决案例的同时仍然使用基于百分比的最大值:
bogh5gae2#
您误解了
minmax
函数。它首先尝试应用最大值,当这不可能时,它应用最小值。因此,要修复布局,您只需计算容器宽度的
20%
,使用max-width
属性将其应用于网格项,并在grid-template-columns
属性定义中使用auto
来定义第二列。更新:更灵活的解决方案是使用this answer中的
fit-content
函数。piwo6bdm3#
您可能需要在容器本身上设置
max-width
,并将其列设置为auto
。xa9qqrwz4#
使用夹具()
车轮钳取三个参数(最小、首选、最大)