Tepki Satır İçi Stillerle Görüntü Ayarlama


290

backgroundImageReact içinde bir satır içi özelliği içinde kullanmak için statik bir görüntüye erişmeye çalışıyorum . Ne yazık ki, bunun nasıl yapılacağı konusunda kurudum.

Genel olarak, aşağıdaki gibi yaptığınızı sanıyordum:

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

Bu, <img>etiketler için geçerlidir. Birisi ikisi arasındaki farkı açıklayabilir mi?

Misal:

<img src={ Background } /> gayet iyi çalışıyor.

Teşekkür ederim!

Yanıtlar:


476

BackgroundImage özelliğinin içindeki süslü ayraçlar yanlış.

Muhtemelen webpack'i görüntü dosyaları yükleyicisiyle birlikte kullanıyorsunuz, bu nedenle Arka Plan zaten bir Dize olmalıdır: backgroundImage: "url(" + Background + ")"

Aynı efekti elde etmek için aşağıdaki gibi ES6 dize şablonlarını da kullanabilirsiniz:

backgroundImage: `url(${Background})`

Bunu soruma eklemeliydim. Bir genişlik ve yükseklik ayarladım (sırasıyla% 100/400 piksel). Ortaya çıkan sorun, reaksiyonun inandığım statik görüntüleri nasıl işlediğinden kaynaklanıyor.
Kris

W3.org/TR/CSS2/syndata.html#value-def-uri'ye göre birleştirme işleminden önce Arka Plan değişkenindeki '(",') 've boşluk karakterlerinden kaçmalı mı?
qbolec

50
Tam sözdizimi şöyle görünmelidir:style={{backgroundImage: "url(" + Background + ")"}}
mike

2
@ mike'ın yorumunu genişletmek için, çift kıvırcık parantezlere ihtiyacınız var çünkü biri React'ın girmesi için JS modu ve diğeri yeni nesneyi belirtmek için.
Ciprian Tomoiagă

Bu bölüm Arka Plan './background.jpg' den sonra 'Bölüm' tanımlanmış ama asla kullanılmış 'hatası alıyorum; var sectionStyle = {width: "100%", yükseklik: "400px", backgroundImage: url(${Background})}; sınıf Bölümü, Bileşen {render () {return (<section style = {sectionStyle}> </section>) öğesini genişletir; }}
Pavanan MS

41

ES5 kullanıyorsanız -

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

ES6 kullanıyorsanız -

backgroundImage: `url(${Background})`

Temel olarak backgroundImage özellik çalışmalarına değer eklerken gereksiz kıvırcık parantez kaldırmak çalışır.


2
ES6'da benim için backgroundImage: `url("${Background}")`, ES6 örneğiniz benim için çalışmadı.
S ..

Merhaba Bharad, birden fazla arka plan resmi eklemek isterseniz bu konu hakkında ne düşünüyorsunuz? İki resim için bunu nasıl yapardınız? Teşekkürler
başarıya giderken

37

Herhangi bir görüntüyü tam ekran ayarlamak için satır içi stil:

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

Ayrıca require()işlevi kullanarak görüntüyü bileşene getirebilirsiniz .

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

İki küme küme parantezine dikkat edin . İlk küme reaksiyon moduna girmek, ikinci küme nesneyi göstermek içindir


Resim yolu yerel bir yol yerine bir web URL'siyse ne olur? Gibi bir şeyhttps://images.com/myimage.png
Aminu Kano

3
Tamam, web tabanlı URL kullanırken anlıyorum. Sadece yazmalıyımurl(https://images.com/myimage.png)
Aminu Kano

4

Bunun backgroundImagegibi özellik için Şablon Değişmezlerini (geri işaretiyle çevrili: `...`) kullanabilirsiniz :

backgroundImage: `url(${Background})`

3

bunu dene:

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

2

Benim için işe yarayan şey böyle olması

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

-1

Usimg deneyebilirsiniz

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

Web paketinin varlığı bilmesini engelleyeceği için bu önerilmez. Reaksiyon uygulaması çevrimdışı açılırsa bu önbellek kaybıyla sonuçlanır.
Thomas Kekeisen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.