使用React内联样式设置backgroundImage


286

我正在尝试访问静态图像以backgroundImage在React 的内联属性中使用。不幸的是,我已经干了如何做到这一点。

通常,我认为您只是这样做如下:

import Background from '../images/background_image.png';

var sectionStyle = {
  width: "100%",
  height: "400px",
  backgroundImage: "url(" + { Background } + ")"
};

class Section extends Component {
  render() {
    return (
      <section style={ sectionStyle }>
      </section>
    );
  }
}

这适用于<img>标签。有人可以解释两者之间的区别吗?

例:

<img src={ Background } /> 效果很好。

谢谢!

Answers:


471

backgroundImage属性内的花括号错误。

可能您正在将webpack与图像文件加载器一起使用,因此Background应该已经是一个String了: backgroundImage: "url(" + Background + ")"

您还可以使用以下ES6字符串模板来达到相同的效果:

backgroundImage: `url(${Background})`

我应该将其添加到我的问题中。我确实设置了宽度和高度(分别为100%/ 400px)。出现的问题是由于我相信React如何处理静态图片。
克里斯(Kris)

根据w3.org/TR/CSS2/syndata.html#value-def-uri进行连接之前,应该在转义之前在Background变量中转义'(“,')'和空格字符吗?
qbolec

49
完整语法应如下所示:style={{backgroundImage: "url(" + Background + ")"}}
mike

2
只是为了扩展@mike的注释,您需要双花括号,因为一个用于React进入的是JS模式,另一个用于表示新对象。
CiprianTomoiagă18年

从'./background.jpg'提供导入背景后,出现错误'Section'已定义但从未使用过';var sectionStyle = {宽度:“ 100%”,高度:“ 400px”,backgroundImage:url(${Background})};类Section扩展了Component {render(){return(<section style = {sectionStyle}> </ section>); }
帕瓦南女士(美国),

40

如果您使用的是ES5-

backgroundImage: "url(" + Background + ")"

如果您使用的是ES6-

backgroundImage: `url(${Background})`

从本质上讲,在为backgroundImage属性添加值的同时删除不必要的花括号将起作用。


2
对我来说,在ES6中是backgroundImage: `url("${Background}")`,因为您的ES6示例对我不起作用。
秒。

37

内联样式可将任何图像设置为全屏显示:

style={{  
  backgroundImage: "url(" + "https://images.pexels.com/photos/34153/pexels-photo.jpg?auto=compress&cs=tinysrgb&h=350" + ")",
  backgroundPosition: 'center',
  backgroundSize: 'cover',
  backgroundRepeat: 'no-repeat'
}}

17

您还可以通过使用该require()功能将图像导入组件。

<div style={{ backgroundImage: `url(require("images/img.svg"))` }}>

请注意两组大括号。第一组用于进入反应模式,第二组用于表示对象


如果图像路径是Web URL而不是本地路径怎么办?像https://images.com/myimage.png
Aminu Kano,

3
好的,我了解使用基于Web的URL时。我只写url(https://images.com/myimage.png)
阿米努卡诺


3

尝试这个:

style={{ backgroundImage: `url(require("path/image.ext"))` }}

2

对我来说,工作是这样的

style={{ backgroundImage: `url(${require("./resources/img/banners/3.jpg")})` }}

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.