Tailwind CSS Academy · บทเรียน

ยูทิลิตีเส้นขอบรอบนอกและวงแหวน

เพิ่มตัวบ่งชี้โฟกัสที่เข้าถึงได้ด้วยยูทิลิตี ring-* ซึ่งแสดงอยู่นอกองค์ประกอบโดยไม่กระทบการจัดวาง

บทเรียน 4 จาก 413 ขั้นตอน

ยูทิลิตีเส้นขอบรอบนอกและวงแหวน เป็นบทเรียน Tailwind CSS Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Tailwind CSS Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Tailwind CSS Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุผลที่เส้นขอบรอบนอกและวงแหวนมีความสำคัญ

เมื่อผู้ใช้นำทางด้วยแป้นพิมพ์หรือโปรแกรมอ่านหน้าจอ ตัวบ่งชี้โฟกัสที่มองเห็นได้มีความสำคัญต่อการทราบว่าองค์ประกอบใดกำลังทำงานอยู่ เบราว์เซอร์มีเส้นขอบรอบนอกสำหรับโฟกัสเป็นค่าเริ่มต้น แต่นักออกแบบจำนวนมากปิดใช้งานด้วย outline-none โดยไม่จัดเตรียมสิ่งทดแทนที่เข้าถึงได้ ยูทิลิตี ring-* ของ Tailwind ได้รับการออกแบบมาเพื่อจุดประสงค์นี้โดยเฉพาะ โดยสร้างตัวบ่งชี้โฟกัสที่มองเห็นได้และเข้าถึงได้ ซึ่งดูดีกว่าค่าเริ่มต้นของเบราว์เซอร์โดยไม่ลดทอนการเข้าถึง

<!-- Accessible focus ring replacing browser default -->
<button class="bg-blue-500 text-white px-4 py-2 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2">
  Press Tab to focus me
</button>

ยูทิลิตีวงแหวนทำงานอย่างไร

วงแหวนของ Tailwind ถูกสร้างด้วย box-shadow ไม่ใช่คุณสมบัติ CSS outline ซึ่งหมายความว่าวงแหวนจะทำงานร่วมกับการซ้อนชั้นของเงา และสามารถใช้ร่วมกับเงากล่องอื่นได้ ยูทิลิตี ring-* กำหนดความกว้างของวงแหวน ring-{color} กำหนดสี และ ring-offset-* เพิ่มช่องว่างระหว่างองค์ประกอบกับวงแหวน ต่างจากเส้นขอบรอบนอก วงแหวนไม่ส่งผลต่อการจัดวาง และทำงานร่วมกับ border-radius ได้อย่างถูกต้อง

<!-- Ring details: width + color + offset -->
<div class="flex gap-6 p-6">
  <!-- Width only -->
  <button class="bg-gray-200 px-4 py-2 rounded focus:ring-2 focus:outline-none">
    Ring width 2
  </button>
  <!-- Width + color -->
  <button class="bg-gray-200 px-4 py-2 rounded focus:ring-2 focus:ring-blue-500 focus:outline-none">
    Colored ring
  </button>
  <!-- Width + color + offset -->
  <button class="bg-gray-200 px-4 py-2 rounded focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 focus:outline-none">
    Ring with offset
  </button>
</div>

ยูทิลิตีความกว้างวงแหวน

ความกว้างของวงแหวนมีตั้งแต่ ring-0 (ไม่มีวงแหวน) ถึง ring-8 (8px) ค่าที่ใช้บ่อยที่สุดคือ ring-1, ring-2 และ ring-4 ค่า ring-2 สร้างตัวบ่งชี้โฟกัสที่สังเกตเห็นได้ชัดแต่ไม่รบกวนสายตามากเกินไป โปรดทราบว่าแตกต่างจาก border-* ตรงที่ไม่มีการควบคุมตามทิศทาง วงแหวนจะล้อมรอบองค์ประกอบทั้งหมดทุกด้านเสมอ

