提问者:小点点

CSS应用于所有文件,即使未导入


我正在处理两个组件:header.jsfooter.js

我还有两个css文件:header.module.cssfooter.module.css。 它们都对a标记使用不同的样式。

我在每个js文件中导入了相应的CSS文件,但是footer.module.CSS中的a样式似乎超过了header.js中的样式,尽管它没有导入。

下面是代码:

header.js

import React from "react"
import { Link } from "gatsby"
import "../styles/header.module.css";

const ListLink = props => (
  <li style={{display: `inline-block`, marginRight: `1rem`, fontSize: '1.15rem', fontWeight: 'bold'}}>
    <Link className="link" to={props.to}>{props.children}</Link>
  </li>
)

footer.js

import React from "react"
import "../styles/footer.module.css";

const FooterLink = props => (
  <li style={{ display: `inline-block`, marginRight: `1rem`, marginBottom:'0rem', fontSize: '1.05rem', fontWeight: 'bold'}}>
    <a href={props.to} target="_blank">{props.children}</a>
  </li>
)

header.module.css

a {
    color: var(--textLink);
    text-shadow: var(--textShadow);
    transition:.2s;
    background-image: var(--bgimage);
}

a:hover {
    color: #da1e11;
    background-image: none;
}

footer.module.css

a{
    color: var(--textLink);
    text-shadow: var(--textShadow);
    transition:.2s;
    background-image: none;
}

a:hover {
    color: #da1e11;
    background-image: none;
}

footer中的background-image属性超过了header中指定的属性。


共3个答案

匿名用户

根据文档,它是从'./something.module.css'导入一些东西,然后

匿名用户

CSS模块只对类名起作用,因此作用域对普通html标记不起作用。 要使其工作,您应该将className属性添加到链接中,并在css文件中使用该类名。 作为经验法则,只有当您希望css是全局的时,才应该在css中使用纯html标记。 在任何其他情况下,使用类和IDS。

匿名用户

如果您使用的是Gatsby默认的共享

组件,那么这两个组件都在每个页面中加载每个CSS,如下所示:

  return (
    <>
      <Header siteTitle={data.site.siteMetadata.title} />
      <div
        style={{
          margin: `0 auto`,
          maxWidth: 960,
          padding: `0 1.0875rem 1.45rem`,
        }}
      >
        <main>{children}</main>
        <footer>
          © {new Date().getFullYear()}, Built with
          {` `}
          <a href="https://www.gatsbyjs.org">Gatsby</a>
        </footer>
      </div>
    </>
  )
}

最简单的解决方案是将每个组件包装在一个类中,使CSS仅在该类中可用,如下所示:

从“React”导入React从“gatsby”导入{Link}导入“。。/styles/header.module.css”;

const ListLink = props => (
  <li className="list__item">
    <Link className="link" to={props.to}>{props.children}</Link>
  </li>
)

注意:例如,您甚至可以将包装在

中。

如果您正在使用CSS模块,我会建议删除内联样式,以避免混合样式并提高可读性。

这同样适用于

组件。