1

下面的设置看不到background-image。作为调试步骤,我尝试background: pink在内部进行设置const background,这确实有效,确认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>
4

1 回答 1

13

因此,正如您在评论中发布的链接中所述,有多种方法可以将图像/资产包含在 gatsby 中:

  1. 查询图片来自graphql
  2. import图片,获取路径
  3. 将图像复制到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
  }
}

如链接中所述,查询该字段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
    }
  }
`

图像锐化

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

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

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

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

如果您使用pathPrefixin gatsby-config.js,请导入withPrefixfromgatsby并将其包裹在图像路径周围。


这是前两种方法的代码框。

希望有帮助!

于 2019-03-03T14:22:17.617 回答