Gatsby set background-image CSS-In-JS(情感)

Gatsby set background-image CSS-In-JS (Emotion)

没有 background-image 使用以下设置可见。作为调试步骤,我尝试在 const background 中设置 background: pink,这确实有效,确认 emotion 是 运行 正确。

打开 React Dev Tools extension 时,我可以看到 background-image: url(../images/page_backgroundgradient.png), url(../images/page_background.png); 应用没有错误。

请问我的问题是什么?

我的文件结构如下所示:

frontend/
  src/
    images/
      page_background.png
      page_backgroundgradient.png
    pages/
      index.js

我的index.js我正在尝试添加背景图片。

...
import { css, Global } from "@emotion/core"


const background = css`
  background-image: url(../images/page_backgroundgradient.png), url(../images/page_background.png);
`
<div css={background}>
   ...
</div>

正如您在评论中发布的 link 中所述,有多种方法可以将 image/assets 包含在 gatsby 中:

  1. 查询来自graphql
  2. 的图片
  3. import图片,获取路径
  4. 复制图片到static目录

设置

假设您有这样一个组件:

// src/pages/sample.js

import React from 'react'
import { css } from '@emotion/core'

export default () => <div css={css`
  width: 10rem;
  height: 10rem;
  background: url( ... );
`} />

查询一下

公共网址

如果您正在使用任何默认启动器,您的 src/images 文件夹可能已设置为 gatsby-source-file-system,因此 Gatsby 知道您的图像。假设你知道文件名,你可以这样查询:

{
//       ⇣ `base` is file name with extension.
  file (base: { eq: "image.png" }) {
    publicURL
  }
}

如link中所述,查询字段publicURL将为您提供文件名的路径:

export default ({ data }) => <div css={css`
  width: 10rem;
  height: 10rem;
  background: url(${data.file ? data.file.publicURL : 'your/fallback.png'});
`} />

export const query = graphql`
  query {
    file(base: { eq: "image.png" }) {
      publicURL
    }
  }
`

ImageSharp

Gatsby 通常带有 sharp,它允许您转换图像等。举个简单的例子,此查询将图像调整为 200 像素宽度:

export const query = graphql`
  query {
    file(base: { eq: "image.png" }) {
      childImageSharp {
        fixed(width: 200) {
          src
        }
      }
    }
  }
`

您可以在 data.file.childImageSharp.fixed.src 访问它。

导入图片

让 webpack 处理:

import myImagePath from '../relative/path/to/image.png';

export default () => <div css={css`
  width: 10rem;
  height: 10rem;
  background: url(${myImagePath});
`} />

复制到static目录

在您的根文件夹中创建一个名为 static 的目录,除非已经有一个目录。将您的图像复制到其中:

root
  |--src
  `--static
       `--image.png

静态中的所有文件将直接复制到构建中,因此您可以像这样link到图像:

export default () => <div css={css`
  width: 10rem;
  height: 10rem;
  background: url(/image.png);
`} />

如果您在 gatsby-config.js 中使用 pathPrefix,请从 gatsby 导入 withPrefix 并将其环绕图像路径。


这是前两种方法的 codesandbox

希望对您有所帮助!