html - 使用 grid-column-start 会导致网格元素的自动放置停止工作

标签 html css css-grid

在下面的示例中,当屏幕尺寸减小时,main 应该被推到第二行,但出于某种原因,即使页脚从第 3 列开始并且 main 有足够的空间,它仍停留在第一行向下移动。

如果我从页脚中删除 grid-column-start/end,网格将完全响应并在调整大小时将 main 推到第二行。

我的想法是“也许当涉及到定位时,元素会从它们的正常网格流中‘弹出’,并且可以说是在它们自己的小‘维度’中”。但是,当我将定位添加到 main { grid-column-start: 4 } 时,它不会“弹出”其位置并被插入“仅定位网格项的维度”。它只是停留在第 1 行并向右移动。

如果维度的东西没有意义,我深表歉意,但我只是想分享我的想法。

例子:

body {
  height: 100vh;
  margin: 0; 
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}

footer {
  grid-column-start: 3;
  grid-column-end: 4;
}

header {
  background: tomato;
  border: 2px solid red;
}

main {
  background: yellow;
  border: 2px solid gold;
}

nav {
  background: limegreen;
  border: 2px solid green;
}

footer {
  background: dodgerblue;
  border: 2px solid blue;
}
<body>
  <header>Header</header>
  <nav>Nav</nav>
  <main>Main</main>
  <footer>Footer</footer>
</body>

最佳答案

我认为 grid-columnauto-fill/auto-fit 情况下的实际作用是卡住列。

因此:

footer {
  grid-column-start: 3;
  grid-column-end: 4;
}

...第三列中的元素被锁定,将不再换行。因此,main 之前的元素 - headernav - 被阻止换行到下一行,并保持限制在第一行行(demo)。

如果您尝试这样做:

footer {
  grid-column-start: 2;
  grid-column-end: 3;
}

...第二列中的元素被锁定,将不再换行。结果,nav 之前的元素 - header - 被阻止换行到下一行,并保持限制在第一行。但是 nav 之后的元素 - main - 仍然可以自由换行 (demo)。

不确定这在 grid spec 中的何处定义,但这似乎是渲染行为。

关于html - 使用 grid-column-start 会导致网格元素的自动放置停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50939058/

相关文章:

html - 是否可以在呈现之前加载整个网页?

php - 如何使用 PHP 将阿拉伯字符转换为 Unicode

javascript - 在 JavaScript 中使用 CSS Grid repeat() 声明

css - CSS Grid 中的行应该占用剩余空间

html - 使用 flex-grow : 1 使网格元素像 flex 元素一样使用剩余空间

javascript - 我如何控制要使用 javascript 打印的页数?

html - 标题位置 CSS

css - auto-fit 和 minmax() 在嵌套网格中不起作用

html - 无法将按钮与输入对齐

javascript - 无效的正则表达式标记错误部分 View