因为我们有一个主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 css层的primeNG.要做到这一点,我们认为我们可以在导入primeNG scss之前在@layer primeng { ...scss variables here }中导入一些被覆盖的变量.

以下是StackBlitz上的复制品: https://stackblitz.com/edit/angular-ivy-1thpuw?file=src%2Fstyles.scss

和另一个复制试图使用separte scss文件的情况下,它会解决这个问题: https://stackblitz.com/edit/angular-ivy-1thpuw?file=src%2Fstyles.scss

在try 覆盖变量之前定义变量的最后一次复制:https://stackblitz.com/edit/angular-ivy-bsvzt8?file=src%2Fstyles.scss

推荐答案

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

@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;
}

Css相关问答推荐

悬停时可展开的按钮与屏幕右侧对齐,如何保持未悬停的按钮正确对齐?

下拉面板未与Angular中的下拉文本框垂直对齐

SVG文本在移动浏览器上增长并溢出

使用tailwind 将父div限制为其具有溢出的最短子级的高度

如何将此 Select 器转换为TailWind类

如何在Delphi的TMS Web Core上向窗体添加背景图像

Vue3 组合 api 中的对象值样式

如何使用 Tailwind CSS 稳定 React 中的浮动标签?

2 列 UL,右列中的列表项数量为奇数?

做一个像CodeSandbox的console那样的可拖拽的split panel

Icomoon:如何避免重复索引(具有相同内容 ID 的不同图标)?

如何制作一个居中的标题样式,其中换行符将最长的行排列在底部

如何更改下拉列表的宽度?

我应该在 HTML 中为我的 IMG 指定高度和宽度属性吗?

如何使用 CSS 绘制复选标记/勾号?

@font-face src: local - 如果用户已经拥有本地字体,如何使用它?

带有一些 LESS 魔法的花式媒体查询

如何实现最大字体大小?

height: 100% 或 min-height: 100% 用于 html 和 body 元素?

html元素(div)的全高,包括边框,填充和边距?