如何有条件地覆盖sass变量?

时间:2017-03-06 22:01:39

标签: sass

我正在研究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中的变量只能设置为一个值? (它不会否定'变量'名字对象,因为它对于同时更改多个地方的相同值仍然有用。)或者有没有办法解决这个问题?我错过了什么吗?

0 个答案:

没有答案