css - SCSS浅色和深色主题颜色,如何使其工作?

标签 css vue.js sass themes element-plus

所以我使用 vue js 和 scss。 我正在使用 PrimeVue 和 Element plus,并且正在导入变量。 我想动态更改主题颜色。

暗变量.scss

$--color-primary: #c9d1d9 !default;
/// color|1|Background Color|4
$--color-white: #11141a !default;
/// color|1|Background Color|4
$--color-black: #000000 !default;
$--color-primary-light-1: mix($--color-white, $--color-primary, 10%) !default; /* 53a8ff */
$--color-primary-light-2: mix($--color-white, $--color-primary, 20%) !default; /* 66b1ff */
$--color-primary-light-3: mix($--color-white, $--color-primary, 30%) !default; /* 79bbff */
$--color-primary-light-4: mix($--color-white, $--color-primary, 40%) !default; /* 8cc5ff */
$--color-primary-light-5: mix($--color-white, $--color-primary, 50%) !default; /* a0cfff */
$--color-primary-light-6: mix($--color-white, $--color-primary, 60%) !default; /* b3d8ff */
$--color-primary-light-7: mix($--color-white, $--color-primary, 70%) !default; /* c6e2ff */
$--color-primary-light-8: mix($--color-white, $--color-primary, 80%) !default; /* d9ecff */
$--color-primary-light-9: #21262d !default; /* ecf5ff */ // #2c333c | #152344
/// color|1|Functional Color|1
$--color-success: #67c23a !default;
/// color|1|Functional Color|1
$--color-warning: #e6a23c !default;
/// color|1|Functional Color|1
$--color-danger: #f56c6c !default;
/// color|1|Functional Color|1
$--color-info: #909399 !default;

$--color-primary - 可以在很多 scss 文件中使用,我想根据主题更改颜色,

例如:

$--color-primary:白色(如果是浅色主题,如果是黑色主题则为黑色)

**我正在尝试做什么**

$themes: (
  darkTheme: (
    "text-color": rgb(245, 0, 0),
    "bg-color": #424242,
  ),
  lightTheme: (
    "text-color": black,
    "bg-color": #f5f5f5,
  ),
);

@mixin theme() {
  @each $theme, $map in $themes {
    $theme-map: $map !global;
    .#{$theme} & {
    }
  }
  $theme-map: null !global;
}

@function theme-get($key) {
  @return map-get($theme-map, $key);
}

// - Error
$--color-primary: theme-get("text-color");

错误本身:

Syntax Error: SassError: Undefined variable.
   ╷
56 │   @return map-get($theme-map, $key);
   │                   ^^^^^^^^^^
   ╵
  src\assets\styles\element-variables.scss 56:19  theme-get()
  src\assets\styles\element-variables.scss 59:19  @import
  src\assets\styles\kendoUI\kendoUI.scss 1:9      @import
  E:\Sproj\Web\src\assets\styles\styles.scss 7:9    

怎样才能让它发挥作用?

最佳答案

我认为我们需要改变两件事,

  1. 我们需要用 & 删除动态类的不正确语法

  2. 我们需要包含 mixin 来初始化 $theme-map

      darkTheme: (
        "color": rgb(245, 0, 0),
        "background-color": #424242,
      ),
      lightTheme: (
        "color": black,
        "background-color": #f5f5f5,
      ),
    );
    
    @mixin theme() {
      $theme-map: null !global;
      @each $theme, $map in $themes {
        $theme-map: $map !global;
        .#{$theme} {
        }
      }
    }
    
    @include theme();
    
    @function theme-get($key) {
      @return map-get($theme-map, $key);
    }
    
    // - Error
    $--color-primary: theme-get("text-color");
    
    .theme {
        color: $--color-primary;
    }
    
    

关于css - SCSS浅色和深色主题颜色,如何使其工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68583168/

相关文章:

javascript - 从使用 CodeMirror 创建的内联代码中删除填充

javascript - 如何检测 div 是否在 bootstrap twitter 中使用滚动?

vue.js - Vuejs动态添加子路由

css - 为什么我会收到语法错误 : SassError: expected "{"?

sass - 将 Sass 变量与 CSS3 媒体查询结合使用

variables - 在 Sass 中动态创建或引用变量

html - 我可以调整 HTML 文本中复选框的垂直位置吗?

html - 网站全屏覆盖

javascript - Axios 未传递 Content-Type header

ajax - axios AJAX调用nulls参数