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 中:
- 查询来自
graphql
的图片
import
图片,获取路径
- 复制图片到
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。
希望对您有所帮助!
没有 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 中:
- 查询来自
graphql
的图片
import
图片,获取路径- 复制图片到
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。
希望对您有所帮助!