SASS项目中的从右到左(RTL)支持

7

我想知道是否有可能创建一个mixin,它可以处理多个参数作为属性,并将其转换为rtl。我想做的事情类似于:

.css-selector {
    width: 300px;
    height: 200px;
    @include rtl {
         padding: 10px 5px 3px 4px;
         margin: 3px 8px 2px 5px;
    }
}

使用mixin:

$rtl = false !default;

 @mixin rtl() {
    @if $rtl {
        dir: rtl;
        @each $property in @content {
            //check property if it's padding or margin or something 
              else rtl-related... if hit use rtl mixin
            }
    }
    @else { @content; }

}

我认为我应该解析@content,但它无法正常工作(Invalid CSS after "...h $property in ": expected expression (e.g. 1px, bold), was "@content {)。
现在我使用2个变量来处理rtl:
 $dir: left !default;
 $opdir: right !default;

我希望在RTL时更改这个内容。我在Sass文件中使用它,例如:

margin-#{$dir}: 15px;

但我认为这个解决方案不够灵活。而且我也不想为每个 CSS 属性包含一个单独的混合(mixin)。
是否有更好的想法或解决方案?欢迎任何反馈。

现在我正在使用一个简单的rtl检查`.cssBlock{ margin-top: 50px; @if $ltr { margin-left: 30px; } @else { margin-right: 30px; } }` - woutvdd
3个回答

4

这并不是相同的方法,但是bi-app-sass可以解决rtl问题,并为您生成2种不同的样式表。

创建必要的文件后(在上面的链接中解释),您只需调用预定义的mixin来设置left / right属性(float,border,margin,padding,text-align ...)

 .foo {
   @include float(left);
   @include border-left(1px solid white);
   @include text-align(right);
 }

这个项目还有一个针对较少语言的版本。


更新

bi-app-sass中,有条件的rtlltr混合器,可用于处理特殊情况,请参考以下示例。

.something {
    @include ltr {
        // anything here will appear in the ltr stylesheet only
        background-image: url( 'app-ltr.jpg' );
    }
    @include rtl {
        // for rtl sheet only
        background-image: url( 'app-rtl.jpg' );
        margin-top: -2px;
    }
}

请注意,此功能不支持 bi-app-less

0
我建议使用一个单一的mixin,可以轻松处理包括嵌套选择器在内的两种情况:

_mixin.sass:

$isRLT: true;

@mixin rtl {
  @if $isRLT {
    @if & {
      & {
        @content;
      }
    }
    @else {
      @content;
    }
  }
}

_main.sass:

.test {
  float: left;
  padding: 5px 5px 0px;

  @include rtl {
    padding: 5px 0px 0px 5px;
  }
}

core.scss

// include all your libraries
@import '_mixin';
@import '_main';

这将生成没有rtl的文件。

欲了解更多信息,请查看 => https://github.com/davidecantoni/sass-rtl-mixin


0
以下的 SCSS 导入添加了一些有用的变量、函数和混合器。 在 GitHub 上查看 阅读更多
// Override default value for $dir in directional.scss
$dir: rtl;

// Import helpers from directional.scss
@import "directional";

// Use the helpers to make CSS for LTR or RTL
body {
    text-align: $left;
    padding-#{$right}: 1em;
    margin: dir-values(0 2em 0 1em) if-ltr(!important);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接