给 TemPad Dev 用的两个样式转换插件:H5(Stylus/CSS)与 React Native。
| 插件 | 用途 | 插件地址 |
|---|---|---|
| Timo UI | H5 项目(Stylus mixin + CSS) | https://vivid05.github.io/tempad-dev-plugin/dist/plugin.mjs |
| Timo RN | rn-store 仓库(RN StyleSheet) | https://vivid05.github.io/tempad-dev-plugin/dist/plugin-rn.mjs |
TemPad Dev 一次只加载一个插件,写 H5 用上面那个、切图到 RN 用下面那个。
- 自动组合
font-size、color、line-height、font-weight为 Stylus mixin 格式 - 没有字体属性时显示"无"
- 将
fill转换为background-color - 将
stroke-width和stroke组合为border - 自动过滤
font-family和font-style属性 - 输出标准 CSS 格式
面板里 RN Style 块在最上面,直接产出能贴进 StyleSheet.create({ ... }) 的属性行;下面的 CSS 块保留 Figma 原始 CSS 方便对照。
内置 css 块在 tempad-dev 里是硬编码排在自定义块之前的(
codegen/worker.ts: component → css → js →...Object.keys(rest)),所以这里把内置块设为css: false,另用自定义块cssRaw补一个 CSS 输出,才能让 RN Style 排到上面。
转换规则对齐 rn-store 仓库的 rn-ui-from-design skill 与 withdraw 模块现有代码:
- Figma 画板基准宽 750,px 数值 1:1 包一层
s():width: 332px→width: s(332) - 换成 375 稿时,改
src/plugin-rn.js顶部的DESIGN_SCALE = 2重新 build 0、百分比、flex、opacity、zIndex、阴影的 offset/radius 不包s()(阴影这条是照仓库现有写法)
| CSS | RN |
|---|---|
margin-left / padding-right |
marginStart / paddingEnd |
left / right |
start / end |
border-top-left-radius |
borderTopStartRadius |
padding: 12px 32px 12px 24px |
paddingTop / paddingEnd / paddingBottom / paddingStart |
border-radius: 0 32px 0 32px |
四个 borderTop/BottomStart/EndRadius |
display:flex且稿子没给flex-direction→ 自动补flexDirection: 'row'(CSS 主轴默认 row,RN 默认 column,这里最容易踩)- Figma 的「填充容器」
flex: 1 0 0→flex: 1 padding/margin/inset简写按 1/2/3/4 值展开成Vertical、Horizontal或四边gap: 16px 24px→rowGap/columnGapdisplay:grid、order、float、overflow:scroll→ 转成提示,让你手动改 flex
line-height: 120%按font-size换算并取整成s(48);normal兜底成fontSize + 8;换算结果小于字号时抬到fontSize(否则安卓裁字形下沿)letter-spacing: -2%同样按font-size换算font-weight: bold→'700'(一律字符串)font-family/font-style: normal丢弃(仓库不指定字体族)text-overflow/-webkit-line-clamp→ 提示改用numberOfLines- 容器样式与文字样式之间插一行
// 文字分隔,方便拆成两个 StyleSheet 条目
box-shadow: 0 8px 24px rgba(0,0,0,.08)→shadowColor(保留 rgba)+shadowOpacity: 1+shadowRadius+shadowOffset+elevationelevation按blur / 5估算,行尾带注释提醒真机微调- 多层阴影只取第一层、
inset内阴影转提示(RN 都不支持) border: 2px solid #FFF→borderWidth+borderColor,solid省略、dashed额外提醒安卓不稳
渐变(指向 shared/components/Gradient)、backdrop-filter、filter、mix-blend-mode、background-clip、position:sticky、transform-origin、内阴影。
没做映射的属性(如 mask-image)会以注释行形式输出,不污染样式也不悄悄丢信息。
- 色值:输出的是归一化后的字面量(
#8f5→'#88FF55')。仓库禁止组件里散写 hex,出现 ≥2 次的要挪进模块constants/theme.ts的colors。 fill:按容器底色转成了backgroundColor,如果这其实是图标颜色,改成tintColor/color。
# 安装依赖
npm install
# 构建(产出 dist/plugin.mjs 与 dist/plugin-rn.mjs)
npm run build
# 启动 HTTPS 开发服务器(会同时打印两个插件地址)
node dev-server.jssrc/plugin.js- Timo UI(H5)插件源码src/plugin-rn.js- Timo RN 插件源码dist/*.mjs- 构建产物build.config.js- unbuild 配置dev-server.js- HTTPS 开发服务器
MIT