我正在研究RTL sass解决方案,尝试在其LTR对应物旁边保留RTL更改(而不是单独的样式表)。我有一些依赖于$ dir变量的函数。因此,如果它被设置为' ltr'使用LTR规则。如果设置为' rtl',则使用RTL规则。
所以我的代码是:
$dir: ltr;
@function if-ltr($if, $else: null) {
@if $dir != rtl {
@return $if;
}
@else {
@return $else;
}
}
@function if-rtl($if, $else:null) {
@return (if-ltr($else, $if);
}
@mixin if-ltr {
@if $dir != rtl {
@content;
}
}
@mixin if-rtl {
@if $dir == rtl {
@content;
}
}
html[dir='rtl'] {
$dir: rtl;
}
p {
color: black;
}
@include if-rtl {
p {
color: red;
}
}
从逻辑上讲,我认为在html标记的dir属性被设置为' rtl'的情况下,变量$ dir将被设置为' rtl'但这不会发生。我可以通过设置$ dir:rtl!global来覆盖它,但这也会改变默认的ltr情况。
所以似乎sass中的变量只能设置为一个值? (它不会否定'变量'名字对象,因为它对于同时更改多个地方的相同值仍然有用。)或者有没有办法解决这个问题?我错过了什么吗?