我正在处理两个组件:header.js
和footer.js
。
我还有两个css文件:header.module.css
和footer.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
中指定的属性。
根据文档,它是从'./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模块,我会建议删除内联样式,以避免混合样式并提高可读性。 这同样适用于包装在
组件。