sass - 带有 Sass 和 Gatsby 的 CSS 模块
问题描述
Sass 如何在 Gatsby 的条件类中与 CSS 模块一起使用?
我尝试了以下方法:
menu.js
import menuStyles from './menu.module.scss';
import classNames from 'classnames';
const Menu = ({ open }) => {
return (
<nav className={classNames(menuStyles.menu, { isOpen: open })}>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</nav>
);
};
menu.module.scss
:
.menu {
background: green;
&.isOpen {
background: blue;
}
}
一个onClick
事件更新了open
道具,我可以看到isOpen
按预期添加和删除的类。问题是 CSS 没有应用到它:背景仍然是绿色的。查看 Chrome 网络选项卡,我可以看到样式应用于类menu-module--isOpen--DyE73
,而不仅仅是isOpen
:
.menu-module--menu--2cKbx {
background: green;
}
.menu-module--menu--2cKbx.menu-module--isOpen--DyE73 {
background: blue;
}
当不使用 CSS 模块 (import './menu.scss';
和<nav className={classNames('menu', { isOpen: open })}>
) 时,样式在这两种情况下都会正确应用。
Sass 如何与 CSS 模块一起使用来设置条件isOpen
类的样式?
解决方案
以下将起作用:
<nav className={classNames(menuStyles.menu, { [menuStyles.isOpen]: open })}>
不同之处在于我替换isOpen
为[menuStyles.isOpen]
(代表计算属性名称的方括号)。
就像 一样menu
,CSS 规则isOpen
也有一个动态的、本地范围的名称,因此您需要确保将其名称从 CSS 模块导入到。
推荐阅读
- assembly - 如何管理 JMP CALL POP 例程中的结构?
- javascript - 如何在时钟应用程序中用当前时间自动替换过去的秒/分钟/小时
- python - 从一个大字符串中提取参数值
- javascript - 如何将给定表的整数列显示为从 1 开始到前端用户的自动递增系列?
- python - 从基于类的视图中访问请求对象?需要确定请求是否来自移动设备
- sql-server - SQL Server - sp_rename 后的列无效
- python - 饼图根据字典键大小而变化
- php - PHP:parse_ini_file 在本地工作,但不在服务器上
- python - 基于不同的列值创建带有标签的新列
- vue.js - validate iso date but display locale date when using a date picker component