css - 具有固定跨度的框以填充整个列

标签 css grid-layout css-grid

我是第一次使用 CSS-Grid:

我试图实现的是拥有一个使用 3 列网格的灵活盒子系统,我可以简单地向其中添加 1、2 或 3 列大小的盒子;只使用一个类。

我试图通过这样做来实现这一目标 https://codepen.io/mathil/pen/WXarXB :

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-gap: 12px;
  width: 50%;
  margin-right: auto;
  margin-left: auto;
  background: grey;
}

.card-fullspan {
  grid-column: span 3;
}

.card-twothirdspan {
  grid-column: span 2;
}

.card-thirdspan {
  grid-column: span 1;
}
<div class="container">
  <div class="card-fullspan" style="background: red">Fullspan</div>
  <div class="card-twothirdspan" style="background:green">
    twothirdspan
  </div>
  <div class="card-thirdspan" style="background:green">
    thirdspan
  </div>
</div>

我知道我必须跨度为 4,对于全跨度就是这样:

.card-fullspan {
  grid-column: span 4;
}

但这当然不适用于其他两个,因为我无法通过其他框的组合得出 for 的总和。右侧总是会有 12px 装订线。

我知道可以只为每个元素添加不同的类或 ID,但这不是理想的解决方案。

最佳答案

span 关键字计算后续 网格线。

因此在三列网格中,当您希望一个元素跨越整行时,您指定 span: 3,而不是 span: 4,这会创建一个额外的(隐式)列。

您的代码:

.card-fullspan {
   grid-column: span 4;  /* spans across 4 columns */
}

试试这个:

.card-fullspan {
   grid-column: span 3; /* spans across 3 columns */
}

或者这个:

.card-fullspan {
   grid-column: 1 / 4; /* spans from grid-column-line 1 to 4 (3 columns) */
}

或者这个:

.card-fullspan {
   grid-column: 1 / -1; /* spans from grid-column-line 1 from the start side
                           to grid-column-line: 1 starting from the end side
                           (note: negative integers work only with explicit grids  */
}

所有细节都在本节的规范中:

revised codepen

关于css - 具有固定跨度的框以填充整个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47536879/

相关文章:

html - 如何在包装器中居中 float 左侧导航选项卡?

javascript - jQuery 自动完成 : undefined value pressing the UP arrow key

c# - WPF 如何在代码中将网格行和列大小重置为 "*"

css - <fieldset> 上的网格布局... chrome 上的错误?

css - 使一个 div 跨越网格中的两行

html - 防止内容垂直扩展网格项

html - float 列表项占据特定宽度

html - 为任何浏览器(跨浏览器)在中心和左右定位 div

html - 这种混合 flexbox/grid 布局 SCSS mixin 是如何工作的?

css - GRID CSS — 我怎么能不定义 grid-row-end?