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.