标签: css-modules

如何使用 Typescript、React 和 Webpack 导入 SCSS 或 CSS 模块

我想在我的项目中使用.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)

javascript css typescript webpack css-modules

5
推荐指数
1
解决办法
1万
查看次数

在每个样式表配置中自动导入 sass 部分

最近我开始使用 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)

css sass webpack css-modules next.js

5
推荐指数
1
解决办法
2517
查看次数

CSS 模块与普通 CSS 在 React 中更改页面背景

编辑:接受的答案帮助我解决了问题。这是正确的,所以我接受了。但我正在导入包含标签的模块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'));

javascript css reactjs css-modules

5
推荐指数
1
解决办法
2810
查看次数

是否可以将 MaterialUI 与 React 和 css 模块一起使用并访问 css 模块文件中的主题?

我正在将 Material UI 与 React 应用程序一起使用。对于通用样式,我只是简单地使用全局主题覆盖。但根据上下文有一些特定的规则,为此我想使用 css 模块。是否可以访问 css 模块内的主题?

我在 Material UI 文档中没有找到任何有关此内容的信息。也尝试用 google 搜索它,但是太多人在尝试使用 CSS 模块覆盖 MaterialUI 规则时遇到特殊性问题。

reactjs material-ui css-modules

5
推荐指数
1
解决办法
2280
查看次数

React 中的 CSS 模块 - 共享可重用代码的解决方案

我正在将我的项目中的全局 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)

javascript css sass reactjs css-modules

5
推荐指数
0
解决办法
2078
查看次数

将 CSS 模块与 Bootstrap 相结合

在 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)

CSS

.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 …

html css twitter-bootstrap reactjs css-modules

5
推荐指数
1
解决办法
4995
查看次数

使用CSS模块设置react-select样式可以在Sandbox上工作,但不能在本地计算机上工作

文档的“使用 ClassNames”部分指出react-select使用classNameclassNamePrefix属性

确保与样式组件、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)

css sass typescript reactjs css-modules

5
推荐指数
1
解决办法
3819
查看次数

使用任意类名时,媒体查询无法与 css 模块正常工作

我正在做一个反应课程项目,我正在按照教程所说的方式做所有事情,并且媒体查询在某些情况下不起作用。

这是我的 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和其他形式的样式工作得很好,唯一的问题是当我对任意类名使用媒体查询时。

有谁知道如何解决这个问题以及为什么这不起作用?

css media-queries reactjs css-modules

5
推荐指数
1
解决办法
1839
查看次数

如何使用 NextJS 通过 SCSS/CSS 模块在外部定义动态变量

我希望内容编辑器通过 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 变量。

sass reactjs css-modules next.js

5
推荐指数
0
解决办法
911
查看次数

如何将 CSS 模块的类型声明编写为 ES 模块

我正在将 Gatsby 从 v2 升级到 v3,并且在此更新中CSS模块将作为 ES Modules 导入

\n
\n

网络在进步,我们也在进步。ES 模块使我们能够更好地进行 tree shake 并生成更小的文件。从现在开始,您\xe2\x80\x99将需要导入CSS模块:import { box } from \'./mystyles.module.css\'

\n
\n

旧方法将不再编译。

\n

更改导入后,它可以正确编译并且看起来符合预期。唯一的问题是,由于找不到导出,我收到类型错误。

\n

我的假设是,类型声明是错误的,但我不确定如何在不将每个可能的 CSS 类命名为导出的情况下动态键入它。

\n

我也尝试过import * as styles,首先不鼓励这样做(因为它可以防止树摇动),但也会导致类型错误。

\n

Foo.module.css:

\n
.foo { color: red; }\n.bar { color: blue; } \n
Run Code Online (Sandbox Code Playgroud)\n

Foo.tsx:

\n
import { foo, bar } from "./Foo.module.css"\n// Module "*.module.css" has no exported member \'foo\'\n// Module "*.module.css" has no exported member \'bar\'\n
Run Code Online (Sandbox Code Playgroud)\n

CSS.d.ts: …

css typescript css-modules gatsby es6-modules

5
推荐指数
1
解决办法
3200
查看次数