จำเป็นต้องใช้พารามิเตอร์ SVG เช่น 'xmlns' และ 'version' หรือไม่


203

ประมาณครึ่งหนึ่งของตัวอย่าง svg ที่ฉันเห็นบนอินเทอร์เน็ตรหัสนั้นถูกห่อด้วย<svg></svg>แท็กธรรมดา ๆ

ในอีกครึ่งหนึ่งแท็ก svg มีคุณสมบัติที่ซับซ้อนมากมายเช่นนี้:

<svg 
  xmlns="http://www.w3.org/2000/svg" 
  version="1.1" 
  xmlns:xlink="http://www.w3.org/1999/xlink"> 

คำถามของฉันคือ: มันจะใช้แท็ก svg ง่ายหรือไม่ ฉันได้ลองเล่นกับสิ่งที่ซับซ้อนและทุกอย่างก็ทำงานได้ดีในตอนท้ายถ้าไม่รวม

คำตอบ:


206

ตัวแทนผู้ใช้ทั้งหมด (เบราว์เซอร์) จะไม่สนใจแอตทริบิวต์ version ดังนั้นคุณจึงสามารถลบได้

ถ้าคุณฝังแบบอินไลน์ SVG ของคุณในหน้าเว็บ HTML และให้บริการหน้าเว็บที่เป็นtext/htmlแล้วแอตทริบิวต์ xmlns ไม่จำเป็น การฝัง SVG แบบอินไลน์ในเอกสาร HTML เป็นนวัตกรรมล่าสุดที่มาพร้อมกับการเป็นส่วนหนึ่งของ HTML5

แต่ถ้าคุณทำหน้าที่หน้าของคุณเป็นภาพ / SVG + XML หรือ application / XHTML + XML หรือชนิดไมม์อื่น ๆ ที่เป็นสาเหตุของตัวแทนผู้ใช้จะใช้ parser XML แล้วคุณลักษณะ xmlns จะต้อง นี่เป็นวิธีเดียวที่จะทำสิ่งต่าง ๆ จนกระทั่งเมื่อเร็ว ๆ นี้ดังนั้นจึงมีเนื้อหามากมายที่ทำหน้าที่เช่นนี้


5
"UAs ทั้งหมดจะไม่สนใจแอตทริบิวต์ version ดังนั้นคุณสามารถปล่อยได้" - แต่สเป็คพูดอะไรเกี่ยวกับเรื่องนี้บ้าง? "เบราว์เซอร์จะช่วยให้คุณสามารถหลบหนีไปได้" คือ (หรือในบางจุด) เป็นความจริงในหลาย ๆ วิธีที่ไม่ถูกต้องอย่างไม่น่าสงสัย
Mark Amery

ใน IE11 ถ้าฉันใช้<!DOCTYPE svg xmlns="www.w3.org/2000/svg">งานได้ แต่ถ้าฉันใช้ xmlns หรือเปลี่ยน<!DOCTYPE svg xmlns="www.example.com">เป็นไม่ได้ผล ทำไมถึงเป็นอย่างนั้น?
Donald Duck

8
โปรดอ้างอิงแหล่งที่มาสำหรับคำตอบนี้ได้ไหม
2540625

69
ฉันเขียนเศษส่วนสำคัญของรหัส SVG ใน Firefox และฉันก็บอกอย่างนั้น นั่นไม่ดีพอใช่ไหม ถ้าไม่ฉันได้เพิ่มลิงก์บางส่วนแล้ว
Robert Longson

1
@Marcel ไม่ใช่ถ้า data-uris นั้นเป็น image / svg + xml ซึ่งโดยปกติแล้วจะเป็นเช่นนั้นส่วนสุดท้ายของคำตอบก็จะถูกเก็บไว้
Robert Longson

228

xmlns="http://www.w3.org/2000/svg"แอตทริบิวต์:

  • ที่จำเป็นสำหรับภาพ / SVG + XMLไฟล์ 1
  • ตัวเลือกสำหรับinlined 2<svg>

xmlns:xlink="http://www.w3.org/1999/xlink"แอตทริบิวต์:

  • จำเป็นสำหรับไฟล์รูปภาพ / svg + xmlด้วยแอ็ตทริบิวต์xlink: 1
  • ทางเลือกสำหรับinlined <svg> with xlink: attributes 2

version="1.1"แอตทริบิวต์:

  • แนะนำให้ปฏิบัติตามมาตรฐานไฟล์รูปภาพ / svg + xml 3
  • ตัวแทนผู้ใช้ทุกคนไม่สนใจอย่างชัดเจน 4
  • ลบออกใน SVG 2. 5

