如何设置CSS网格列的宽度和最大宽度?

kla*_*sen 6 css css3 css-grid

是否可以限制CSS网格列的宽度?

body {
  margin: 0;
  padding: 0;
}
.container {
    display: grid;
    grid-template-columns: minmax(17.5%, 250px) minmax(31.25%, 480px) auto;
    grid-template-rows: 100vh;
    grid-gap: 0;
}
.menu {
    padding-top: 32px;
    background: linear-gradient(135deg, #837DB5 0%, #364176 100%);
}
.list-view {
    background-color: #F5F5FC;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="menu"></div>
  <div class="list-view"></div>
  <div class="details"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,它总是使用17.5%的宽度作为菜单,因为:

"如果max小于min,则忽略max,并将该函数视为min."

来源:https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns

我想要的是一个宽度为17.5%,最大为250px的菜单.那可能吗?

Rou*_*ica 10

执行此操作的一种方法可能是声明:

.container {grid-template-columns: 250px 480px auto;}
Run Code Online (Sandbox Code Playgroud)

作为你的标准规则。

然后,在考虑要应用于第三列的最窄宽度后,您可以应用查询@media

假设您想确保第三列不窄于100px

250px + 480px + 100px = 830px
Run Code Online (Sandbox Code Playgroud)

因此,您需要编写一个@media查询830px

@media only screen and (max-width: 830px) {

    .container {grid-template-columns: 17.5% 31.25% auto;}
}
Run Code Online (Sandbox Code Playgroud)

工作示例:

.container {grid-template-columns: 250px 480px auto;}
Run Code Online (Sandbox Code Playgroud)
250px + 480px + 100px = 830px
Run Code Online (Sandbox Code Playgroud)


Mic*_*l_B 5

您希望列的标准宽度为 17.5%,最大宽度为 250px。

您不能使用grid-template-columns,因为该minmax()函数计算到的min任何时间max都小于min。这意味着 17.5% 将在更宽的屏幕上覆盖 250px。

一个干净的解决方法是设置grid-template-columnsmin-content,它将列收缩到内容的长度。然后设置网格项的宽度参数。

.container {
  display: grid;
  grid-template-columns: min-content minmax(31.25%, 480px) auto;
}

.menu {
  width: 17.5%;
  max-width: 250px;
}
Run Code Online (Sandbox Code Playgroud)

但是,网格项上的百分比长度在这种情况下不起作用,因为父引用(列)本质上设置为零宽度 ( min-content)。(小提琴演示)。

幸运的是,在这种情况下,由于您的容器设置为视口的宽度,因此您可以使用vw单位轻松解决此问题。

.menu {
  width: 17.5vw;
  max-width: 250px;
}
Run Code Online (Sandbox Code Playgroud)

.container {
  display: grid;
  grid-template-columns: min-content minmax(31.25%, 480px) auto;
}

.menu {
  width: 17.5%;
  max-width: 250px;
}
Run Code Online (Sandbox Code Playgroud)
.menu {
  width: 17.5vw;
  max-width: 250px;
}
Run Code Online (Sandbox Code Playgroud)

jsFiddle 演示