Impostazione di uno sfondoImmagine con stili in linea React


290

Sto cercando di accedere a un'immagine statica da utilizzare all'interno di una backgroundImageproprietà inline all'interno di React. Sfortunatamente, mi sono esaurito su come farlo.

In generale, ho pensato che avessi fatto semplicemente come segue:

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

Questo funziona per i <img>tag. Qualcuno può spiegare la differenza tra i due?

Esempio:

<img src={ Background } /> funziona benissimo.

Grazie!

Risposte:


476

Le parentesi graffe all'interno della proprietà backgroundImage sono errate.

Probabilmente stai usando webpack insieme al caricatore di file di immagini, quindi Background dovrebbe essere già una stringa: backgroundImage: "url(" + Background + ")"

È inoltre possibile utilizzare i modelli di stringa ES6 come di seguito per ottenere lo stesso effetto:

backgroundImage: `url(${Background})`

Avrei dovuto aggiungerlo alla mia domanda. Ho impostato una larghezza e un'altezza (rispettivamente 100% / 400px). Credo che il problema che sorge sia dovuto al modo in cui la reazione gestisce le immagini statiche.
— Kris,

Si dovrebbe sfuggire ai caratteri '(",') 'e spazi bianchi nella variabile Background prima della concatenazione come da w3.org/TR/CSS2/syndata.html#value-def-uri ?
— qbolec

50
La sintassi completa dovrebbe assomigliare a questa:style={{backgroundImage: "url(" + Background + ")"}}
— microfono

2
solo per espandere il commento di @mike, hai bisogno di doppie parentesi graffe perché una deve entrare in React è la modalità JS e una è per indicare il nuovo oggetto.
— Ciprian Tomoiagă,

Ricevo l'errore "Sezione" definito ma mai usato "dopo aver dato questo Background di importazione da" ./background.jpg "; var sectionStyle = {larghezza: "100%", altezza: "400px", backgroundImage: url(${Background})}; La sezione class estende il componente {render () {return (<section style = {sectionStyle}> </section>); }}
— Pavanan MS

41

Se si utilizza ES5 -

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

Se si utilizza ES6 -

backgroundImage: `url(${Background})`

Fondamentalmente rimuovendo le parentesi graffe non necessarie mentre aggiungendo valore alle opere di proprietà backgroundImage funzionerà.


2
Per me in ES6 lo è stato backgroundImage: `url("${Background}")`, poiché il tuo esempio ES6 non ha funzionato per me.
— S ..

Ciao Bharad, come faresti se vuoi aggiungere più di un'immagine di sfondo. Dire per due immagini come lo faresti? Grazie
— Sulla strada del successo il

37

Stile in linea per impostare qualsiasi immagine a schermo intero:

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

Puoi anche portare l'immagine nel componente usando la require()funzione.

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

Nota i due set di parentesi graffe . Il primo set serve per accedere alla modalità di reazione e il secondo per indicare l'oggetto


Che cosa succede se il percorso dell'immagine è un URL Web anziché un percorso locale? Qualcosa di similehttps://images.com/myimage.png
— Aminu Kano,

3
Ok, ho capito, quando si utilizza l'URL basato sul web. Dovrei solo scrivereurl(https://images.com/myimage.png)
— Aminu Kano,

4

Puoi usare Template Literals (racchiuso da back-tick: `...`) invece per backgroundImageproprietà come questa:

backgroundImage: `url(${Background})`

3

prova questo:

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

2

Per me ciò che ha funzionato è averlo così

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

-1

Puoi provarci

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

Questo non è raccomandato poiché impedirà al webpack di conoscere la risorsa. Questo termina con un errore nella cache se l'app di reazione viene aperta offline.
— Thomas Kekeisen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.