制作 CSS Grid 布局的 12 个注意事项

随着Web设计不断发展,CSS Grid布局成为越来越流行的布局方式。它提供了极大的自由度,可以方便地创建各种复杂布局。然而,这种自由度也会带来一些挑战,下面是12个需要注意的问题及其解决方法。

1. 使用网格线的数量

在创建网格布局时,必须确定每个容器的网格线数量,这可以通过 grid-template-columnsgrid-template-rows 属性进行设置。 在开始创建布局之前,最好先创建草图并计算出网格数量。如果使用太少的网格线,布局可能会过于简单,无法获得所需的灵活性和自由度。而使用过多的网格线将导致更复杂的布局、更麻烦的调整和更多的工作量。

例如,以下代码创建了一个具有三列三行的简单网格布局。每个列和行使用相同的宽度和高度。

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

2. 网格布局中的空白格

在网格布局中,未定义宽度或高度的网格元素将被自动调整为它们的内容大小。如果这些元素位于网格的两侧,则可能会导致空白格,这会破坏整个布局。要解决这个问题,可以使用 grid-auto-flow: dense; 属性,它将使网格项目紧密地排列在一起,避免空白的空间。

例如,以下代码示例展示了一个有些难看的网格布局,其中两个元素自动调整大小,并且留下了空白。添加 grid-auto-flow: dense; 属性可以生成更好的布局效果。

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

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

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

3. 网格单元格中的内容居中

默认情况下,在网格单元格中垂直和水平居中内容并不容易。可以使用 align-selfjustify-self 属性将内容放置在网格单元格中的中心位置。

例如,以下代码使网格元素在垂直和水平方向上自动居中。

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

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

4. 对于不同大小的网格元素,如何保持对齐?

在一个网格中,如果有某些网格元素比其他网格元素更大,则需要考虑对其进行对齐。使用 grid-column-endgrid-row-end 属性来控制网格的位置和大小。此外,还可以使用 grid-auto-rowsgrid-auto-columns 属性来设置网格自动分配的行和列的大小。

例如,以下代码让两个不同大小的网格元素对齐。

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

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

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

5. 网格元素的重叠

在有些情况下,可能需要一个网格元素跨越多个单元格或与其他元素重叠。可以使用 grid-column-startgrid-column-endgrid-row-startgrid-row-end 属性来控制网格元素的位置和大小。此外,还可以使用 z-index 属性来控制元素在布局中的顺序。

例如,以下代码创建一个重叠布局,其中元素2跨两列并覆盖了元素1。

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

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

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

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

6. 使用 minmax() 自动调整网格大小

在创建网格布局时,可以使用 minmax() 函数来自动调整列和行的大小。这将确保列和行可以自动调整,以适合其内容的大小。

例如,以下代码创建了一个布局,在该布局中,列可以根据其内容自动调整,要么填满整个屏幕,要么适应内容的宽度。

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

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

7. 创建多列标题行

在某些情况下,您可能需要在网格中创建几列标题行。在这种情况下,可以使用 grid-template-areas 属性来创建多个标题行。通过将网格元素分配到特定区域,可以控制它们在网格中的位置。

例如,以下代码创建了一个具有两行标题行和两列内容的布局。

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

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

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

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

8. 在不同的设备上使用不同的网格布局

在创建网格布局时,需要考虑不同屏幕大小和设备。可以使用'@media'查询来创建具有多个网格布局的响应式网站。通过更改网格的大小、数量和位置,可以确保在不同设备上正确呈现网站。

例如,以下代码在大屏幕上创建了一个4x4的网格布局,而在移动设备上创建了一个2x4的网格布局,并相应地调整了其他属性。移动设备上,网格元素的大小和颜色也发生了变化。

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

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

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

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

9. 自适应网格行高

在某些情况下,您可能需要网格行高自适应其内容的高度。可以使用 align-items: start; 属性来确保单元格不会垂直居中,这将使单元格自适应其高度。此外,网格的高度还可以设置为 auto。这将为网格分配刚好足够的空间。

例如,以下代码演示了如何使网格自适应其内容的高度。在这里,网格的高度设置为 auto,元素的位置位于顶部。

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

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

10. 使用 repeat() 函数缩小代码

在设置网格布局时,您可能需要将多个网格元素分配到同一列或同一行上。可以使用 repeat() 函数来减少代码量,避免手动编写大量的属性。

例如,以下代码中,使用 repeat() 函数重复定义了三个相同的网格列。

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

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

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

11. 创建滚动网格

在某些情况下,您可能需要在网格上实现滚动效果。为此,可以使用 overflow: auto;overflow: scroll; 属性来自动创建滚动条。

例如,以下代码创建了一个滚动网格,其中有足够的内容以超过屏幕高度。

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

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

12. 使用 Firefox Grid Inspector 调试布局

Firefox Grid Inspector 是一种强大的工具,可以帮助您更轻松地调试和调整网格布局。该工具显示网格的行和列,以及网格元素的大小和位置。此外,还可以使用该工具在运行时更改网格元素的位置和大小。

为了使用该工具,您需要在 Firefox 浏览器中启用“开发者模式”。之后,在布局中右键单击,选择“检查元素”选项。在检查元素面板中,您可以找到“Grid”标签页面,并切换到 Firefox Grid Inspector。

结论

制作 CSS Grid 布局需要关注很多内容。在开始创建布局前,最好先考虑这些注意事项。在本文中,我们介绍了一些最常见的问题及其解决方案。使用这些技巧可以帮助您更轻松地创建复杂的网格布局。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6704997cd91dce0dc84f6d22