CSS 网格最小内容不适合内容

标签 css css-grid

我试图通过显式分配行、列和元素大小来将一些 div 放入网格中,并允许 CSS 网格使用以下 CSS 执行列和行大小调整工作。

display: grid;
grid-auto-columns: min-content;

min-content 应该将列设置为适合内容而不会溢出的最小可能大小。然而,这并没有发生。尽管这些元素都可以放入 350 像素的网格中,但第三列太大,导致不必要的空白。

这是正在发生的事情的图像。

Image With Gridlines

这是实际的代码:JSFiddle

function randint(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

const children = document.getElementById('parent').children;
const skip = 360 / children.length;
let value = randint(0, 359);
for (let i = 0; i < children.length; i += 1) {
  const elm = children[i];
  elm.style.backgroundColor = `hsl(${value}, 100%, 85%)`;
  value += skip;
  elm.id = "w" + (i + 1);
  const style = window.getComputedStyle(elm);
  elm.innerHTML = `width: ${elm.offsetWidth}px<br \>
  col: ${style.getPropertyValue('grid-column')}<br \>
  row: ${style.getPropertyValue('grid-row')}`;
}
#parent {
  display: grid;
  grid-auto-columns: min-content;
  border: 1px solid black;
  width: 350px;
  font-size: 10pt;
}

#parent>div {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 75px;
}

#w1 {
  width: 200px;
  grid-column: 1 / 3;
  grid-row: 1 / 2;
}

#w2 {
  width: 150px;
  grid-column: 3 / 5;
  grid-row: 1 / 2;
}

#w3 {
  width: 100px;
  grid-column: 1 / 2;
  grid-row: 2 / 3;
}

#w4 {
  width: 150px;
  grid-column: 2 / 4;
  grid-row: 2 / 3;
}

#w5 {
  width: 100px;
  grid-column: 4 / 5;
  grid-row: 2 / 3;
}
<div id='parent'>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
</div>

最佳答案

第一行中的网格项创建四列:

#w1 {
  width: 200px;
  grid-column: 1 / 3;
  grid-row: 1 / 2;
}

#w2 {
  width: 150px;
  grid-column: 3 / 5;
  grid-row: 1 / 2;
}

第一个元素跨越两列 (grid-column: 1/3)。

第二个元素跨越两列 (grid-column: 3/5)。

所以你有一个 4 列的网格。


Chrome

在 Chrome 中,第一行中网格元素的长度在各列之间平均分配。

所以前两列的宽度是 100px:

enter image description here

后两列的宽度为 75px:

enter image description here

现在您可以看到第二行发生了什么。代码如下:

#w3 {
  width: 100px;
  grid-column: 1 / 2;
  grid-row: 2 / 3;
}

#w4 {
  width: 150px;
  grid-column: 2 / 4;
  grid-row: 2 / 3;
}

#w5 {
  width: 100px;
  grid-column: 4 / 5;
  grid-row: 2 / 3;
}
  • 第一个元素 (#w3) 宽 100 像素。这非常适合 #w1 创建的第一列。

  • 第二个元素 (#w4) 宽 150 像素。 100px 完全适合 #w1 创建的第二列。另外 50 像素延伸到第三列,该列由 #w2 创建,宽度为 75 像素。 留下 25 像素的间隙,代表第三列中的剩余空间。

  • 第三个元素 (#w5) 宽 100 像素。但由于它从第四列开始,宽度为 75 像素,因此剩余的 25 像素会溢出容器。

底线: 在 Chrome 中,一旦呈现第一行,列的宽度就固定了。后续行中的网格项遵循第一行中建立的列宽。


火狐浏览器

与 Chrome 不同,在 Firefox 中,渲染第一行后列宽似乎不再保持固定。列宽在整个渲染过程中是灵活的。

enter image description here


边缘

与 Chrome 相同。

关于CSS 网格最小内容不适合内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50262606/

相关文章:

视口(viewport)中jquery最近的 anchor

html - 如何在使用页面 anchor 导航时将 "activate"类设置为在 Angular 2 中 Bootstrap 导航栏?

css - 将 css 网格行高度设置为剩余视口(viewport)高度

html - CSS 文本溢出省略号在 Grid/Flex 中不起作用

javascript - 我可以为网格模板行/网格模板列使用数字值吗?

css - 在 CSS Grid 中使用带隐式行的负整数

css - 旋转谷歌地图容器而不是 map 本身

html - mozilla 中的动画无法正常工作

jquery - 单击具有负 z-index 的 div

html - CSS 网格行高 Safari Bug