ตัวสร้างแท็บส์ CSS

ถัดไป

แท็บมีอยู่ทั่วไปในหลายสถานที่ เช่น หน้าตั้งค่า เว็บไซต์เอกสาร และแกลเลอรีผลิตภัณฑ์ อย่างไรก็ตาม HTML แบบดั้งเดิมไม่มีองค์ประกอบแท็บเฉพาะตัว ทำให้นักพัฒนาต้องสร้างแท็บขึ้นมาเอง เครื่องมือนี้จะสร้างแถบแท็บอย่างง่ายด้วย HTML + CSS: สีเน้นสำหรับแท็บที่ใช้งานอยู่ รัศมีมุมโค้งของปุ่ม และสถานะเมื่อชี้เมาส์ วางโค้ดมาร์กอัปลงในโปรเจกต์ของคุณ แล้วเชื่อมต่อการสลับแท็บด้วย JavaScript ของคุณเอง

วิธีสร้างแท็บ

  1. 1

    เลือกสีเน้น

    สีพื้นหลังและสีข้อความของแท็บที่ใช้งานอยู่ เลือกสีที่เข้ากับแบรนด์ของคุณ

  2. 2

    ตั้งรัศมีมุมโค้ง

    ทำให้มุมบนของปุ่มแท็บโค้งมน ค่าที่สูงขึ้นให้ลุคที่นุ่มนวลขึ้น

  3. 3

    แก้ไขป้ายชื่อ

    ผลลัพธ์มีปุ่มสามปุ่ม ได้แก่ "Overview", "Details" และ "Settings" เปลี่ยนชื่อให้ตรงกับเนื้อหาของคุณ

  4. 4

    คัดลอกโค้ด

    โค้ดมาร์กอัปแท็บมาพร้อมบล็อก <style> ในตัว วางทั้งสองอย่างลงในหน้าเว็บของคุณ

  5. 5

    เพิ่มการสลับแท็บ

    เครื่องมือนี้สร้างเฉพาะส่วนที่มองเห็นเท่านั้น เชื่อมต่อปุ่มเข้ากับ JavaScript หรือไลบรารี UI ของคุณเองเพื่อแสดงและซ่อนแผงเนื้อหา

มาร์กอัปที่เข้าถึงได้อย่างถูกต้อง

<div class="tabs">
  <div role="tablist" aria-label="Product info">
    <button role="tab" id="tab-1" aria-selected="true"  aria-controls="panel-1" tabindex="0">Overview</button>
    <button role="tab" id="tab-2" aria-selected="false" aria-controls="panel-2" tabindex="-1">Specs</button>
    <button role="tab" id="tab-3" aria-selected="false" aria-controls="panel-3" tabindex="-1">Reviews</button>
  </div>
  <section role="tabpanel" id="panel-1" aria-labelledby="tab-1">...</section>
  <section role="tabpanel" id="panel-2" aria-labelledby="tab-2" hidden>...</section>
  <section role="tabpanel" id="panel-3" aria-labelledby="tab-3" hidden>...</section>
</div>

คุณสมบัติสำคัญ:

  • role="tablist" ใช้ห่อปุ่มต่าง ๆ
  • ปุ่มแต่ละตัวมี role="tab" พร้อม aria-selected และ aria-controls
  • tabindex ใช้รูปแบบ roving tabindex: มีเพียงแท็บที่กำลังทำงานเท่านั้นที่เป็น 0 ส่วนแท็บอื่น ๆ เป็น -1 โดยปุ่มลูกศรจะเลื่อนโฟกัสระหว่างแท็บเหล่านี้
  • แต่ละแผงมี role="tabpanel" โดย aria-labelledby จะชี้ไปยังแท็บของมัน
  • hidden บนแผงที่ไม่ได้ใช้งาน (ไม่ใช่เพียง display: none เท่านั้น, เทคโนโลยีสิ่งอำนวยความสะดวกใช้แอตทริบิวต์นี้)

