【发布时间】:2018-08-20 16:27:00
【问题描述】:
我有一个角度应用程序。此应用程序支持具有 rtl 和 ltr 布局的多种语言。布局将根据用户语言的变化而改变。
我有两个 SCSS 文件,每个方向一个。 我想根据变量的值加载其中一个。我迷路了,我不知道我应该在哪里做。此类问题的最佳做法是什么?
谢谢!
【问题讨论】:
我有一个角度应用程序。此应用程序支持具有 rtl 和 ltr 布局的多种语言。布局将根据用户语言的变化而改变。
我有两个 SCSS 文件,每个方向一个。 我想根据变量的值加载其中一个。我迷路了,我不知道我应该在哪里做。此类问题的最佳做法是什么?
谢谢!
【问题讨论】:
您可以创建一个类标志,如 rtl ,ltr 并在类的主体中导入选定的主题(scss 文件),这意味着当类呈现特定主题时将应用。
_ltr.scss
h1 {
background: #4285f4;
color:#fff;
text-align: left;
}
_rtl.scss
h1 {
background: #ea4335;
color:#fff;
text-align: right;
}
style.scss
.rtl {
@import "theme/_rtl.scss"
}
.ltr {
@import "theme/_ltr.scss"
}
编译后的 style.scss
.rtl h1 {
background: #ea4335;
color: #fff;
text-align: right
}
.ltr h1 {
background: #4285f4;
color: #fff;
text-align: left
}
app.component.html
<div>Selected theme :
<select [(ngModel)]="selectedTheme">
<option value="rtl">RTL</option>
<option value="ltr">LTR</option>
</select>
</div>
<div [class]="selectedTheme">
....
</div>
【讨论】:
您不能(或者,好吧,它没有意义)在运行时加载不同的 .scss 文件,因为它们首先需要编译为 CSS 才能在浏览器中工作。
另一个答案显示了bundling both versions of styles 为两种布局执行此操作的方法,但根据您的代码组织,这可能会导致大量重复,这可能并不理想。
其他选项包括:
[style.text-align]="direction";【讨论】: