我正在使用一个mixin将我的Angular 应用程序从LTR相应地转换为RTL。
@mixin rtl($property, $ltr-value, $rtl-value) {
[dir='ltr'] & {
#{$property}: $ltr-value;
}
[dir='rtl'] & {
#{$property}: $rtl-value;
}
}
@mixin rtl-prop($ltr-property, $rtl-property, $value) {
[dir='ltr'] & {
#{$ltr-property}: $value;
}
[dir='rtl'] & {
#{$rtl-property}: $value;
}
}
当我使用@include时,由于某种原因它不起作用。(html标签定义正确)
x一个一个一个一个x一个一个二个x
知道为什么吗?
2条答案
按热度按时间ca1c2owp1#
对于那些将来会遇到这个问题的人来说,问题是组件的封装-它被设置为Emulated,这可能会干扰类名。
将其改为设置为“无”。
w8biq8rn2#
您可以做几件事来解决这个问题,但它们不是最优的:
首先,你要检查组件本身是否设置了dir,这就是为什么它不能工作的原因。因为方向是在标签上设置的。你可以尝试用途:host-context,因为它会查看html属性,而不是你的组件。就像这样:
但是一定要检查canIUse是否有足够的覆盖率。目前它大约是75%,所以我会说它太低了,当然如果你有很多移动的iOS用户的话。
:host-context()的另一个替代方法是
:dir()
,但在编写时它的覆盖率只有3%,所以我也不会使用它。不推荐当前认可的答案(建议将封装设置为None),因为它会使该组件的所有标记都是全局的,并可能导致一些意外的问题。当然,因为方向可能是您希望在几乎所有组件中使用的东西。
我认为最好的解决方案是使用css中的逻辑属性。例如,你使用“start”而不是“left”。你可以在谷歌上搜索它,找到很多使用它的信息。(例如on developer mozilla site)。对于你的例子,你必须用途:
这将使它在任何文本方向上看起来都像你想要的那样,而不使用任何mixin。