如何有条件地重写sass变量?

如何有条件地重写sass变量?,sass,Sass,我正在开发一个RTL sass解决方案,尝试将RTL更改保持在LTR对应项的旁边(而不是单独的样式表)。我有一些函数依赖于$dir变量。因此,如果设置为“ltr”,则使用ltr规则。如果设置为“rtl”,则使用rtl规则 所以我的代码是: $dir: ltr; @function if-ltr($if, $else: null) { @if $dir != rtl { @return $if; } @else { @return $else

我正在开发一个RTL sass解决方案,尝试将RTL更改保持在LTR对应项的旁边(而不是单独的样式表)。我有一些函数依赖于$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来覆盖它!全局的,但对于默认的ltr情况也会改变它


所以sass中的变量似乎只能设置为一个值?(它不会否定“variable”名字对象,因为它仍然有助于同时在多个位置更改相同的值。)或者有办法解决这个问题吗?我遗漏了什么吗?

我只是好奇你是否考虑过使用类似的东西。它将生成一个单独的CSS文件(你说你希望避免),但你不必为站点的RTL版本编写太多CSS。嘿@Katharine,你找到解决方案了吗?