解决 Chrome 不支持 grid-template-columns:auto 的问题

阅读时长 3 分钟读完

在使用 CSS Grid 布局时,很多人都喜欢使用 grid-template-columns:auto 来让列自动适应宽度。然而,这种写法在 Chrome 浏览器中并不被支持,会导致布局错乱。

问题分析

为什么 Chrome 不支持 grid-template-columns:auto 呢?原因是当存在多个网格项时,自动计算列宽会出现不一致的情况。例如下面的示例:

-- -------------------- ---- -------
--------------- -
  -------- -----
  ---------------------- -----
  --------- -----
-

---------- -
  ----------------- --------
  -------- -----
-

在 Chrome 中呈现的网格布局如下图所示:

可以看到,因为文字长度不同,各个网格项的宽度不一致。由于 grid-template-columns:auto 无法自动计算各个列的宽度,就会导致布局错乱。

解决方案

既然 grid-template-columns:auto 无法完成自动计算,我们需要手动给出每一列的宽度。这可以通过使用 repeat(auto-fit, minmax(200px, 1fr)) 来实现。

repeat(auto-fit, minmax(200px, 1fr)) 的含义是:

  • auto-fit 表示根据容器宽度自动计算列数;
  • minmax(200px, 1fr) 指定最小和最大列宽,即当容器宽度超过 200px 时每列自动铺满,但最大不超过 1fr。

改写上面的示例代码为:

-- -------------------- ---- -------
--------------- -
  -------- -----
  ---------------------- ---------------- ------------- ------
  --------- -----
-

---------- -
  ----------------- --------
  -------- -----
-

在 Chrome 中呈现的网格布局如下图所示:

可以看到,各个网格项的宽度已经自动适应了容器宽度,并保持一致。

总结

在 CSS Grid 布局中,grid-template-columns:auto 不被 Chrome 浏览器所支持,可能会导致布局错乱。我们可以使用 repeat(auto-fit, minmax(200px, 1fr)) 来手动指定每一列的宽度,以解决这一问题。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646220a5968c7c53b0371781

纠错
反馈