【问题标题】:Changing variables values scss更改变量值 scss
【发布时间】:2018-07-04 20:36:10
【问题描述】:

我在我的 scss 文件中定义了不同的变量,我在一些 scss 文件中使用了这些变量。

_variables.scss

$light-theme: rgba(94,161,215,0.3);
$dark-theme: #5EA1D7;
$darker-theme: #57647A;
$very-dark-theme: #455061;

如何定义 3 组主题?比如:

default-theme {
    $light-theme: rgba(94,161,215,0.3);
    $dark-theme: #5EA1D7;
    $darker-theme: #57647A;
    $very-dark-theme: #455061;
}

dark-theme {
    $light-theme: black;
    $dark-theme: brown;
    $darker-theme: black;
    $very-dark-theme: black;
}

light-theme {
    $light-theme: black;
    $dark-theme: brown;
    $darker-theme: black;
    $very-dark-theme: black;
}

我想根据所选主题更改值。 例如我有 3 个按钮,选择它们,将改变可变颜色。

app.component.html

 <button mat-raised-button (click)="onSetTheme('default-theme')">Default</button>
  <button mat-raised-button (click)="onSetTheme('dark-theme')">Dark</button>
  <button mat-raised-button (click)="onSetTheme('light-theme')">Light</button>

app.component.ts

  onSetTheme(theme) {
    //TODO here I want to change the theme
  }

如何在 onSetTheme() 函数中更改主题。

谢谢!

【问题讨论】:

  • 我正在使用 Angular 4 框架

标签: angular sass themes


【解决方案1】:

您可以一起使用 SASS 变量和其他 SASS 材料和 CSS 变量。

SASS

$body-margin: 0 10px;

:root {
    --bg-color: #000;
    --text-color: #FFF;
}


body {
    background: var(--bg-color);
    color: var(--text-color;
    margin: $margin;
}

JS

onSetTheme(theme) {
    let bgColor, textColor;
    switch(theme) {
      case light:
          bgColor = #FFF;
          textColor = #000;
          break;
      case dark:
          bgColor = #000;
          textColor = #FFF;
          break;
    }
    document.querySelector('body').style.setProperty('--bg-color', bgColor);
    document.querySelector('body').style.setProperty('--text-color', textColor);
}

【讨论】:

  • 不支持 IE
【解决方案2】:

为什么我们不能在浏览器中动态改变 sass 变量?

Sass 是 CSS 的预处理器,可让您在开发过程中更轻松地编写样式规则。浏览器不会加载你的 .scss/.sass 文件;它将加载 CSS - 因此您的 .scss/.sass 必须转换为浏览器的 CSS。

您的 Sass 变量只是 Sass 文件中的变量。转换成 CSS 后,变量将替换为它们在编译时表示的值。

.scss 正在开发中:

body {
    background: $dark-theme;
}

浏览器加载的编译CSS:

body {
    background: black;
}

您的 onSetTheme 函数是一个 javascript 函数,它将在浏览器中运行,并且无权更改 sass 变量,因为此时它们不存在。浏览器只加载编译好的 CSS(它不会加载原始的 Sass 文件和变量)。


如何在浏览器中动态改变你的网站主题?

切换 CSS 类

CSS 变量 (mdn)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 2018-09-23
    • 2015-09-03
    • 1970-01-01
    相关资源
    最近更新 更多