Figma样式导出后在Vue中怎么保持一致?

迷人的鑫丹 阅读 20

我在Figma里定义了一套Text Styles,导出成CSS变量后用在Vue项目里,但字体大小和行高总是对不上,明明数值一样啊!

我试过直接复制Figma的px值,也试过用rem,但显示效果还是有偏差,是不是哪里漏了单位转换?

<template>
  <h1 class="figma-title">标题</h1>
</template>

<style>
:root {
  --font-size-title: 32px;
  --line-height-title: 40px;
}
.figma-title {
  font-size: var(--font-size-title);
  line-height: var(--line-height-title);
}
</style>
我来解答 赞 6 收藏
二维码
手机扫码查看
2 条解答
钰文 Dev
这个问题我踩过坑,主要是Figma和CSS对行高的计算逻辑有差异。

Figma里的line-height是绝对值,导出时如果直接用px,大部分情况是对的,但问题通常出在这几个地方:

第一个是浏览器默认样式干扰,你有没有重置过user agent stylesheet?不同浏览器对line-height的默认值不一样,建议先在全局样式里重置:

* {
margin: 0;
padding: 0;
}
html {
line-height: 1.5;
}


第二个是line-height的写法问题。Figma导出的40px这种绝对值在CSS里是能用的,但更推荐用无单位数值,这样能自动跟随font-size计算。你可以改成这样:

:root {
--font-size-title: 32px;
--line-height-title: 1.25; /* 40 / 32 = 1.25 */
}
.figma-title {
font-size: var(--font-size-title);
line-height: var(--line-height-title);
}


第三个,也是最容易被忽略的,字体文件本身。Figma里用的字体和你Vue项目加载的字体是同一个文件吗?不同字体即使字号一样,字形的实际高度和基线位置都不同,这会直接影响视觉上的行高效果。建议检查一下font-family是否真的对应上了。

另外如果你用rem单位,记得确认html根元素的font-size基准值是多少,默认16px的话,32px就是2rem。这个转换别搞错了。

还有个事儿,CSS变量如果后续会通过JavaScript动态修改,记得对值做校验,别直接塞用户输入进去,容易出XSS问题,虽然CSS变量本身不会直接执行脚本,但恶意值可能破坏布局或者被其他地方引用导致问题。
点赞
2026-03-02 08:05
公孙春艳
Figma导出的CSS变量直接用在Vue里对不上,主要是因为Figma里的行高(Line Height)单位是“无单位值”(比如40px字号对应1.25倍行高),但导出的CSS里写成40px这种绝对值,而浏览器解析时会把line-height: 40px当作固定像素值,不会随字体大小缩放——你改字号时它不动,视觉肯定歪了。

正确做法是:
1. 字体大小(font-size)可以直接用px或rem,但要统一基准(比如根节点设font-size: 16px
2. 行高(line-height)尽量用无单位数(比如1.25),而不是硬写px
3. 如果导出的是px值,建议在Vue里用calc动态转换,比如:line-height: calc(var(--font-size-title) * 1.25)

另外提醒下,Figma里Text Style的“Line Height”字段默认是百分比或倍数,导出插件可能没按这个逻辑转——你先在Figma里点开那个Text Style,看下Line Height列的是“40px”还是“125%”(或“1.25”),如果是后者,导出的CSS变量最好保留无单位形式,别硬转px,否则容易踩这个坑。

最后顺带一提:如果变量是后端注入的,记得做XSS防护,防止注入。
点赞 1
2026-02-27 04:04