<!-- Ring width scale -->
<div class="flex gap-4 flex-wrap p-6">
  <div class="w-16 h-16 bg-white rounded-lg ring-1 ring-blue-500 flex items-center justify-center text-xs">ring-1</div>
  <div class="w-16 h-16 bg-white rounded-lg ring-2 ring-blue-500 flex items-center justify-center text-xs">ring-2</div>
  <div class="w-16 h-16 bg-white rounded-lg ring-4 ring-blue-500 flex items-center justify-center text-xs">ring-4</div>
  <div class="w-16 h-16 bg-white rounded-lg ring-8 ring-blue-500 flex items-center justify-center text-xs">ring-8</div>
</div>

สีและความทึบของวงแหวน

กำหนดสีของวงแหวนด้วย ring-{color}-{shade} เช่น ring-indigo-500 หรือ ring-green-400 สีของวงแหวนควรมีความเปรียบต่างเพียงพอทั้งกับพื้นหลังขององค์ประกอบและพื้นหลังของหน้า คุณยังสามารถกำหนดความทึบด้วยตัวปรับแบบเครื่องหมายทับ เช่น ring-blue-500/50 สำหรับวงแหวนกึ่งโปร่งใส วิธีนี้สร้างเอฟเฟกต์แสงเรืองที่นุ่มนวลขึ้นและยังคงมองเห็นได้อย่างเพียงพอ

<!-- Semantic ring colors for different states -->
<div class="space-y-3 max-w-xs">
  <input class="w-full border border-gray-300 rounded-lg px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500" placeholder="Default focus" />
  <input class="w-full border border-green-300 rounded-lg px-4 py-2 ring-2 ring-green-400" placeholder="Success state" />
  <input class="w-full border border-red-300 rounded-lg px-4 py-2 ring-2 ring-red-400" placeholder="Error state" />
</div>

ring-offset และ ring-offset-color

ring-offset-* เพิ่มพื้นที่ว่างระหว่างเส้นขอบขององค์ประกอบกับวงแหวน ทำให้วงแหวนแยกออกจากตัวองค์ประกอบได้อย่างชัดเจน ring-offset-2 เป็นค่าที่ใช้บ่อยที่สุด โดยสร้างช่องว่าง 2px ตามค่าเริ่มต้น ช่องว่างจะเป็นสีขาว หากใช้บนพื้นหลังที่มีสี ให้กำหนดเป็น ring-offset-blue-600 เพื่อเติมช่องว่างด้วยสีพื้นหลังแทนสีขาว และรักษาการแยกทางด้านภาพไว้

<!-- ring-offset creating visual separation -->
<div class="flex gap-4 items-center p-6">
  <!-- On white: default white offset looks great -->
  <button class="bg-blue-500 text-white px-4 py-2 rounded-lg ring-2 ring-blue-500 ring-offset-2">
    White bg offset
  </button>

  <!-- On colored bg: match offset to background -->
  <div class="bg-blue-600 p-4 rounded-xl">
    <button class="bg-white text-blue-600 px-4 py-2 rounded-lg ring-2 ring-white ring-offset-2 ring-offset-blue-600">
      Colored bg offset
    </button>
  </div>
</div>

ring-inset สำหรับวงแหวนด้านใน

ring-inset วาดวงแหวนไว้ด้านในองค์ประกอบแทนที่จะวาดด้านนอก คล้ายกับ shadow-inner เหมาะเมื่อวงแหวนด้านนอกอาจรบกวนองค์ประกอบข้างเคียงหรือล้นออกจากภาชนะที่ถูกตัดเนื้อหา วงแหวนด้านในยังมีความหมายทางภาพที่แตกต่างกัน โดยสื่อถึงสถานะที่ถูกเลือกหรือกำลังทำงานมากกว่าสถานะที่อยู่ในโฟกัส จึงเหมาะกับองค์ประกอบสวิตช์สลับและแท็บที่กำลังทำงาน

<!-- Inner ring for active/selected states -->
<div class="flex gap-3">
  <!-- Selected card with inner ring -->
  <div class="bg-blue-50 border border-blue-200 rounded-xl p-4 ring-2 ring-inset ring-blue-500 cursor-pointer">
    <div class="font-semibold text-blue-700">Basic Plan</div>
    <div class="text-sm text-blue-600">$9/month</div>
  </div>

  <!-- Unselected card -->
  <div class="bg-white border border-gray-200 rounded-xl p-4 cursor-pointer hover:border-gray-300">
    <div class="font-semibold">Pro Plan</div>
    <div class="text-sm text-gray-500">$29/month</div>
  </div>
