css - 为什么我的全局样式模块被多次导入?
问题描述
我试图在我的 Gatsby 应用程序中设置一些全局 Scss,但看起来这样做之后我在开发工具中看到了一些奇怪的行为:
您可以看到我的全局样式多次出现并被覆盖。
这是一个 Gatsby 应用程序,所以我使用sass-loader
的是默认应用程序dart-sass
。
以下是我如何配置我的gatsby-config.js
文件以允许我根据此 stackoverflow 帖子使用这些全局样式:https ://stackoverflow.com/a/65904094/12119984
module.exports = {
plugins: [
...
{
resolve: `gatsby-plugin-sass`,
options: {
additionalData: `@use 'main' as *;`,
//allow mixins, variables etc to be accessible globally
sassOptions: {
includePaths: [`${__dirname}/src/styles/sass`],
// data: `@import "main.scss";`,
},
},
}...
我使用@forward
以及@extend
让它在我的 module.scss 文件中工作。我的文件夹结构如下所示:
我的全局样式在base.scss
,我将它们导入main.scss
using @forward
:
@forward "base";
@forward "layout";
@forward "components";
例如,这是我的index.module.scss
文件,然后我在其中使用这些全局样式:
.sectionHome {
...
h1 {
background-color: $color-secondary;
@extend .uMarginBottomLarge;
@extend .headingPrimary;
}
}
对我来说,使用一些全局样式似乎是一种合理的方法,但将它们扩展到本地 sccs 模块类中,那么任何人都可以解释为什么这些全局样式被多次应用吗?
解决方案
根据文档@forward
,规则:
该
@forward
规则加载一个 Sass 样式表,并在您的样式表与该规则一起加载时使其混合、函数和变量可用@use
。它使跨多个文件组织 Sass 库成为可能,同时允许其用户加载单个入口点文件。
所以基本上,每次你在某个组件中请求一个 CSS 模块时,你都在导入所有嵌套的扩展(@extend
和@use
)。此外,由于 React 的组件扩展,您还可以在导入嵌套组件时嵌套样式(Button
in Layout
,Layout
in aindex.js
等)
CSS 中的全局样式与 CSS“标准”文件的应用方式完全相同,正如您在Gatsby 的文档中看到的那样,扩展其文档时,您需要在您的 中添加以下内容gatsby-browser.js
:
import "./src/styles/sass/main.scss"
推荐阅读
- github - 不使用移动设备的 VPN 或热点无法访问 GitHub
- rust - 为拥有的奶牛重用向量堆空间而不转换?
- system - 从命令行状态(200)ok和浏览器状态(404)未找到,浏览器无法找到数据的原因是什么?
- visual-studio-code - 文本的字体连字
- apache-kafka - 卡夫卡消费者表现出滞后
- javascript - 奇怪的解构赋值,给出未定义
- angular - 如何从 Firebase 检索对象的 id 并存储每个对象?
- simple-peer - peer.on('stream', stream => {}) 没有被提出
- flutter - Flutter 正确构建 TabBarView 子项
- docker - 我在哪里可以找到 docker 上的 portainer.io 日志?