Skip to content

渲染器选项

Render Options 是一个渲染钩子,它在 样式解析程序 解析图层样式时发挥作用。它可以帮助你将图层信息渲染为符合你预期的代码形式。

一个标准的渲染器选项示例

json
"padding": {
  "nodeName": "",
  "filter": ["0","padding-none"],
  "classAttr": "class",
  "styleAttr": "style",
  "classPrefix": {
    "padding": "p-",
    "padding-top": "pt-",
    "padding-left": "pl-",
    "padding-right": "pr-",
    "padding-bottom": "pb-",
    "padding-x": "px-",
    "padding-y": "py-"
  },
  "stylePrefix": "",
  "getCssVar": false,
  "mappings": {
    "0": "none",
    "4": "sm",
    "8": "md",
    "12": "lg"
  }
}

nodeName

  • Type: string
  • Default: Currently selected node

以当前选择的节点为起点,在其子节点中查找名为 {nodeName} 的节点。如果 nodeName 为空,则选择当前节点。因此,节点名称应尽可能保持唯一性。以下是一个示例:

json
"text": {
  "nodeName": "_title" // 这里的 `_title` 指 Figma 的图层名称
}

TIP

在查找节点时,会从当前节点开始,但如果遇到一个 实例节点,则会终止当前的查找程序。所以你要继续深度查询的话,需要使用 deepFind 的 Api,如下所示:

deepFind

  • Type: boolan

深度查找可以帮助你无限向下查询 nodeName,实例也不例外。需要注意的是,这种查找方式会稍微增加渲染时间。并且需要注意重名的问题。

json
"text": {
  "nodeName": {
    "name": "_title",
    "deepFind": true
  }
}

filter

  • Type: string | string[]

filter 选项,可以根据你的需求来过滤输出的样式。如果你需要同时过滤多个值,可以使用数组来列举你要过滤的内容。 大小写不敏感。

json
"font-size": {
  "filter": "12" 
}
// 像素值不用写px
// or
"font-size": {
  "filter": ["12", "text-xs", "var(--text-xs)"]
}

mappings 选项中,可以将Figma的样式名称映射为 class 名称,例如:text-xs

classAttr

  • Type: string
  • Default: class

解析程序在渲染图层样式时,会根据 classAttr 渲染选项的设置,将样式输出到指定的属性里。类似:className="bg-hover"

json
"background": {
  "classAttr": "class" 
}
// output class="bg-hover"

"background": {
  "classAttr": "className"
}
// output className="bg-hover"

styleAttr

  • Type: string
  • Default: string

解析程序在渲染图层样式时,会根据 styleAttr 渲染选项的设置,将样式输出到指定的属性里。类似:panel-style="background-color: #000"

json
"background": {
  "styleAttr": "style" 
}
// output style="background-color: #000"

"background": {
  "styleAttr": "panel-style"
}
// output panel-style="background-color: #000"

classPrefix

  • Type: string

在样式映射时,可以通过前缀名称来增加前缀。这样的功能在某些场景下非常有用。请继续阅读下面的示例:

json
// style-parsers
"justifyContent": {
  "nodeName": "",
  "filter": "",
  "classAttr": "class",
  "styleAttr": "style",
  "classPrefix": "justify-",
  "stylePrefix": "justify-content",
  "getCssVar": false,
  "mappings": {}
}

// mappings
"justify-content": {
  "flex-start": "start",
  "center": "center",
  "flex-end": "end",
  "space-between": "between"
}

// 输出为
justify-start

classPrefix 还支持对象格式,这样可以为某些有多个方向特性的属性分别设置前缀

json
// style-parsers
"padding": {
  "nodeName": "",
  "filter": "",
  "classAttr": "class",
  "styleAttr": "style",
  "classPrefix": {
    "padding": "p-",
    "padding-top": "pt-",
    "padding-left": "pl-",
    "padding-right": "pr-",
    "padding-bottom": "pb-",
    "padding-x": "px-",
    "padding-y": "py-"
  },
  "stylePrefix": "padding",
  "getCssVar": false,
  "getDirection": "",
  "mappings": {}
}

stylePrefix

  • Type: string

style 前缀在严格意义上来说它应该名为 Css Property Name。为了方便记忆,我们还是决定同 classPrefix 一样也用前缀来命名。下面我们来看它的使用案例:

json
"background": {
  "stylePrefix": "background-color",
}
// 输出 style="background-color: #000000"

"color": {
  "stylePrefix": "--bg"
}
// 输出 style="--bg: #000000"

"color": {
  "stylePrefix": ""
}
// 输出 style="#000000"

由此可见,stylePrefix 选项可以根据你的需要,配置出完全符合你预期的代码。

textAttr

  • Type: string

文本属性用于将纯文本内容输入到指定的属性名内。

json
"textAttr": "value",
// 输出 value="text"

WARNING

它仅在 text 样式解析程序中起作用

getCssVar

  • Type: boolan
  • Default: false

如果你希望将映射的样式以 var 样式输出。可以使用 getCssVar 选项。

