我想知道是否可以将一个处理多个参数的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,但它不起作用(“... h $ property in”之后的无效CSS:期望表达式(例如1px,粗体),是“@content {)。
现在我处理了2个vars的rtl:
$dir: left !default;
$opdir: right !default;
我改变它的rtl。我在我的sass文件中使用它,如
margin-#{$dir}: 15px;
但我不认为这个解决方案足够灵活。而且我也不想在每个css属性中包含单独的mixin。
有人有更好的想法或解决方案吗?任何反馈欢迎
答案 0 :(得分:4)
不一样的方法,但是bi-app-sass会解决rtl问题,它会为你生成2个不同的样式表
创建必要的文件后(在上面的链接中解释),你所要做的就是为左/右属性调用预定义的mixin(float,border,margin,padding,text-align ...)
.foo {
@include float(left);
@include border-left(1px solid white);
@include text-align(right);
}
此项目的端口还有较少的语言
<强>更新强>
bi-app-sass中的有rtl
&amp;有效处理特殊情况的ltr
条件mixins,请参阅以下示例
.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
答案 1 :(得分:0)
以下SCSS导入添加了一些有用的变量,函数和mixin。
// 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);
}
答案 2 :(得分: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的文件。
有关详细信息,请检查=&gt; https://github.com/davidecantoni/sass-rtl-mixin