Встановлення фонового зображення з реактивними вбудованими стилями


290

Я намагаюся отримати доступ до статичного зображення, яке потрібно використовувати в межах вбудованого backgroundImageвластивості в межах React. На жаль, я просушився, як це зробити.

Як правило, я думав, що ви зробили так:

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

Це працює для <img>тегів. Чи може хтось пояснити різницю між ними?

Приклад:

<img src={ Background } /> працює просто чудово.

Дякую!

Відповіді:


476

Фігурні дужки всередині властивості backgroundImage неправильні.

Можливо, ви використовуєте webpack разом із завантажувачем файлів зображень, тому Background має бути вже рядком: backgroundImage: "url(" + Background + ")"

Ви також можете використовувати шаблони рядків ES6, як показано нижче, для досягнення того ж ефекту:

backgroundImage: `url(${Background})`

Я мав би додати це до свого питання. У мене встановлено ширину і висоту (100% / 400 пікс. Відповідно). Проблема, що виникає, пов'язана з тим, як реагує на обробку статичних зображень, на які я вірю.
Кріс

Чи слід уникати символів '(",') 'та пробілів у змінній Background перед конкатенацією відповідно до w3.org/TR/CSS2/syndata.html#value-def-uri ?
qbolec

50
Повний синтаксис повинен виглядати так:style={{backgroundImage: "url(" + Background + ")"}}
Майк

2
просто, щоб розгорнути коментар @ mike, вам потрібні подвійні фігурні дужки, оскільки для входу React є режим JS, а новий - для позначення нового об'єкта.
Ciprian Tomoiagă

Я отримую помилку "Розділ" визначено, але ніколи не використовується "після надання цього фону імпорту з" ./background.jpg "; var sectionStyle = {width: "100%", висота: "400px", backgroundImage: url(${Background})}; Розділ класу розширює компонент {render () {return (<секція стиль = {sectionStyle}> </section>); }}
MS Pavanan

41

Якщо ви використовуєте ES5 -

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

Якщо ви використовуєте ES6 -

backgroundImage: `url(${Background})`

В основному видалення непотрібних фігурних дужок, додаючи значення властивостям backgroundImage, буде працювати.


2
Для мене в ES6 це було backgroundImage: `url("${Background}")`, як ваш приклад ES6 не працював для мене.
С ..

Привіт Бхарад, як би ти це зробив, якщо ти хочеш додати більше одного фонового зображення. Скажіть для двох зображень, як би ви це зробили? Спасибі
на шляху до успіху

37

Вбудований стиль, щоб встановити будь-яке зображення на весь екран:

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

Ви також можете ввести зображення в компонент за допомогою require()функції.

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

Зверніть увагу на два набори фігурних дужок . Перший набір призначений для входу в режим реагування, а другий - для позначення об'єкта


Що робити, якщо шлях зображення - це веб-URL, а не локальний шлях? Щось на кшталтhttps://images.com/myimage.png
Аміну Кано

3
Гаразд, я розумію, коли ви використовуєте веб-URL. Я просто повинен написатиurl(https://images.com/myimage.png)
Аміну Кано

4

Ви можете використовувати Literals шаблону (додається із зворотним галочкою: `... ') замість цього backgroundImageвластивості:

backgroundImage: `url(${Background})`



-1

Ви можете спробувати usimg

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

Це не рекомендується, оскільки це не дозволить webpack дізнатися про актив. Це закінчиться пропуском кешу, якщо додаток для реагування буде відкрито в автономному режимі.
Thomas Kekeisen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.