json
// 例如选中的节点填充为 `primary` 的样式
"background": {
  "getCssVar": true,
  "mappings": {
    "primary": "bg-primary",
    "danger": "bg-danger",
    "warning": "bg-warning"
  }
}
// 输出 background-color: var(--bg-primary)

// 如果你不需要 background-color 属性名称,并且将 var 值放到特定的属性中:
"background": {
  "styleAttr": "color",
  "stylePrefix": "",
  "getCssVar": true,
  "mappings": {
    "primary": "bg-primary",
    "danger": "bg-danger",
    "warning": "bg-warning"
  }
}
// 输出 color="var(--bg-primary)

TIP

前提是需要在你的项目中提前预设好 Css Variable 样式,才能够被正确引用。Codify 插件也可以帮你一键将 Figma 的样式导出为 Css Variable

valueFrom

  • Type: border | background | color

获取图层的某个特定属性的值,例如

type 样式解析程序我们可以这样配置:

json
// 我们需要获取图层的 border 颜色
"type": {
  "valueFrom": "border"
}
// 如果图层的 Stoke 为 "primary" 
type="primary"

disabled 样式解析程序我们可以这样配置:

json
// 我们需要获取图层的 border 颜色
"disabled": {
  "valueFrom": "background",
  "mappings": {
    "bg-disabled": "true"
  }
}
// 如果你当前图层填充了 "bg-disabled" 这个样式,则会输出
disabled="true"

// 如果你希望像大多数前端框架那样直接输出 dieabled 属性,而不需要 “true” 这个值的话,你可以:
"mappings": {
  "bg-disabled": ""
}

TIP

valueFrom 仅支持 type, disabledattr 这3个样式解析程序,其它的并没有实际的使用场景。

mappings

  • Type: string | object
  • Default: default hooks configuration

如果你不希望某个解析程序使用全局的样式映射表,你可以在解析程序中使用 mappings 单独定义映射。例如:

json
"color": {
  "nodeName": "",
  "filter": "",
  "classAttr": "style", // 这里需要将classAttr 改为 style
  "styleAttr": "style",
  "classPrefix": "",
  "stylePrefix": "--title-color", // 自定义 CSS 属性名称
  "getCssVar": false,
  "mappings": {
    "text-regular": "var(--regular)",
    "text-secondary": "var(--secondary)",
    "text-light": "var(--light)",
    "text-lightest": "var(--lightest)",
    "text-title": "var(--title)",
    "text-link": "var(--link)",
    "text-hover": "var(--hover)",
    "text-active": "var(--active)",
    "text-inverse": "var(--inverse)"
  }
}

//输出
<span style="--title-color: var(--regular)">text</span>

需要注意的是这些被映射的Class name 在你的项目中应该已经预制了这些样式信息。如果你的项目样式使用 Tailwind 构建就更加方便。同时 Codify 也提供了 CSS Utils 生成。

showUnit

  • Type: boolan
  • Default: true

如果你不需要输出单位值,可以使用此选项,例如:

json
// style-parsers
"width": {
  "nodeName": "",
  "filter": "",
  "classAttr": "class",
  "styleAttr": "style",
  "classPrefix": "w-",
  "stylePrefix": "width",
  "showUnit": true,
  "getCssVar": false,
  "getArbitraryVar": true,
  "mappings": {}
}
// 上面的配置则会输出
style="100px"

// 设置
"styleAttr": "width",
// 输出
width="width: 100px"

// 设置
"stylePrefix": "",
// 输出
width="100px"

// 设置
"showUnit": false,
// 输出
width="100"

这将得到你想要的代码格式。

getArbitraryVar

  • Type: boolan
  • Default: false

这是一个仅适用于 Tailwind 的渲染器选项,用于解析任意值 Arbitrary values的格式。

json
// style-parsers
"width": {
  "nodeName": "",
  "filter": "",
  "classAttr": "class",
  "styleAttr": "style",
  "classPrefix": "w-",
  "stylePrefix": "width",
  "getCssVar": false,
  "getArbitraryVar": true,
  "mappings": {}
}

//输出
class="w-[100px]"

forcedOutput

  • Type: boolan
  • Default: false

当您为 heightwidth 解析器设置 forcedOutput 选项时,它将始终输出高度或宽度样式,无论图层是否具有 适应充满 属性。

json
// style-parsers
"width": {
  "forcedOutput": true
}

//输出
style="width: 100px"

childComponent

  • Type: boolan
  • Default: false

是否以子组件的模式渲染。

json
"icon": {
  "nodeName": {
    "name": "icon",
  },
  "childComponent": true
}

getComponentName

  • Type: boolan
  • Default: false

是否仅输出组件的名称,而不是组件的代码。例如我们解析一个 React 的图标组件:

jsx
"Icon": {
  "icon": {
    "nodeName": {
      "name": "icons",
      "deepFind": true
    },
    "attrName": "component",
    "getComponentName": false
  }
}

<Icon component={<SmileOutlined />} />


"getComponentName": true

<Icon component={SmileOutlined} />