CSS 变量和 SCSS 混合

Posted

技术标签:

【中文标题】CSS 变量和 SCSS 混合【英文标题】:CSS variable & SCSS mixin 【发布时间】:2018-12-03 17:50:16 【问题描述】:

我需要能够使用 CSS 变量,因为我需要有一个悬停效果(背景颜色)才能由我的 VueJs 应用程序自定义。 但是我的 CSS 样式表应该有一个默认值,它存储在嵌套的 SCSS 映射中。 (map-getter 是一个从嵌套映射中返回值的函数)

我知道我的 SCSS 代码可以工作,因为我这样做时会得到预期的结果:

.theme--dark .AppNavTile:hover 
  background-color: map-getter($theme-dark, AppNav, hover);
  //returns background-color: rgba(255, 255, 255, 0.87); in my browser's console

为了使用CSS变量,我可以修改代码如下:

.theme--dark .AppNavTile:hover 
  --hover-bg-color: red;
  background-color: var(--hover-bg-color);

它工作正常,当悬停元素时我有一个红色背景。

然后我尝试将两者结合起来:

.theme--dark .AppNavTile:hover 
  --hover-bg-color: map-getter($theme-dark, AppNav, hover);
  background-color: var(--hover-bg-color);

根据浏览器的控制台,这将返回以下内容:

.theme--dark .AppNavTile:hover 
    --hover-bg-color: map-getter($theme-dark, AppNav, hover);
    background-color: var(--hover-bg-color);

所以看起来 SCSS 代码在 CSS 变量中仍未编译。有什么办法解决吗?

谢谢!

【问题讨论】:

【参考方案1】:

CSS 变量的“问题”是它们可以有任何值——为什么 map-getter($theme-dark, AppNav, hover) 会按原样呈现。要指示 SCSS 这是实际的 SCSS 代码而不是随机字符串,您需要使用插值(例如,如果您在 calc 中使用 SCSS 变量):

--hover-bg-color: #map-getter($theme-dark, AppNav, hover);

【讨论】:

以上是关于CSS 变量和 SCSS 混合的主要内容,如果未能解决你的问题,请参考以下文章

less中的继承与混合

用于小型和大型(流体/响应)列的 Zurb Foundation 4 SCSS 混合

SCSS学习手册

SCSS语法

scss 用于变换和动画的基本SASS混合。

SCSS 简要教程(常用指令与方法)