ข้อกำหนดการใช้คีย์บอร์ด

ปุ่ม การทำงาน
Tab เข้า / ออกจากรายการแท็บ
ArrowLeft แท็บก่อนหน้า (วนไปยังแท็บสุดท้าย)
ArrowRight แท็บถัดไป (วนไปยังแท็บแรก)
Home แท็บแรก
End แท็บสุดท้าย
Enter / Space เปิดใช้งานแท็บที่โฟกัสอยู่ (เมื่อเปิดใช้งานด้วยตนเอง)

การเปิดใช้งานอัตโนมัติ (แท็บจะเปลี่ยนเมื่อโฟกัสเคลื่อนที่) เทียบกับการเปิดใช้งานด้วยตนเอง (เมื่อโฟกัสเคลื่อนที่ แท็บจะเปิดขึ้นเมื่อกด Enter), WAI-ARIA รองรับทั้งสองวิธี การใช้งานแบบอัตโนมัติเหมาะกว่าสำหรับผู้ใช้ที่มองเห็นได้ปกติ ในขณะที่การใช้งานแบบด้วยตนเองเหมาะสมกว่าเมื่อเนื้อหาในแท็บมีปริมาณมากและต้องแสดงผลอย่างละเอียด

สไตล์เส้นใต้

[role="tablist"] {
  display: flex;
  border-bottom: 1px solid #e5e7eb;
}
[role="tab"] {
  padding: 0.75rem 1rem;
  background: transparent;
  border: 0;
  color: #6b7280;
  position: relative;
  cursor: pointer;
}
[role="tab"][aria-selected="true"] {
  color: #111827;
}
[role="tab"][aria-selected="true"]::after {
  content: "";
  position: absolute;
  left: 1rem; right: 1rem; bottom: -1px;
  height: 2px;
  background: #2563eb;
}

สไตล์แคปซูล

[role="tab"] {
  padding: 0.5rem 0.9rem;
  border-radius: 9999px;
  border: 0;
  background: transparent;
}
[role="tab"][aria-selected="true"] {
  background: #2563eb;
  color: #fff;
}

โฟกัสที่มองเห็นได้

เมื่อโฟกัสมาจากคีย์บอร์ด ควรวาดวงแหวนโฟกัสเสมอ:

[role="tab"]:focus-visible {
  outline: 2px solid #60a5fa;
  outline-offset: 2px;
}

JavaScript

คร่าว ๆ:

const tabs = document.querySelectorAll('[role="tab"]');
tabs.forEach(tab => {
  tab.addEventListener('click', () => activate(tab));
  tab.addEventListener('keydown', e => {
    const i = [...tabs].indexOf(tab);
    if (e.key === 'ArrowRight') tabs[(i + 1) % tabs.length].focus();
    if (e.key === 'ArrowLeft')  tabs[(i - 1 + tabs.length) % tabs.length].focus();
    if (e.key === 'Home') tabs[0].focus();
    if (e.key === 'End')  tabs[tabs.length - 1].focus();
  });
});

function activate(tab) {
  tabs.forEach(t => {
    const panel = document.getElementById(t.getAttribute('aria-controls'));
    const active = t === tab;
    t.setAttribute('aria-selected', active);
    t.setAttribute('tabindex', active ? '0' : '-1');
    panel.hidden = !active;
  });
  tab.focus();
}

รวมทั้งหมด 30 บรรทัด ไม่มีการพึ่งพาไลบรารีใด ๆ

แท็บกับแอคคอร์เดียน

บนหน้าจอแคบ แถวแท็บจะดูอึดอัด รูปแบบที่พบบ่อยคือ: ใช้แท็บบนเดสก์ท็อป และใช้แอคคอร์เดียนบนมือถือ ควรใช้ container query หรือ media query เพื่อเปลี่ยนรูปแบบการแสดงผลโดยไม่ต้องเปลี่ยนบทบาท ARIA

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

