452 votes

Définir un backgroundImage avec les styles en ligne de React

J'essaie d'accéder à une image statique pour l'utiliser dans le cadre d'un programme en ligne. backgroundImage dans React. Malheureusement, je n'ai pas trouvé comment le faire.

En général, je pensais que vous faisiez simplement ce qui 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 <img> tags. Quelqu'un peut-il expliquer la différence entre les deux ?

Exemple :

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

Merci !

715voto

rgommezz Points 6193

Les accolades dans la propriété backgroundImage sont incorrectes.

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

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

backgroundImage: `url(${Background})`

0 votes

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

0 votes

Doit-on échapper les caractères '(", ')' et les espaces dans la variable Background avant la concaténation, comme indiqué dans le tableau ci-dessous ? w3.org/TR/CSS2/syndata.html#value-def-uri ?

81 votes

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

84voto

Hitesh Sahu Points 12561

Style en ligne pour mettre 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'
}}

0 votes

Merci beaucoup, c'est ce que je cherchais.

0 votes

import Background from '../images/background_image.png' ; La réponse donnée ici a résolu mon problème, c'est la meilleure réponse pour le moment.

60voto

Rushikesh Bharad Points 195

Si vous utilisez ES5 -

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

Si vous utilisez ES6 -

backgroundImage: `url(${Background})`

En fait, la suppression des accolades inutiles et l'ajout d'une valeur à la propriété backgroundImage fonctionnent.

3 votes

Pour moi, dans ES6, c'était backgroundImage: `url("${Background}")` car votre exemple ES6 n'a pas fonctionné pour moi.

0 votes

Bonjour Bharad, comment procéder si vous voulez ajouter plus d'une image d'arrière-plan. Par exemple, pour deux images, comment faire ? Merci

2 votes

@S.. Merci, ça m'a aidé. J'étais coincé.

32voto

Tricky Points 5011

Vous pouvez également intégrer l'image dans le composant en utilisant la fonction require() fonction.

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

Notez les deux ensembles de crochets arrondis. . Le premier ensemble sert à entrer dans le mode de réaction et le second sert à désigner l'objet.

0 votes

Que se passe-t-il si le chemin de l'image est une URL web au lieu d'un chemin local ? Quelque chose comme https://images.com/myimage.png

4 votes

Ok je comprends, quand on utilise une URL basée sur le web. je devrais juste écrire url(https://images.com/myimage.png)

11voto

Fawaz Abdulla Points 21

Vous pouvez utiliser des littéraux de modèle (entourés d'un back-tick : `...`) à la place. Pour backgroundImage propriété comme ceci :

backgroundImage: `url(${Background})`

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X