在 GatsbyJS 中使用 styled-components 设置自定义组件的样式
Posted
技术标签:
【中文标题】在 GatsbyJS 中使用 styled-components 设置自定义组件的样式【英文标题】:Styling custom component in GatsbyJS using styled-components 【发布时间】:2020-07-10 16:13:10 【问题描述】:我最近开始使用 Gatsby 来构建我的网站,之前我只依赖纯 html 和 css,所以我可能在这里遗漏了一些非常基本的东西...
我正在尝试为一个看起来像这样的自定义标题组件设置样式
import React from "react"
import MWidth from "./m-width"
import logo from "../resources/images/logo.png"
function Header()
return (
<>
<MWidth>
<div>
<img src=`$logo`></img>
</div>
</MWidth>
</>
)
export default Header
在布局组件中导入它后,我尝试使用 styled-components 设置样式
const PageHeader = styled(Header)`
background-color: #f0f;
`
但没有任何改变。
我看到这种方法与 Link 组件一起使用,但也许它是以另一种方式定义的。我错过了什么还是只是 Gatsby 错误?
我的 Layout.js 文件如下所示
import React from "react"
import styled from "styled-components"
import Header from "./header"
import Content from "./content"
import Footer from "./footer"
import "./common.css"
const PageHeader = styled(Header)`
background-color: #f0f;
`
function Layout(props)
return (
<>
<PageHeader />
<Content>props.children</Content>
<Footer />
</>
)
export default Layout
如果您需要更多信息,请告诉我。任何帮助将不胜感激。
谢谢????
编辑:
事实证明,为了使其工作,您必须将类名附加到您想要设置样式的元素上,并将其作为道具传递。所以正如 ksav 建议的那样,我添加了 @987654324 @ 进入 Header 函数声明,className=props.className
进入包装 div。现在看起来像这样
function Header(props)
return (
<div className=props.className>
<MWidth>
<div>
<img src=`$logo`></img>
</div>
</MWidth>
</div>
)
这基本上与他在下面发布的内容相同。这样就解决了问题。
谢谢你????
【问题讨论】:
你想要背景颜色在哪里? 作为标题组件的背景,但我不想在组件内部设置颜色,因为它会随着每个页面而改变。 【参考方案1】:Styling any component
styled
方法可以完美地在您自己或任何第三方组件上运行,只要它们将传递的className
属性附加到 DOM 元素。
function Header(className)
return (
<div className=className>
<MWidth>
<div>
<img src=`$logo`></img>
</div>
</MWidth>
</div>
)
【讨论】:
非常感谢!我不知道我是怎么错过那个页面的,但我很高兴你帮我找到了它。以上是关于在 GatsbyJS 中使用 styled-components 设置自定义组件的样式的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 GatsbyJS 从 Contentful 加载图像
如何在导航上显示提示(GatsbyJS/ReachRouter)
GatsbyJS :访问保存在降价文件(GraphQL)中的博客文章的不同部分
在 GatsbyJS 中使用 styled-components 设置自定义组件的样式