Définition d'une image d'arrière-plan avec React Inline Styles


290

J'essaie d'accéder à une image statique à utiliser dans une backgroundImagepropriété en ligne dans React. Malheureusement, je me suis épuisé sur la façon de procéder.

En général, je pensais que vous faisiez comme suit:

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>
    );
  }
}

Cela fonctionne pour les <img>balises. Quelqu'un peut-il expliquer la différence entre les deux?

Exemple:

<img src={ Background } /> fonctionne très bien.

Je vous remercie!

Réponses:


476

Les accolades à l'intérieur de la propriété backgroundImage sont incorrectes.

Vous utilisez probablement webpack avec le chargeur de fichiers image, donc Background devrait déjà être une chaîne: backgroundImage: "url(" + Background + ")"

Vous pouvez également utiliser des modèles de chaînes ES6 comme ci-dessous pour obtenir le même effet:

backgroundImage: `url(${Background})`

J'aurais dû ajouter cela à ma question. J'ai une largeur et une hauteur définies (100% / 400px respectivement). Le problème qui se pose est dû à la façon dont React gère les images statiques, je crois.
Kris

Devrait-on échapper aux caractères '(",') 'et espaces blancs dans la variable Background avant la concaténation selon w3.org/TR/CSS2/syndata.html#value-def-uri ?
qbolec

50
La syntaxe complète devrait ressembler à ceci:style={{backgroundImage: "url(" + Background + ")"}}
mike

2
juste pour développer le commentaire de @ mike, vous avez besoin de doubles accolades car l'un est pour que React entre en mode JS et l'autre pour désigner le nouvel objet.
Ciprian Tomoiagă

J'obtiens l'erreur 'Section' est définie mais jamais utilisée 'après avoir donné cet arrière-plan d'importation à partir de' ./background.jpg '; var sectionStyle = {width: "100%", height: "400px", backgroundImage: url(${Background})}; classe Section étend Component {render () {return (<section style = {sectionStyle}> </section>); }}
Pavanan MS

41

Si vous utilisez ES5 -

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

Si vous utilisez ES6 -

backgroundImage: `url(${Background})`

En gros, supprimer les accolades bouclés inutiles tout en ajoutant de la valeur aux travaux de la propriété backgroundImage fonctionnera.


2
Pour moi dans ES6, c'était le cas backgroundImage: `url("${Background}")`, car votre exemple ES6 ne fonctionnait pas pour moi.
S ..

Bonjour Bharad, comment feriez-vous si vous souhaitez ajouter plusieurs images d'arrière-plan. Dites pour deux images comment feriez-vous cela? Merci
En route vers le succès

37

Style en ligne pour définir n'importe quelle image en plein écran:

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

Vous pouvez également importer l'image dans le composant à l'aide de la require()fonction.

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

Notez les deux ensembles de crochets . Le premier ensemble sert à entrer en mode de réaction et le second à désigner un objet


Que faire si le chemin de l'image est une URL Web au lieu d'un chemin local? Quelque chose commehttps://images.com/myimage.png
Aminu Kano

3
Ok je comprends, lors de l'utilisation d'une URL basée sur le Web. Je devrais juste écrireurl(https://images.com/myimage.png)
Aminu Kano

4

Vous pouvez utiliser des modèles de littéraux (inclus avec back-tick: `...`) à ​​la place pour une backgroundImagepropriété comme celle-ci:

backgroundImage: `url(${Background})`

3

essaye ça:

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

2

Pour moi, ce qui a fonctionné, c'est de l'avoir comme ça

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

-1

Vous pouvez essayer usimg

backgroundImage: url(process.env.PUBLIC_URL + "/      assets/image_location")

Ce n'est pas recommandé car cela empêchera le webpack de connaître l'actif. Cela se terminera par un échec de cache si l'application React est ouverte hors ligne.
Thomas Kekeisen
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.