การตั้งค่า backgroundImage ด้วย React Inline Styles


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 พร้อมกับไฟล์รูปภาพ loader ดังนั้น Background ควรเป็น String อยู่แล้ว: backgroundImage: "url(" + Background + ")"

คุณยังสามารถใช้เทมเพลตสตริง ES6 ได้ด้านล่างเพื่อให้ได้เอฟเฟกต์เดียวกัน:

backgroundImage: `url(${Background})`

ฉันควรจะเพิ่มคำถามนั้นลงไป ฉันมีชุดความกว้างและความสูง (100% / 400px ตามลำดับ) ปัญหาที่เกิดขึ้นนั้นเป็นเพราะวิธีการตอบสนองต่อการจัดการภาพที่ฉันเชื่อ
กริช

เราควรหลีกเลี่ยงอักขระ '(",') 'และช่องว่างในตัวแปรพื้นหลังก่อนทำการต่อข้อมูลตามw3.org/TR/CSS2/syndata.html#value-def-uri ?
qbolec

50
ไวยากรณ์แบบเต็มควรมีลักษณะเช่นนี้:style={{backgroundImage: "url(" + Background + ")"}}
ไมค์

2
เพียงเพื่อขยายความคิดเห็นของ @ mike คุณจะต้องใช้เครื่องหมายปีกกาคู่เนื่องจากมีไว้สำหรับ React เพื่อป้อนคือโหมด JS และอีกอันหนึ่งคือแสดงถึงวัตถุใหม่
Ciprian Tomoiagă

ฉันได้รับข้อผิดพลาด 'Section' ถูกกำหนด แต่ไม่เคยใช้ 'หลังจากให้พื้นหลังการนำเข้านี้จาก' ./background.jpg '; var sectionStyle = {width: "100%", ความสูง: "400px", backgroundImage: url(${Background})}; มาตราคลาสขยายองค์ประกอบ {render () {return (<section style = {sectionStyle}> </section>); }}
Pavanan MS

41

หากคุณกำลังใช้ ES5 -

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

หากคุณกำลังใช้ ES6 -

backgroundImage: `url(${Background})`

โดยทั่วไปการลบเครื่องหมายปีกกาที่ไม่จำเป็นในขณะที่เพิ่มคุณค่าให้กับงานคุณสมบัติ backgroundImage จะทำงาน


2
สำหรับฉันใน ES6 นั้นเป็นbackgroundImage: `url("${Background}")`เพราะตัวอย่าง ES6 ของคุณไม่ทำงานสำหรับฉัน
S. ..

สวัสดี Bharad คุณจะทำอย่างไรถ้าคุณต้องการเพิ่มภาพพื้นหลังมากกว่าหนึ่งภาพ พูดสองภาพคุณจะทำอย่างไร ขอบคุณ
หนทางสู่ความสำเร็จ

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
Aminu Kano

3
ฉันเข้าใจแล้วเมื่อใช้ URL บนเว็บ ฉันควรเขียนurl(https://images.com/myimage.png)
Aminu Kano

4

คุณสามารถใช้เทมเพลตวรรณกรรม (ล้อมรอบด้วยเครื่องหมายขีดหลัง: `... ') แทนbackgroundImageคุณสมบัติเช่นนี้:

backgroundImage: `url(${Background})`


2

สำหรับฉันสิ่งที่ทำงานคือมีมันเช่นนี้

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

-1

คุณสามารถลอง usimg

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

ไม่แนะนำเนื่องจากจะเป็นการป้องกันไม่ให้ webpack รู้จักกับเนื้อหา นี่จะจบลงด้วยการพลาดแคชหากแอพตอบโต้เปิดออฟไลน์
โทมัส Kekeisen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.