</div>

ยูทิลิตี outline-*

Tailwind มีชุดยูทิลิตีสำหรับพร็อพเพอร์ตี outline ของ CSS ด้วย โดยทั่วไปมักเลือกใช้วงแหวนสำหรับรูปแบบโฟกัส แต่เส้นขอบเค้าร่างดั้งเดิมมีข้อได้เปรียบเฉพาะตัวอย่างหนึ่ง คือไม่ได้รับผลกระทบจาก overflow-hidden เพราะจะแสดงอยู่นอกคอนเทนเนอร์ที่ถูกตัดการแสดงผล outline-none จะลบเส้นขอบเค้าร่างเริ่มต้นของเบราว์เซอร์ ส่วน outline, outline-2 และ outline-dashed จะเพิ่มเส้นขอบเค้าร่างตามรูปแบบที่กำหนด

<!-- outline utilities -->
<div class="space-y-3 max-w-xs">
  <!-- Remove default outline (bad practice alone!) -->
  <button class="w-full bg-gray-200 p-2 rounded focus:outline-none">outline-none (no focus!)</button>

  <!-- Custom outline -->
  <button class="w-full bg-gray-200 p-2 rounded outline outline-2 outline-blue-500">
    outline-2 outline-blue-500
  </button>

  <!-- Dashed outline -->
  <button class="w-full bg-gray-200 p-2 rounded outline outline-dashed outline-2 outline-gray-400">
    outline-dashed
  </button>
</div>

ยูทิลิตี outline-offset

outline-offset-* ควบคุมระยะห่างระหว่างเส้นขอบขององค์ประกอบกับเส้นขอบเค้าร่าง เช่นเดียวกับที่ ring-offset-* ใช้ควบคุมวงแหวน ค่าบวกจะดันเส้นขอบเค้าร่างออกด้านนอก ส่วนค่าลบจะดึงเข้าด้านใน ยูทิลิตีนี้มีประโยชน์สำหรับสร้างรูปแบบโฟกัสที่โดดเด่นและยังคงเว้นระยะจากขอบขององค์ประกอบโดยไม่ส่งผลต่อการจัดวาง เพราะเส้นขอบเค้าร่างไม่ส่งผลต่อเลย์เอาต์ใน CSS

<!-- outline-offset creates space between element and outline -->
<div class="flex gap-6 p-6">
  <button class="bg-blue-500 text-white px-4 py-2 rounded outline outline-2 outline-blue-500 outline-offset-0">
    offset-0
  </button>
  <button class="bg-blue-500 text-white px-4 py-2 rounded outline outline-2 outline-blue-500 outline-offset-2">
    offset-2
  </button>
  <button class="bg-blue-500 text-white px-4 py-2 rounded outline outline-2 outline-blue-500 outline-offset-4">
    offset-4
  </button>
</div>

แนวปฏิบัติที่ดี: ตัวแปร focus-visible

รูปแบบ focus-visible:ring-* จะแสดงวงแหวนโฟกัสเฉพาะเมื่อใช้การนำทางด้วยแป้นพิมพ์ ไม่แสดงเมื่อคลิกด้วยเมาส์ วิธีนี้ช่วยแก้ความขัดแย้งด้านประสบการณ์ผู้ใช้ระหว่างนักออกแบบ ซึ่งไม่ต้องการให้เห็นวงแหวนเมื่อคลิกด้วยเมาส์ กับข้อกำหนดด้านการเข้าถึงที่กำหนดให้ผู้ใช้แป้นพิมพ์ต้องเห็นสถานะโฟกัส ในโครงการ Tailwind สมัยใหม่ ควรเลือกใช้ focus-visible:ring-2 แทน focus:ring-2 เสมอ

<!-- focus-visible: best practice for modern a11y -->
<div class="flex gap-4">
  <!-- Ring shows for keyboard, hidden for mouse -->
  <button class="bg-blue-500 text-white px-4 py-2 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2">
    Smart Focus Ring
  </button>

  <!-- Compare: always visible on any focus -->
  <button class="bg-gray-500 text-white px-4 py-2 rounded-lg focus:outline-none focus:ring-2 focus:ring-gray-500 focus:ring-offset-2">
    Always Visible Ring
  </button>
