最近在使用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
但是。。。。这里可以看到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 }