反应组件中的背景图像

Posted

技术标签:

【中文标题】反应组件中的背景图像【英文标题】:background-image in react component 【发布时间】:2018-04-19 02:18:10 【问题描述】:

我正在构建一个页面,并且我希望 material-ui 元素具有使用 background-image CSS 属性的背景图像。当然,我已经在 Google 上搜索过了,并且有一些解决方案,但由于某种原因,我看不到该图像。

P.S.1:即使将 MUI 元素更改为常规元素也对我没有任何帮助。

P.S.2:当我在容器内使用时它会显示,但这不是我想要的。

UPDATE1:尝试为容器添加高度和宽度,但仍然没有成功...

import React from 'react';

import Paper from 'material-ui/Paper';

import IconButton from 'material-ui/IconButton';
import ActionHome from 'material-ui/svg-icons/action/home';


const styles = 
    paperContainer: 
        backgroundImage: `url($"static/src/img/main.jpg")`
    
;

export default class Home extends React.Component
    render()
        return(
            <Paper style=styles.paperContainer>

            </Paper>
        )
    

【问题讨论】:

【参考方案1】:

您必须使用相对路径按以下方式导入图像。

import React from 'react';

import Paper from 'material-ui/Paper';

import IconButton from 'material-ui/IconButton';
import ActionHome from 'material-ui/svg-icons/action/home';

import Image from '../img/main.jpg'; // Import using relative path


const styles = 
    paperContainer: 
        backgroundImage: `url($Image)`
    
;

export default class Home extends React.Component
    render()
        return(
            <Paper style=styles.paperContainer>
                Some text to fill the Paper Component
            </Paper>
        )
    

【讨论】:

不幸的是没有帮助:( 为了能够导入和使用这样的图像你需要使用github.com/webpack-contrib/file-loader@Roman 你在用吗? @EugeneTsakh 是的,我确实遇到了这种依赖关系。捆绑没有错误。 ("文件加载器": "^0.11.2") 嗯,这很奇怪,它适用于我的简单 create-react-app... 您是否尝试在简单的&lt;img src=Image /&gt; 中使用图像来查看导入是否有效?哦,我可能已经找到了!您是否在&lt;Paper&gt; 中添加了一些文字只是为了检查我的解决方案是否有效?我刚刚更新了我的答案 我已经发布了这个问题的答案,但是,我也刚刚尝试了你的解决方案。对我不起作用:(【参考方案2】:

我找到了适合我的情况的解决方法。实际上以像素为单位设置容器高度有帮助。

代码如下:

import React from 'react';


const styles = 
    paperContainer: 
        height: 1356,
        backgroundImage: `url($"static/src/img/main.jpg")`
    
;

export default class Home extends React.Component 
    render() 
        return (
            <div style=styles.paperContainer>
            </div>
        )
    

【讨论】:

【参考方案3】:

就像 Romainwn 所说,您需要将图像导入文件。确保使用父级的相对路径,而不是

static/src/img/main.jpg    #looks for static folder from current file location

/static/src/img/main.jpg #looks for file from host directory:

另一个技巧是在组件中添加一个内联样式标签:

import React from 'react';

import Paper from 'material-ui/Paper';

import IconButton from 'material-ui/IconButton';
import ActionHome from 'material-ui/svg-icons/action/home';

import Image from '../img/main.jpg'; // Import using relative path


export default class Home extends React.Component
    render()
        return(
            <Paper style="background:path/to/your/image;">

            </Paper>
        )
    

【讨论】:

【参考方案4】:

在使用 Material UI React 和 Create React App 时遇到了同样的问题。这是对我有用的解决方案。注意我为相对路径设置了 webpack 别名

import BackgroundHeader from "assets/img/BlueDiamondBg.png"

const BackgroundHead = 
  backgroundImage: 'url('+ BackgroundHeader+')'
  

<div style=BackgroundHead>

【讨论】:

【参考方案5】:

我让它为 material-ui 工作,我的父元素上的填充是 24px,所以我在背景图像的宽度上添加了 48px 以使其工作......

const styles = 
   heroContainer: 
     height: 800,
     backgroundImage: `url($"../static/DSC_1037.jpg")`,
     backgroundSize: 'cover',
     backgroundPosition: 'center',
     width: `calc(100vw + 48px)`,
     margin: -24,
     padding: 24,
   
  ;
<Grid
    container
    direction="column"
    justify="flex-end"
    alignItems="right"
    style=styles.heroContainer >
    <Grid item>Goes here</Grid>
</Grid>

【讨论】:

以上是关于反应组件中的背景图像的主要内容,如果未能解决你的问题,请参考以下文章

如何为 React Native 中的所有组件设置相同的背景图像?

如何从反应中的子组件内部更改父组件的背景颜色,盖茨比

反应内联背景图像

背景图像未与 s-s-rS 中的气泡图对齐

雪碧图布局

反应原生背景颜色覆盖在图像上