ant-design-vue1.7.8在RTL镜像布局中的致命缺陷

179 阅读1分钟

最近在使用postcss-rtl实现镜像布局时遇到了一些问题,在此记录一下

当dir="rtl"时,好多弹框类型的组件都无法显示了,比较严重的是下拉框,看了下style里的样式,left值特别大

排查了一天终于发现了原因,在ant-design-vue1.7.8的版本中里面有很多,left:-9999px的css样式,包括下拉框,dropdown,日期picker等等,这些基本上都有问题

而postcss-rtl为了实现左右镜像布局,底层依赖了rtlcss这个依赖,翻他源码可以看到

当匹配到left/right属性时,会把两个替换下 left->right, right->left

image.png

但是。。。。这里可以看到left:-9999px被替换成了 right:-9999px 这就导致了ant-design-vue的select组件在弹框dropdown的trigger计算位置时出现了错误,出现了left值特别大,弹框无法出现的情况

postcss-rtl中也提供了blacklist选项来忽略某些不需要被替换的属性

require('postcss-rtl')({blacklist:['left']})

这样暂时解决了问题。

但是由于我们项目中有些样式的left值时需要被替换的,这么一忽略又导致其他布局位置不对了,所以目前的解决方法是,在rtl的时候强制把某些right值异常的样式设置为unset,这样暂时就正常了

[dir=rtl] .ant-select-dropdown{ right: unset !importan }