我想在我的项目中使用.scss(bulid与react和typescript),所以我使用typings-for-css-modules-loaderand 。css-loadersass-loader
当我时npm run dev,我收到此错误:
./src/Common.scss
Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js):
ModuleBuildError: Module build failed (from ./node_modules/sass-loader/lib/loader.js):
.common {
^
Invalid CSS after "e": expected 1 selector or at-rule, was "exports = module.ex"
Run Code Online (Sandbox Code Playgroud)
我.scss喜欢这样:
.common {
height: 100px
}
Run Code Online (Sandbox Code Playgroud)
我的 wepack.config 是:
module.exports = {
mode: 'development',
entry: [
'webpack-dev-server/client',
path.resolve(root, 'src/index.tsx')
],
devtool: 'inline-source-map',
devServer: {
contentBase: './dist',
publicPath: '/',
port: 8080,
historyApiFallback: true
},
resolve: {
extensions: [".ts", …Run Code Online (Sandbox Code Playgroud) 最近我开始使用 CSS 模块来使用 NextJS。为了消除重复,我想在每个样式表中自动导入带有混合、变量等的部分。
使用 GatsbyJS,我发现如何在项目的每个样式表中自动导入一些特定的 SASS 部分。设置看起来像这样:
{
resolve: `gatsby-plugin-sass`,
options: {
data: '@import "_reset.scss", "_typography.scss", "_mixins.scss", "_extends.scss", "_themes.scss";',
includePaths: [
'src/styles/partials',
],
},
},
Run Code Online (Sandbox Code Playgroud)
现在我的 next.settings.js 看起来像这样:
const path = require("path");
const withSass = require("@zeit/next-sass");
const partials = [
"_reset.scss",
"_variables.scss",
"_themes.scss",
"_typography.scss",
"_mixins.scss",
"_extends.scss",
];
module.exports = withSass({
cssModules: true,
webpack: config => {
config.resolve.alias["components"] = path.join(__dirname, "components");
return config;
},
});
Run Code Online (Sandbox Code Playgroud)
如果可能的话,如何在每个样式表中自动包含部分内容?
问题解决,感谢@eric-tan的回复:
所有部分都导入到一个“_utilty.scss”部分中,该部分包含在 sassLoaderOptions 中: -> data:导入部分本身;-> includePaths:导入的部分所在的位置。
const path = require("path");
const withSass = …Run Code Online (Sandbox Code Playgroud) 编辑:接受的答案帮助我解决了问题。这是正确的,所以我接受了。但我正在导入包含标签的模块body,但没有使用它。
import styles from "./App.module.css"; //Includes a body tag
styles代码中没有使用任何地方,所以我认为 WebPack 没有包含它。如果我对该模块做了任何事情,则包含 body 标签并且它可以工作。<div className={styles.anything}>允许body包含 CSS。
正如回答者在评论中所说,这可能是由于 Typescript 造成的。
我曾经create-react-app制作过一个应用程序。我在我的组件中使用 CSS 模块。我试图弄清楚如何使用 CSS 模块使页面的整体背景具有不同的颜色。
我想应用background-color: #121212;到整个背景。
我正在尝试找出如何应用该样式,现在看来需要将其应用于标签body。
应用于的任何样式App.tsx仅影响该组件占用的容器(背景仅在组件底部着色App,其下方为白色)
现在index.css包含
body {
...
background-color: #121212;
}
Run Code Online (Sandbox Code Playgroud)
这很好用。我想使用模块,但我不知道如何导入该样式来工作。
index.tsx我将在哪里导入使用 Webpack创建的文件的样式create-react-app。
ReactDOM.render(<App />, document.getElementById('root'));
我正在将 Material UI 与 React 应用程序一起使用。对于通用样式,我只是简单地使用全局主题覆盖。但根据上下文有一些特定的规则,为此我想使用 css 模块。是否可以访问 css 模块内的主题?
我在 Material UI 文档中没有找到任何有关此内容的信息。也尝试用 google 搜索它,但是太多人在尝试使用 CSS 模块覆盖 MaterialUI 规则时遇到特殊性问题。
我正在将我的项目中的全局 SASS 迁移到 SCSS 模块中,该项目混合了全局 scss 和某种自定义的类似引导程序的框架。
我在应用程序中到处都有需要重构的全局样式引用
我的目标是跨 CSS 模块共享样式以重用主题、按钮等。 不幸的是,CSS 模块的“组合”功能无法编译 SASS。
这似乎是一个已知问题:
https://github.com/facebook/create-react-app/issues/7596
跨 CSS 模块快速引用共享 .scss 类的最佳策略是什么?
我有 main.scss,我在其中加载全局应用程序中使用的文件:
:global {
@import './button';
}
Run Code Online (Sandbox Code Playgroud)
在 sass/_button.scss 中:
.btn {
font-family: $baseFont;
font-size: $text--m;
font-weight: normal;
text-align: center;
outline: none;
white-space: nowrap;
padding: $padding--xs $padding--m;
color: var(--white);
background-color: var(--dark-blue);
border: 1px solid var(--sky-blue-dark);
border-radius: 4px;
transition: all 100ms, color 100ms;
box-shadow: 2px 3px 6px 0 var(--black-half);
cursor: pointer;
Run Code Online (Sandbox Code Playgroud)
在我的 Header.jsx 组件中
<div className={styles.popContainer}>
<button …Run Code Online (Sandbox Code Playgroud) 在 React 组件中将(自定义)CSS 模块与 Bootstrap结合的最佳方式是什么?我使用 Bootstrap CDN 来获取样式并在组件内使用它们。如何使用连接到组件的CSS 模块(例如)应用自定义样式?换句话说,如何覆盖 Bootstrap 的默认样式?假设以下是我的代码:.nav-link
import React from "react";
import styles from "./Navbar.module.css";
function Navbar() {
return (
<nav className="navbar navbar-expand-lg">
<div className="collapse navbar-collapse" id="navbarNav">
<ul className="navbar-nav ml-auto">
<li className="nav-item">
<a className="nav-link" href="#">Home</a>
</li>
<li className="nav-item">
<a className="nav-link" href="#">About</a>
</li>
</ul>
</div>
</nav>
);
}
export default Navbar;
Run Code Online (Sandbox Code Playgroud)
.Navbar {
background-color: green;
}
Run Code Online (Sandbox Code Playgroud)
知道 css 模块的导入允许我用作styles.Navbar类名,我想出这个是为了使导航栏的背景颜色为绿色。
<nav className={`navbar navbar-expand-lg ${styles.Navbar}`}>
Run Code Online (Sandbox Code Playgroud)
但是,我无法捕获 CSS …
文档的“使用 ClassNames”部分指出react-select使用className和classNamePrefix属性
确保与样式组件、CSS 模块和其他库的兼容性。
在这个 CodeSandbox中,使用 CSS 模块 和node-sass,它似乎可以工作。但是,如果我在本地计算机上的 create-react-app 中复制以下代码,它将不起作用。我的 CRA 使用 Typescript 模板。这是问题所在吗?其他一切都一样。
Select.module.scss
.select {
outline: 1px solid red;
.select__control {
background-color: salmon;
}
}
Run Code Online (Sandbox Code Playgroud)
Select.tsx
import React from 'react';
import RS from 'react-select';
import style from './Select.module.scss';
const options = [
{label: "hi", value: "hi"}
]
function Select(props: any) {
return (
<RS
options={options}
className={style.select}
classNamePrefix={style.select}
/>
)
}
export default Select; …Run Code Online (Sandbox Code Playgroud) 我正在做一个反应课程项目,我正在按照教程所说的方式做所有事情,并且媒体查询在某些情况下不起作用。
这是我的 js 文件的简短版本(其中 NavigationItems 是我的自定义元素)
import styles from './Toolbar.module.css';
const toolbar = props => (
<header className={styles.Toolbar}>
<NavigationItems className={styles.Foo} />
<p>some text</p>
</header>
);
Run Code Online (Sandbox Code Playgroud)
我希望在使用移动设备时不显示我的 NavigationItems,因此包含我的样式的 css 文件包含此媒体查询:
@media (max-width: 499px){
.Foo {
display: none;
}
}
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是它不起作用并且不应用 Foo 类。但是,如果我将媒体查询更改为:
@media (max-width: 499px){
.Toolbar{
display: none;
}
}
Run Code Online (Sandbox Code Playgroud)
它确实有效,当宽度小于 500px 时,工具栏会消失。但我不想要这个;我希望工具栏在那里,而导航项消失。
另一位认为确实有效的是当我将媒体查询更改为:
@media (max-width: 499px){
.Toolbar p{
display: none;
}
}
Run Code Online (Sandbox Code Playgroud)
并且js文件中包含“一些文本”的段落在应该消失的时候消失了。但同样的事情仍然不适用于 NavigationItems(我猜测是因为它不是默认的 HTML 标签)。
当我使用CSS模块时,我使用react-scripts@3.4.3和其他形式的样式工作得很好,唯一的问题是当我对任意类名使用媒体查询时。
有谁知道如何解决这个问题以及为什么这不起作用?
我希望内容编辑器通过 Headless CMS 定义网站的主要颜色,使用 NextJS 和更好的 sass 模块。这是一个示例,目的是让您了解我想要实现的目标
// style.module.scss
import fromHeadless './api/MyHeadlessCMS'
$color_primary: ${fromHeadless.primaryColor}
$color_secondary: ${fromHeadless.secondaryColor}
$color_text_body: #000;
.title{
color:$color_primary
}
.paragraph{
color:$color_text_body
}
Run Code Online (Sandbox Code Playgroud)
看${fromHeadless.primaryColor}
// Mycomponent
import style from 'style.module.scss'
const MyComponent = () => {
return(
<div>
<h1 className={style.title}>Hey hey</h1>
<p className={style.paragraph}>Something good</p>
</div>
)
}
export default MyComponent
Run Code Online (Sandbox Code Playgroud)
所以我知道不可能将 js 导入到 scss 文件中,但我只是尝试找到一个解决方案,其结果是使用在 sass 文件外部定义的动态 scss/css 变量。
我正在将 Gatsby 从 v2 升级到 v3,并且在此更新中CSS模块将作为 ES Modules 导入。
\n\n网络在进步,我们也在进步。ES 模块使我们能够更好地进行 tree shake 并生成更小的文件。从现在开始,您\xe2\x80\x99将需要导入CSS模块:
\nimport { box } from \'./mystyles.module.css\'
旧方法将不再编译。
\n更改导入后,它可以正确编译并且看起来符合预期。唯一的问题是,由于找不到导出,我收到类型错误。
\n我的假设是,类型声明是错误的,但我不确定如何在不将每个可能的 CSS 类命名为导出的情况下动态键入它。
\n我也尝试过import * as styles,首先不鼓励这样做(因为它可以防止树摇动),但也会导致类型错误。
Foo.module.css:
\n.foo { color: red; }\n.bar { color: blue; } \nRun Code Online (Sandbox Code Playgroud)\nFoo.tsx:
\nimport { foo, bar } from "./Foo.module.css"\n// Module "*.module.css" has no exported member \'foo\'\n// Module "*.module.css" has no exported member \'bar\'\nRun Code Online (Sandbox Code Playgroud)\nCSS.d.ts: …
css-modules ×10
css ×8
reactjs ×7
sass ×4
javascript ×3
typescript ×3
next.js ×2
webpack ×2
es6-modules ×1
gatsby ×1
html ×1
material-ui ×1