ยูทิลิตีเส้นขอบรอบนอกและวงแหวน
เพิ่มตัวบ่งชี้โฟกัสที่เข้าถึงได้ด้วยยูทิลิตี ring-* ซึ่งแสดงอยู่นอกองค์ประกอบโดยไม่กระทบการจัดวาง
ยูทิลิตีเส้นขอบรอบนอกและวงแหวน เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ความกว้างและสีเส้นขอบ
- รัศมีเส้นขอบและมุมมน
- เงากล่อง
- ยูทิลิตีเส้นขอบรอบนอกและวงแหวน