เติมองค์ประกอบเส้นทาง SVG ด้วยภาพพื้นหลัง


166

เป็นไปได้ไหมที่จะตั้งค่าองค์ประกอบbackground-imageSVG<path>

ตัวอย่างเช่นถ้าฉันตั้งองค์ประกอบclass="wall"สไตล์ CSS จะใช้.wall {fill: red;}งานได้ แต่.wall{background-image: url(wall.jpg)}จะไม่เป็นเช่น.wall {background-color: red;}นั้น


1
แสดงวิธีตั้งค่าภาพพื้นหลังสำหรับข้อความ SVG แบบเลือกได้แบบต่อตัวอักษร: stackoverflow.com/a/10853878/405017
Phrogz

สำหรับผู้ที่กำลังมองหาข้อมูลลึก ๆ ให้ตรวจสอบลิงค์
เปาโลบูโน่

คำตอบ:


261

คุณสามารถทำได้โดยการทำให้พื้นหลังเป็นรูปแบบ :

<defs>
  <pattern id="img1" patternUnits="userSpaceOnUse" width="100" height="100">
    <image xlink:href="wall.jpg" x="0" y="0" width="100" height="100" />
  </pattern>
</defs>

ปรับความกว้างและความสูงตามภาพของคุณจากนั้นอ้างอิงจากเส้นทางดังนี้:

<path d="M5,50
         l0,100 l100,0 l0,-100 l-100,0
         M215,100
         a50,50 0 1 1 -100,0 50,50 0 1 1 100,0
         M265,50
         l50,100 l-100,0 l50,-100
         z"
  fill="url(#img1)" />

ตัวอย่างการทำงาน


3
เยี่ยมมากมันใช้กับ base64 images ได้หรือไม่? แทนที่จะเป็น wall.jpg data:image/png;base64,iVBORw0KGgoAAเหมือนกับที่คุณทำใน CSS ปกติ?
Christoph

12
@Christoph ฉันไม่รู้ลองดูสิ
robertc

2
@ โรเบิร์ตฉันลองแล้วมันใช้งานไม่ได้ แต่ฉันมีองค์ประกอบของสไตล์ที่ซ้ำกัน โดยการกำจัดมันใช้งานได้ดี;)
Christoph

4
@robertc: ฉันมีคำถามเกี่ยวกับคำตอบของคุณ รูปแบบเริ่มต้นที่พิกัดทั่วโลก (0,0) เป็นไปได้ไหมที่รูปแบบจะใช้ระบบพิกัดโลคัลจากวัตถุที่แนบกับ? ฉันต้องการวาดสี่เหลี่ยมที่สถานที่ต่าง ๆ ใน svg ของฉันและสิ่งที่เกิดขึ้นคือว่ารูปแบบซ้ำแล้วซ้ำอีกในพื้นหลังหลุมและวัตถุที่ใช้เป็นหน้ากาก
โทเบียส Golbs

7
@robertc โปรดอัปเดตคำตอบของคุณเพื่อพูดถึงว่าxlink:hrefเลิกใช้แล้วตั้งแต่ SVG 2 และใช้งานhrefทันที developer.mozilla.org/en-US/docs/Web/SVG/Attribute/xlink:href
Blake Regalia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.