0Pricing
HTML Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. SVG แบบอินไลน์เทียบกับ img และ object
  2. รูปร่าง SVG พื้นฐาน: rect circle path
  3. SVG viewBox และการปรับขนาดแบบตอบสนอง
  4. การทำภาพเคลื่อนไหว SVG ด้วย CSS และ SMIL
← กลับไปที่ HTML Academy