css 如何使用在另一个层定义块中定义的SASS层作用域变量

pcrecxhr  于 2024-01-09  发布在  其他
关注(0)|答案(1)|浏览(102)

假设我们有一个主css层。在这个层中,我们使用一个scss变量。当变量在同一层块中定义时,一切都很完美。但是当我们试图在另一个相同的层块中定义变量时。下面是我们的示例代码:

@layer main, overrides;

@layer main {
  $someColor: orange;
}

@layer overrides {
  $someColor: red;
}

@layer main {
  // $someColor: orange;

  h1 {
    color: $someColor;
  }
}

字符串
这样做会导致Undefined variable color: $someColor,sass似乎无法解析变量。
有没有办法做到这一点?
主要目标是通过覆盖scss变量来覆盖来自第三方的css层,比如primeNG,它定义了一个primeng css层。为此,我们认为我们可以在导入primeNG scss之前导入@layer primeng { ...scss variables here }中一些被覆盖的变量。
以下是StackBlitz上的复制:https://stackblitz.com/edit/angular-ivy-1thpuw?file=src%2Fstyles.scss
另一个复制试图使用单独的scss文件,以防它会解决这个问题:https://stackblitz.com/edit/angular-ivy-1thpuw?file=src%2Fstyles.scss
在层尝试覆盖变量之前定义变量的最后一次复制:https://stackblitz.com/edit/angular-ivy-bsvzt8?file=src%2Fstyles.scss

vbkedwbf

vbkedwbf1#

因此,您可以创建一个主层,其中包含所有变量覆盖,然后您可以导入作用域CSS,您需要使用import语句在其上应用颜色!

@import "yourfile";

字符串
scss代码:

body {
  font-family: Roboto, Arial, sans-serif;
  font-size: 14px;
  margin: 0;
  padding: 10px;
}

@layer main, overrides;

@layer main {
  $someColor: orange; // <- scope exists only inside this block

  @import './test.scss';
}
// $someColor does not exists outside here
@layer overrides {
  $someColor: red;
}


stackblitz
请在下面找到一个注解解释,除非它们是全局的,否则CSS变量只存在于定义的块中,因为变量($someColor)不是全局定义,所以你会得到这个错误。
使用前:

body {
  font-family: Roboto, Arial, sans-serif;
  font-size: 14px;
  margin: 0;
  padding: 10px;
}

@layer main, overrides;

@layer main {
  $someColor: orange; // <- scope exists only inside this block
}
// $someColor does not exists outside here
@layer overrides {
  $someColor: red;
}

@layer main {
  // $someColor: orange;

  h1 {
    color: $someColor; // $someColor does not exists inside here since its isolated to the other @layer main block!
  }
}


之后:

body {
  font-family: Roboto, Arial, sans-serif;
  font-size: 14px;
  margin: 0;
  padding: 10px;
}

@layer main, overrides;

@layer main {
  $someColor: orange; // <- scope exists only inside this block

  h1 {
    color: $someColor;
  }
}
// $someColor does not exists outside here
@layer overrides {
  $someColor: red;
}

相关问题