我们用 React + Taro 做多端(H5、微信小程序、App),同一个组件在不同端表现不一致,改一个样式要测三遍,还经常互相影响。比如下面这个按钮,在 H5 上居中正常,但在小程序里就偏移了:
const MyButton = () => {
return (
<View className="btn-container">
<Button className="submit-btn">提交</Button>
</View>
);
};
尝试过用平台判断加条件样式,但代码越来越乱,有没有更可持续的方案?
说几个实测有效的方案,按效率排序。
第一个方案是用 CSS 变量统一管控差异点。Taro 编译时各端都支持 CSS 变量,把容易出问题的属性抽成变量,按平台覆写就行。
第二个方案,既然用 Taro,就把平台差异样式隔离到独立文件里。Taro 支持
.h5.scss、.weapp.scss这种后缀自动匹配,编译时只会打包对应端的样式。编译器自动处理,零运行时开销,这个最省心。
第三个方案,把按钮这类基础组件封一层 UI 基础库。各端的默认样式差异是罪魁祸首,Button 在 H5 和小程序的默认 margin、padding、border 都不一样,重置掉就行。
第四个方案,布局统一用 flex,别用各端解释差异大的属性。text-align、vertical-align 这种在不同容器模型下表现不一致,flex 的 align-items、justify-content 跨端表现稳定得多。
最后说个关键点,postcss-pxtransform 配置好 designWidth,设计稿尺寸和各端换算逻辑统一,能少踩很多坑。Taro 默认 750 设计稿,你的设计稿如果不是这个尺寸,记得改配置。
还有,测三遍这个事儿,搞个端到端自动化测试脚本,snapshot diff 跑起来,省得每次手动测。