我知道新的minmax()
函数允许指定网格列的最小和最大宽度。但是,在使用此功能时,我不清楚"默认"列的宽度将是,以及如何指定它。
在网格之外 - 包括在flex布局中 - 可以指定这样的内容:
.container {
width: 25%;
min-width: 200px;
max-width: 400px;
}
有效地创建一个容器,默认情况下占用其父宽度的25%,但从不收缩到200px以下或超过400px。
实现这种效果的网格等价方式是什么?
答案 0 :(得分:1)
基于您的常规CSS代码示例...
.container {
width: 25%;
min-width: 200px;
max-width: 400px;
}
这里有一种方法可以在CSS Grid中使用:
1fr
。第二列的75%强制第一列为25%。
1fr
使第二列消耗额外空间。
#container {
display: grid;
grid-template-columns: minmax(200px, 400px) minmax(75%, 1fr);
grid-gap: 10px;
height: 100px;
border: 1px solid gray;
}
#container > div {
background-color: lightgreen;
padding: 5px;
}

<div id="container">
<div>
grid item<br> minimum width = 200px<br> maximum width = 400px
</div>
<div>
grid item<br> minimum width = 75%<br> maximum width = 1fr
</div>
</div>
&#13;
注意:
除了上面的解决方案,我不相信CSS Grid可以实现这种效果。
据我所知,没有办法说出来:
列宽必须是容器的25%,且不得小于200px或大于400px。
您可以设置minmax()
或固定长度。
换句话说,你可以这样做:
#container {
display: grid;
grid-template-columns: minmax(200px, 400px);
}
......或者这个:
#container {
display: grid;
grid-template-columns: 25%;
}
#container {
display: grid;
grid-template-columns: minmax(200px, 400px) 1fr;
grid-gap: 10px;
padding: 10px;
height: 100px;
background-color: #8cffa0;
}
#container > div {
background-color: #8ca0ff;
padding: 5px;
}
&#13;
<div id="container">
<div>
grid item<br> minimum width = 200px<br> maximum width = 400px
</div>
<div>
grid item<br> takes remaining space on the row
</div>
</div>
&#13;
根据您的具体情况,将容器设置为网格项的25%和最小 - 最大值可能对您有用。像这样:
#container {
display: grid;
grid-template-columns: 25%;
}
#container > div {
min-width: 200px;
max-width: 400px;
}
请记住,第一条规则会调整列,第二条规则会调整网格项。因此,当25%列宽于400px网格项时,可能会有时间(特别是在更宽的屏幕上)。这将导致差距。
#container {
display: grid;
grid-template-columns: 25% 1fr;
grid-gap: 10px;
padding: 10px;
height: 100px;
background-color: #8cffa0;
}
#container > div:first-child {
min-width: 200px;
max-width: 400px;
}
#container > div {
background-color: #8ca0ff;
padding: 5px;
}
&#13;
<div id="container">
<div>
grid item
<br> minimum width = 200px
<br> maximum width = 400px
</div>
<div>
grid item
<br> takes remaining space on the row
</div>
</div>
&#13;