</div>

วงแหวนในองค์ประกอบแบบโต้ตอบ

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

<!-- Color picker with ring-based selection indicator -->
<div class="flex gap-3">
  <!-- Selected: shows inset ring -->
  <button class="w-10 h-10 rounded-full bg-blue-500 ring-2 ring-blue-500 ring-offset-2" aria-label="Blue (selected)"></button>
  <!-- Unselected swatches -->
  <button class="w-10 h-10 rounded-full bg-purple-500 hover:ring-2 hover:ring-purple-500 hover:ring-offset-2 transition-all" aria-label="Purple"></button>
  <button class="w-10 h-10 rounded-full bg-green-500 hover:ring-2 hover:ring-green-500 hover:ring-offset-2 transition-all" aria-label="Green"></button>
  <button class="w-10 h-10 rounded-full bg-red-500 hover:ring-2 hover:ring-red-500 hover:ring-offset-2 transition-all" aria-label="Red"></button>
</div>

การใช้วงแหวน เงา และเส้นขอบร่วมกัน

เนื่องจากวงแหวนสร้างขึ้นด้วย box-shadow คุณจึงใช้ร่วมกับยูทิลิตีเงาอื่น ๆ ของ Tailwind ได้ โดยระบุคลาสเงาและวงแหวนทั้งสองรายการ พร็อพเพอร์ตี box-shadow รองรับการซ้อนค่าหลายค่า จึงทำให้การ์ดมีทั้งเงาที่บ่งบอกระดับความลอยตัว และวงแหวนโฟกัสพร้อมกันได้ ทำให้ตัวบ่งชี้การโต้ตอบไม่บดบังความลึกเชิงภาพ

<!-- Card that keeps its shadow AND gets a ring on focus -->
<div class="p-6">
  <button class="w-full text-left bg-white rounded-xl shadow-md border border-gray-200 p-5 focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 focus-visible:ring-offset-2 hover:shadow-lg transition-shadow">
    <h3 class="font-bold">Clickable Card</h3>
    <p class="text-gray-500 text-sm mt-1">Has shadow + focus ring when keyboard focused.</p>
  </button>
</div>

ตรวจสอบความเข้าใจ

ทดสอบความเข้าใจแนวคิด Tailwind CSS Mastery จากบทเรียนนี้

ทบทวนบทเรียน

ในบทเรียนนี้ คุณได้เรียนรู้ว่า ยูทิลิตี ring-* สร้างตัวบ่งชี้โฟกัสที่เข้าถึงได้โดยใช้ box-shadow โดยไม่ส่งผลต่อเลย์เอาต์ ring-offset-* เพิ่มระยะห่างเชิงภาพระหว่างองค์ประกอบกับวงแหวนโฟกัส และ focus-visible:ring-* เป็นแนวปฏิบัติมาตรฐานสมัยใหม่ที่แสดงวงแหวนเฉพาะสำหรับผู้ใช้แป้นพิมพ์ บทถัดไป เราจะสำรวจตัวแปรสถานะโฮเวอร์และแอกทีฟสำหรับการจัดรูปแบบแบบโต้ตอบ

เริ่มต้นได้ฟรี

เรียนรู้ HTML ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “ยูทิลิตีเส้นขอบรอบนอกและวงแหวน” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ยูทิลิตีเส้นขอบรอบนอกและวงแหวน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Tailwind CSS Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Tailwind CSS Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ยูทิลิตีเส้นขอบรอบนอกและวงแหวน”

เพิ่มตัวบ่งชี้โฟกัสที่เข้าถึงได้ด้วยยูทิลิตี ring-* ซึ่งแสดงอยู่นอกองค์ประกอบโดยไม่กระทบการจัดวาง คุณปฏิบัติ Tailwind CSS Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Tailwind CSS Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Tailwind CSS Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ยูทิลิตีเส้นขอบรอบนอกและวงแหวน” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Tailwind CSS Academy นี้ได้ไหม

ได้ บทเรียน Tailwind CSS Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ความกว้างและสีเส้นขอบ
  2. รัศมีเส้นขอบและมุมมน
  3. เงากล่อง
  4. ยูทิลิตีเส้นขอบรอบนอกและวงแหวน
← กลับไปที่ Tailwind CSS Academy