打开时网格项目内容 "jumps"

Grid item content "jumps" when opened

我有这样一个简单的安排。当我包含 grid-template-rows: 1fr 1fr 并打开 details 元素时,它不是向下打开,而是“跳”到它的位置。如果我设置grid-template-rows: auto,则没有。但是如果我需要明确地设置它,如何消除这种“跳跃”以便该元素仍然可以正常打开?

main {
  display: grid;
  grid-template-rows: 1fr 1fr;
  gap: 2px 2px;
  align-items: stretch;
  justify-content: stretch;
  grid-auto-flow: row;
  justify-content: stretch;
}
<main>
  <p>Paragraph 1.</p>
  <details>
    <summary>Jumpy summary</summary>
    <ul>
      <li>Line 1.</li>
      <li>Line 2.</li>
      <li>Line 3.</li>
      <li>Line 4.</li>
      <li>Line 5.</li>
      <li>Line 6.</li>
      <li>Line 7.</li>
      <li>Line 8.</li>
      <li>Line 9.</li>
      <li>Line 10.</li>
    </ul>
  </details>
</main>

使用 grid-template-rows: 1fr 1fr 时,您将两行设置为等高。

所以当“Jumpy summary”部分折叠时,它的高度等于段落项目。

但是当该部分展开时,段落项会展开以适应其同级项的高度。这会将 Jumpy 摘要向下移动一半。

此处详细解释了该行为:

改用grid-template-rows: auto auto

main {
  display: grid;
  grid-template-rows: auto auto;
  gap: 2px 2px;
  align-items: stretch;
  justify-content: stretch;
  grid-auto-flow: row;
  justify-content: stretch;
}
<main>
  <p>Paragraph 1.</p>
  <details>
    <summary>Jumpy summary</summary>
    <ul>
      <li>Line 1.</li>
      <li>Line 2.</li>
      <li>Line 3.</li>
      <li>Line 4.</li>
      <li>Line 5.</li>
      <li>Line 6.</li>
      <li>Line 7.</li>
      <li>Line 8.</li>
      <li>Line 9.</li>
      <li>Line 10.</li>
    </ul>
  </details>
</main>