สำหรับแท็บที่ใช้งานได้อย่างสะดวก ใช่ ในกรณีที่ไม่มีรหัส role="tablist" และ role="tab" โปรแกรมอ่านหน้าจอจะจัดการกับปุ่มเหล่านี้เหมือนปุ่มธรรมดา ส่งผลให้ผู้ใช้สูญเสียระบบการนำทางที่เป็นมาตรฐาน อีกทางเลือกคือการใช้รูปแบบปุ่มแบบแอคคอร์เดียนของ <details>/<summary> ซึ่งมีความหมายเฉพาะตัวถูกออกแบบไว้ล่วงหน้า

โหมดอัตโนมัติ (แท็บจะเปิดขึ้นเมื่อโฟกัสเคลื่อนที่) เหมาะสมสำหรับกรณีที่เนื้อหาในแต่ละแท็บไม่ซับซ้อนในการแสดงผล ส่วนโหมดแมนนวล (โฟกัสเคลื่อนที่ แล้วกด Enter เพื่อเปิดแท็บ) จะเหมาะสมกว่าเมื่อการสลับแท็บต้องใช้ทรัพยากรสูง เช่น การดึงข้อมูลหรือการแสดงผลแบบฟอร์มขนาดใหญ่

สำหรับแท็บที่มีเนื้อหา (เช่น แท็บเอกสารหรือแท็บผลิตภัณฑ์) ควรใช้แฮช (#specs) หรือพารามิเตอร์การค้นหา เพื่อให้ลิงก์สามารถนำไปยังแท็บเฉพาะได้อย่างแม่นยำ และแท็บที่กำลังใช้งานจะคงอยู่ต่อไปแม้หลังจากการรีโหลดหลายครั้ง ส่วนแท็บในส่วนอินเทอร์เฟซผู้ใช้ (เช่น แผงการตั้งค่า) ค่า URL เป็นตัวเลือก

ทำได้เฉพาะด้วยเทคนิค checkbox/radio เท่านั้น ซึ่งไม่มีการนำทางด้วยปุ่มลูกศรและขาดสถานะ ARIA แต่หากต้องการการใช้งานที่เข้าถึงได้อย่างแท้จริง โค้ด JS ขนาดเล็กนี้ก็คุ้มค่า หากต้องการทางเลือกสำรองที่เรนเดอร์ฝั่งเซิร์ฟเวอร์ ให้เชื่อมโยงแต่ละแท็บกับ URL เฉพาะ และเรนเดอร์แผงที่เกี่ยวข้องฝั่งเซิร์ฟเวอร์

เครื่องมือที่เกี่ยวข้อง

ตารางอ้างอิง ASCII

ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL

อ้างอิงตัวอักษร HTML

รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ

ตารางอ้างอิงแป้นพิมพ์ลัด

ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux

เครื่องสร้างตัวอักษรสุ่ม

สร้างตัวอักษร A-Z แบบสุ่ม เลือกจำนวน ตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก หรือแบบผสม แล้วใช้กับเกม โจทย์ หรือกิจกรรมในห้องเรียน

ตัวลดรูปพีชคณิตบูลีน

ประเมินนิพจน์บูลีนสำหรับทุกชุดอินพุตและดูตารางค่าความจริงที่สมบูรณ์ รองรับตัวแปรสูงสุดห้าตัวและตัวดำเนินการ &, |, !, ^

เครื่องมือสร้าง EditorConfig

สร้างไฟล์ .editorconfig ด้วยกฎสไตล์และขนาดการเยื้อง การจบบรรทัด ชุดอักขระ และช่องว่างของคุณ เพื่อให้การจัดรูปแบบสอดคล้องกันในทุก IDE และโปรแกรมแก้ไข

เครื่องมือนี้มีให้บริการในภาษาอื่น