盖茨比:使用CSS设置背景图片

Aar*_*min 7 css background-image reactjs gatsby

通过查看Gatsby文档,他们建议您可以像在其他任何地方一样引用背景图像:

.image {
  background-image: url(./image.png);
}
Run Code Online (Sandbox Code Playgroud)

他们没有涵盖的是这些图像应该存放的位置。我尝试将图像目录放置在src文件夹,布局文件夹和根文件夹中,但是我不断收到错误消息:

Loader /Users/username/Sites/my-app/node_modules/url/url.js?{"limit":10000,"name":"static/[name].[hash:8].[ext]"} didn't return a function
 @ ./~/css-loader!./~/postcss-loader!./src/layouts/index.css 6:400-435
Run Code Online (Sandbox Code Playgroud)

使用Gatsby引用背景图像的正确方法是什么?

当前目录结构:

my-app
- src
-- images 
--- image.png
-- layouts
--- index.css
Run Code Online (Sandbox Code Playgroud)

cor*_*ard 14

通常,我将特定于组件的图像以及它们的JSX和CSS文件以及常规/全局图像保存在一个images文件夹中,因此我可能具有以下结构:

.
??? components
?   ??? button.jsx
?   ??? button.module.scss
?   ??? button_icon.png
??? images
    ??? logo.png
Run Code Online (Sandbox Code Playgroud)

要引用button_icon.png来自button.module.css我这样做:

background-image: url("./button_icon.png");
Run Code Online (Sandbox Code Playgroud)

logo.pngbutton.module.css我的参考可以做到这一点:

background-image: url("../images/logo.png");
Run Code Online (Sandbox Code Playgroud)

更新:最近我在我的Gatsby项目中一直使用Emotion,这需要稍微不同的方法。这也适用于StyledComponents或Glamour:

import background from "images/background.png"
import { css } from "@emotion/core"

// Object styles:
<div css={{ backgroundImage: `url(${background})` }} />

// Tagged template literal styles:
const backgroundStyles = css`
  background-image: url(${background});
`
<div css={backgroundStyles} />

Run Code Online (Sandbox Code Playgroud)


xxc*_*exx 8

您将需要一个静态文件夹,其中包含项目中 src 文件夹之外的图像。

基本上会

my-app 
- src
-- components
--- styles.scss
- static
-- images
--- image.png
Run Code Online (Sandbox Code Playgroud)

要访问styles.css 或scss 中的图像,您可以这样做

background: url('/images/image.png');
Run Code Online (Sandbox Code Playgroud)

或者您可以通过从 gatsby 导入 withPrefix 来访问您的 jsx/js 文件之一中的图像

import { withPrefix } from 'gatsby';
<div style={{ backgroundImage: `url(${withPrefix('/images/image.png')})` }} />
Run Code Online (Sandbox Code Playgroud)