1 ตัวระบุทรัพยากรที่เป็นสากล (RFC3987)
2 ตั้งแต่ HTML5
3 ภาษา Extensible Markup (XML) 1.0
4อาจเป็นไปได้จนกว่าจะมีการเปิดตัวรุ่นหลักอื่น ๆ
5 SVG 2 คำแนะนำผู้สมัคร W3C วันที่ 7 สิงหาคม 2561


2
จำเป็นต้องเป็น http หรือสามารถเป็น https ได้หรือไม่
JohannesB

2
@JohannesB ทั้งสองโปรโตคอลเข้ากันได้: D
ncomputers

1
@JohannesB ใช่ที่นี่คุณมีinlinedตัวอย่างเช่นHTTP HTTPSและภาพ / SVG + XMLไฟล์ที่มีinlined SVG กับXLinkแอตทริบิวต์ตัวอย่างเช่นHTTP HTTPS
ncomputers

1
ขอบคุณเดาว่า Nick Craver ทำผิดเช่นกัน;)
JohannesB

2
อย่าเข้าใจversionคุณสมบัติของการประกาศ xml ( <?xml version...) สำหรับversionคุณสมบัติของ<svg>องค์ประกอบ อันแรกเกี่ยวกับเวอร์ชันของภาษามาร์กอัป XML ในขณะที่อันหลังระบุรุ่นของ SVG ผู้เขียนคำตอบนี้ทำผิดพลาดโดยอ้างถึง XML ไม่ใช่ข้อกำหนดเฉพาะของ SVG ใน³ ฉันพยายามแก้ไข แต่คนโง่บางคนปฏิเสธการแก้ไข
Bachsau

7

ฉันต้องการเพิ่มคำตอบทั้งสอง แต่ฉันไม่มีคะแนนฉันกำลังเพิ่มคำตอบใหม่ ในการทดสอบล่าสุดเกี่ยวกับ Chrome (เวอร์ชัน 63.0.3239.132 (รุ่นเป็นทางการ) (Windows 64 บิต)) ฉันได้พบว่า:

  1. สำหรับ SVG แบบอินไลน์ที่ป้อนลงในไฟล์ HTML โดยตรงผ่านตัวแก้ไขข้อความหรือ javascript และ elm.innerHTML แอตทริบิวต์ xmlns นั้นไม่จำเป็นตามที่ระบุไว้ในอีกสองคำตอบ
  2. แต่สำหรับ SVG แบบอินไลน์ที่โหลดผ่าน javascript และ AJAX มีสองตัวเลือกดังนี้:
    • การใช้งานและxhr.responseText elm.innerHTMLสิ่งนี้ไม่ต้องการ xmlns
    • การใช้งานxhr.responseXML.documentElementและหรือelm.appendChild() elm.insertBefore()วิธีการสร้าง SVG อินไลน์นี้ก่อให้เกิดผลลัพธ์อ่อนหัดโดยไม่ต้อง namespace SVG xmlns="http://www.w3.org/2000/svg"พื้นฐานถูกประกาศในขณะที่ <svg> โหลดลงใน HTML แต่ฟังก์ชั่นระดับเอกสารเช่นgetElementById()ไม่รู้จักในองค์ประกอบ <svg> ฉันคิดว่านี่เป็นเพราะใช้ตัวแยก XML XMLHttpRequest นอก HTML

0

เกี่ยวกับแอตทริบิวต์เวอร์ชั่น SVG MDN WebDocกล่าว

เลิกใช้แล้วตั้งแต่ SVG 2
ไม่แนะนำคุณลักษณะนี้อีกต่อไป แม้ว่าเบราว์เซอร์บางตัวอาจยังคงสนับสนุน แต่ก็อาจถูกลบออกไปจากมาตรฐานเว็บที่เกี่ยวข้องแล้วอาจอยู่ระหว่างการตกหล่นหรืออาจถูกเก็บไว้เพื่อความเข้ากันได้เท่านั้น หลีกเลี่ยงการใช้งานและอัปเดตรหัสที่มีอยู่ถ้าเป็นไปได้; ดูตารางความเข้ากันได้ที่ด้านล่างของหน้านี้เพื่อเป็นแนวทางในการตัดสินใจของคุณ โปรดทราบว่าคุณลักษณะนี้อาจหยุดทำงานเมื่อใดก็ได้

แอตทริบิวต์ version ใช้เพื่อระบุว่าข้อกำหนดเอกสาร SVG เป็นไปตามข้อกำหนดใด มันได้รับอนุญาตเฉพาะในองค์ประกอบราก มันเป็นคำแนะนำอย่างแท้จริงและไม่มีผลต่อการเรนเดอร์หรือการประมวลผล

PS: SVG 2 นั้นยังห่างไกลจากการเป็นมาตรฐาน

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