SVG แบบอินไลน์เทียบกับ img และ object
เลือกวิธีฝัง SVG ที่เหมาะสมกับกรณีใช้งาน
SVG แบบอินไลน์เทียบกับ img และ object เป็นบทเรียน HTML Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน HTML Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน
สามวิธีฝัง SVG
สามารถฝัง SVG (กราฟิกเวกเตอร์ที่ปรับขนาดได้) ได้สามวิธี:
<img src="icon.svg">— เรียบง่าย มีแคช และเข้าถึง JS/CSS ไม่ได้<object data="chart.svg">— โต้ตอบภายในได้ และเป็นเอกสารแยกต่างหาก- SVG แบบฝังภายใน HTML — เข้าถึง CSS/JS ได้เต็มรูปแบบ และไม่ต้องส่งคำขอเพิ่มเติม
SVG ด้วย img
วิธีที่ง่ายที่สุด: อ้างอิง SVG เป็นรูปภาพ:
<img src="logo.svg" alt="Company logo" width="120" height="40">
<!-- Pros: simple, cached by browser, clean HTML -->
<!-- Cons: cannot style with CSS, no JS interaction,
cannot use SVG filters or animations from CSS -->SVG เป็นภาพพื้นหลังด้วย CSS
ใช้ SVG เป็นภาพพื้นหลัง CSS สำหรับไอคอนตกแต่ง:
.icon-check {
background-image: url('/icons/check.svg');
background-size: contain;
background-repeat: no-repeat;
width: 1rem;
height: 1rem;
}
<!-- Decorative: not in accessibility tree, no alt text needed -->SVG ด้วยองค์ประกอบวัตถุ
ฝัง SVG ด้วย <object> สำหรับ SVG ที่โต้ตอบได้:
<object
type="image/svg+xml"
data="interactive-chart.svg"
width="800"
height="400"
aria-label="Interactive revenue chart"
>
<!-- Fallback: -->
<img src="chart-static.png" alt="Revenue chart">
</object>
<!-- SVG can have its own scripts
SVG document is somewhat isolated from parent page -->SVG แบบฝังภายใน
ฝัง SVG โดยตรงใน HTML เพื่อควบคุมได้อย่างเต็มที่:
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
width="24"
height="24"
aria-hidden="true"
focusable="false"
>
<path d="M12 2L2 7l10 5 10-5-10-5z"/>
<path d="M2 17l10 5 10-5"/>
</svg>ข้อดีของ SVG แบบฝังภายใน
เหตุผลที่ควรใช้ SVG แบบฝังภายใน:
- กำหนดรูปแบบด้วย CSS ได้เต็มที่:
fill,stroke, การเปลี่ยนผ่าน และภาพเคลื่อนไหว - โต้ตอบด้วย JavaScript ได้: เลือกองค์ประกอบ SVG และรับฟังเหตุการณ์
- currentColor: สืบทอดสีจาก CSS ขององค์ประกอบแม่
- ไม่ต้องส่งคำขอ HTTP เพิ่มเติม
- สามารถเป็นส่วนหนึ่งของแผนผังการเข้าถึงได้โดยใช้ role และ title
ข้อเสียของ SVG แบบฝังภายใน
ข้อเสียของ SVG แบบฝังภายใน:
- ไฟล์ HTML มีขนาดใหญ่ขึ้น
- เบราว์เซอร์ไม่แคชแยกต่างหาก
- ไม่สามารถนำ SVG เดียวกันกลับมาใช้ในหลายหน้าได้ง่ายโดยไม่ทำซ้ำ
- เกิดการทำซ้ำของโค้ดสำหรับไอคอนที่ใช้ซ้ำ
องค์ประกอบ use สำหรับสไปรต์
กำหนดไอคอน SVG เพียงครั้งเดียว แล้วอ้างอิงด้วย <use>:
<!-- Icon sprite (often hidden): -->
<svg style="display:none">
<symbol id="icon-close" viewBox="0 0 24 24">
<path d="M18 6L6 18M6 6l12 12"/>
</symbol>
<symbol id="icon-check" viewBox="0 0 24 24">
<path d="M20 6L9 17l-5-5"/>
</symbol>
</svg>
<!-- Use the icons: -->
<svg aria-hidden="true"><use href="#icon-close"/></svg>
<svg aria-hidden="true"><use href="#icon-check"/></svg>SVG ที่เข้าถึงได้
ทำให้ SVG แบบฝังภายในเข้าถึงได้:
<!-- Informative SVG: -->
<svg role="img" aria-labelledby="svg-title">
<title id="svg-title">Revenue growth chart Q1-Q4 2024</title>
<!-- chart paths -->
</svg>
<!-- Decorative SVG: -->
<svg aria-hidden="true" focusable="false">
<!-- decorative paths -->
</svg>
<!-- focusable="false" needed for IE to prevent tab focus -->เคล็ดลับ currentColor
ใช้ currentColor เพื่อสืบทอดสีข้อความจาก CSS:
<button class="btn btn-primary">
<svg aria-hidden="true" width="16" height="16">
<path fill="currentColor" d="M10 6H6v4H2v4h4v4h4v-4h4v-4h-4V6z"/>
</svg>
Add Item
</button>
<!-- fill="currentColor" inherits the button's text color
When button is hovered/focused, icon color changes too
No need for separate icon color rules -->ตรวจสอบอย่างรวดเร็ว
ข้อได้เปรียบหลักของ SVG แบบฝังภายในเหนือการใช้ SVG ผ่าน img src คืออะไร
ทบทวน: การฝัง SVG
สาระสำคัญของการฝัง SVG:
<img src>— เรียบง่าย เข้าถึง CSS/JS ไม่ได้ และมีแคช- ภาพพื้นหลังด้วย CSS — ใช้สำหรับการตกแต่งเท่านั้น
<object data>— SVG ที่โต้ตอบได้ แต่แยกออกจากส่วนอื่นพอสมควร- SVG แบบฝังภายใน — ควบคุม CSS/JS ได้เต็มที่ และไม่ต้องส่งคำขอเพิ่มเติม
- สไปรต์ SVG ที่ใช้
<symbol>+<use>— นำกลับมาใช้ซ้ำได้อย่างมีประสิทธิภาพ
คำถามที่พบบ่อย
บทเรียน “SVG แบบอินไลน์เทียบกับ img และ object” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “SVG แบบอินไลน์เทียบกับ img และ object” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส HTML Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส HTML Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “SVG แบบอินไลน์เทียบกับ img และ object”
เลือกวิธีฝัง SVG ที่เหมาะสมกับกรณีใช้งาน คุณปฏิบัติ HTML Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน HTML Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน HTML Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “SVG แบบอินไลน์เทียบกับ img และ object” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน HTML Academy นี้ได้ไหม
ได้ บทเรียน HTML Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- SVG แบบอินไลน์เทียบกับ img และ object
- รูปร่าง SVG พื้นฐาน: rect circle path
- SVG viewBox และการปรับขนาดแบบตอบสนอง
- การทำภาพเคลื่อนไหว SVG ด้วย CSS และ SMIL