如何覆盖module css 文件中的 global.css?

IT技术 javascript reactjs next.js
2021-05-06 12:21:16

假设在我的 Next.js 项目的 global.css 文件中,我有:

  .flex {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100%;
  }

我还有一个 Layout.js 组件和一个 Layout.module.css 文件。该组件如下所示:

import styles from "../styles/Layout.module.css";
const Layout = ({ children }) => {
  return (
    <div>
      <div className={styles.navbar}>
        <div className="flex">
        <h1>Structured Safety</h1>
        <nav>
            <ul>
                <li> <a href="#">Home</a> </li>
                <li> <a href="#">Demo</a> </li>
            </ul>
        </nav>
        </div>
      </div>
    </div>
  );
};

export default Layout;

和 Layout.module.css 是:

/* Navbar */
.navbar {
  background-color: var(--primary-color);
  color: #fff;
  height: 70px;
}

.navbar ul {
  display: flex;
}

.navbar .flex {
  justify-content: space-between;
}

这样的结构,我的 .navbar .flex 不会覆盖全局 .flex 类并将 h1 与导航分开。如何从这个组件样式覆盖我的全局样式?

2个回答

由于.flex引用了全局类,因此您需要使用:global选择器将其定位到 CSS module中。

/* Layout.module.css */

.navbar :global(.flex) {
    justify-content: space-between;
}

在NextJS和react过来的时候,你 import styles from "__.css"styles,所以你必须使用它在你的HTML为使其生效成为一个变量。

目前您没有使用 Layout.module.css 中的任何样式,如果您想使用该 css,您可以将 html 更改为:<div className={styles.navbar}>等等。