CSS Grid 布局中的 auto-fit 和 auto-fill 属性

阅读时长 5 分钟读完

前言

随着前端技术不断的深入发展,网页的布局越来越重要,相对应的,CSS Grid 布局也越来越成熟和强大。CSS Grid 布局是一个二维的布局系统,能够让我们更加高效地进行网页的布局设计。其中,auto-fit 和 auto-fill 属性是 CSS Grid 布局中一对颇为神奇的属性,本篇文章就来详细介绍一下。

auto-fit 和 auto-fill 的区别

auto-fit 和 auto-fill 都是 CSS Grid 布局中的属性,它们的区别在于自动填充的行或列。

auto-fill

auto-fill 会自动填充未指定行或列数量的网格轨道,直到无法放置更多的网格项目。其实质是实现了网格项目的最小化布局,即在有多余网格轨道的情况下使网格项目最小化。举个例子:

这个示例中,auto-fill 效果就是会自动填充空白的轨道,使得容器内的子元素始终占满整个容器,而不出现滚动条。

auto-fit

auto-fit 会自动填充未指定行或列数量的网格轨道,直到无法放置更多的网格项目。不同于 auto-fill 的是,auto-fit 模式会尽可能的创造网格项目的布局,而不是最小化布局。比如下面的示例代码:

auto-fit 模式下,子元素的宽度不再都占满整个容器,而是放置在适合的位置上。

示例

下面,以一个代码示例进行演示,帮助理解 auto-fit 和 auto-fill。

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

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

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

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

代码中定义了一个包含七个子元素的容器,使用 repeat(auto-fit, minmax(150px, 1fr)) 来布局。当demo容器大小增加时,子元素会填充网格轨道,如下方演示所示:

<iframe></iframe>

从示例中,你可以发现在使用 auto-fit 和 auto-fill 属性时,对于列宽使用 1fr 占比布局效果是最好的,这是因为 1fr 占比可以将容器剩余的宽度平均分配给轨道。同时,在子元素宽度变化较大的情况下,还需要使用 grid-column-end: span 来进行跨列布局。

总结

CSS Grid 布局中的 auto-fit 和 auto-fill 属性是十分实用的工具,可以帮助我们在不同的需求下进行适应性布局。auto-fill 主要用于最小化布局,特别适用于分辨率变化不大的情况。auto-fit 同样支持最小化布局,但是优先考虑项目布局的完整性,且适用于分辨率较大时。在实际开发中,应该根据实际需要进行合理选择。

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

纠错
反馈