在学习如何构建 Figma
插件时,偶然发现了一些有趣的 Flexbox
和Grid
在 Figma
中的用法。决定更深入的了解。
Flexbox
和Grid
为我们这些 Web
开发者提供了许多新的布局能力,你不需要对 Flexbox 或 Grid 有详细的了解。
使用 CSS Grid
在 Figma
的右侧,我们有默认的“设计”选项卡。在画布上选择一个元素时,我们可以看到其 x
轴、y
轴、宽度和高度值。这也可能会有所不同,具体取决于元素是文本、组、框架等。
我在这里发现有趣的地方是在设计选项卡中为每一行使用 `CSS gri。
请注意我们有很多条线。这些是用于 28 列的,没错!你没看错。设计选项卡中的任何一行都是建立在该网格上的。
每列宽度为 8px。
1 | .raw_components--_singleRow { |
此外,例如控制阴影细节时,也使用相同的网格。
这是 CSS Grid
的完美应用,即使乍一看你可能会认为这些只是一些小布局,这是 CSS Grid 的一个非常有效的用法。
对齐按钮
在此用法中,每个对齐按钮占据网格的 4 列(32px)。请注意图标本身也很好地居中显示。
1 | .raw_components--_singleRow { |
元素位置
在此示例中,我们看到x
轴和 y
轴的输入是如何分隔的,还有新的“绝对位置”按钮。
自动布局
我发现非常有趣的部分是自动布局。
这次我们有一个 28 列 * 2 行的网格,以适应帮助我们在自动布局容器内对齐子项的控件。
1 | .stack_panel_v4--doubleRow { |
在网格级别,每个元素都使用 grid-column
或 grid-row
或两者来定位。
你看到的对齐点是由 SVG 图案制作的。多么奇妙的细节和用法!
而且不仅如此,还有一个包含 9 个网格项的 3*3 网格。我相信这些是为每个对齐点提供可点击区域的。
1 | .alignment_view_v4--tooltipGrid { |
接下来是指示器容器,在这里我们有一个显示自动布局容器内元素如何对齐的图标。
为了更容易理解,我将整个正方形分为四部分:
- 基本背景
- SVG 点
- 我们有可点击区域的 3*3 网格
- 指示器容器(蓝色图标)
现在我们将重点放在指示器容器上。让我们看一下基本的标记和 CSS。在上面的标记中,我们有指示器容器和对齐图标。我图标本身是用1
2
3
4
5
6
7
8
9<!-- 60*60 容器 -->
<div class="alignment_view_v4--indicatorContainer">
<!-- 20*20 图标(蓝色) -->
<div class="alignment_view_v4--indicatorGroup">
<div class="alignment_view_v4--indicator"></div>
<div class="alignment_view_v4--indicator"></div>
<div class="alignment_view_v4--indicator"></div>
</div>
</div>Flexbox
构建和对齐的。有了这个,我们将有两个1
2
3
4
5
6
7
8
9
10
11
12/* 尺寸为 60*60 */
.alignment_view_v4--indicatorContainer {
position: absolute;
top: 1px;
right: 1px;
bottom: 1px;
left: 1px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}Flexbox
包装器,一个用于indicatorContainer
元素,另一个用于图标本身。
这是蓝色图标的样式。我们有一个flex
容器,方向为column
,然后是 3 个不同尺寸的蓝色线条。惊奇的是,当我们更改自动布局元素的对齐方式时,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25.alignment_view_v4--indicatorGroup {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
width: 20px;
height: 20px;
}
.alignment_view_v4--indicator {
height: 4px;
border-radius: 1px;
}
.alignment_view_v4--indicator:nth-child(1) {
width: 10px;
}
.alignment_view_v4--indicator:nth-child(2) {
width: 16px;
}
.alignment_view_v4--indicator:nth-child(3) {
width: 7px;
}indicatorContainer
和indicatorGroup
都会反映出来。
以下是将自动布局设置为左上对齐的示例。
1 | .alignment_view_v4--indicatorContainer { |
使用 Flexbox
在上图中,我们有一个名为“Sign up_001”的主框架,在其中有3个嵌套项。嵌套越多,我们从左边获得的间距就越多,以清楚地显示存在嵌套关系。
检查行时,我发现了以下内容:
每一行都是一个 flex
父元素,因此我在 HTML
父元素旁边突出显示了 flex
标签。
在下图中看看它的运行情况:
很酷,但问题是:间距是如何工作的?间距是通过添加间隔组件实现的
。
每个间隔组件的宽度为 16px,所有间隔都有 margin-right: 8px
,除了第一个。
当有更多嵌套时,行将如下所示。
既然视觉方面清楚了,让我们来看看代码和样式。
1 | <div class="object_row"> |
我们有两个 flexbox
父元素,一个用于整行,另一个用于间隔组件(团队 Figma
将它们称为缩进)。
1 | .object_row { |
通过上述内容,可以通过添加新的间隔元素来进行嵌套。
考虑以下标记。我们有两个间隔,这意味着此行是其组中的第一个。
1 | <div class="object_row"> |
其他 Flexbox 用例
描边细节
对于颜色,Flexbox 被用于控制颜色值和不透明度。
在相同的上下文中,当用户悬停在下拉菜单上时,它会通过 flex-grow: 1
将文本展开到完整的可用空间。
文档颜色
在此示例中,最好使用 Flexbox,以便我们可以获得换行的好处。使用 CSS grid
将无法给我们带来同样的结果。
限位组件
这里有多个 Flexbox
容器。第一个用于顶部、中间和底部行。第二个用于中间项,它本身是一个 Flexbox
容器。