เครื่องสร้างแถบเลื่อน CSS

ถัดไป

แถบเลื่อนแบบกำหนดเองเคยเป็นฝันร้ายของพสูโดอิลิเมนต์ที่ต้องใส่คำนำหน้าตามผู้ผลิต แต่ปัจจุบัน scrollbar-color และ scrollbar-width รองรับกรณีทั่วไปในเบราว์เซอร์สมัยใหม่ทั้งหมด ทั้งความกว้างแบบแคบหรือแบบปกติ และธีมสองสี (ตัวเลื่อนและราง) สำหรับการควบคุมระดับพิกเซล (ระยะขอบภายในของราง รัศมีของตัวเลื่อน สถานะเมื่อชี้เมาส์) พสูโดอิลิเมนต์รุ่นเก่าอย่าง ::-webkit-scrollbar ยังใช้งานได้ใน Chrome และ Safari เครื่องมือนี้จะสร้างทั้งสองแบบและจัดลำดับการซ้อน (cascade) ให้ถูกต้อง

วิธีจัดรูปแบบแถบเลื่อน

  1. 1

    เลือกความกว้าง

    auto (ความกว้างเริ่มต้นของแพลตฟอร์ม), thin (แคบกว่า) หรือค่าพิกเซลที่เจาะจงผ่านกฎของ webkit

  2. 2

    ตั้งสีของตัวเลื่อนและราง

    `scrollbar-color` แบบสมัยใหม่รับค่าสองสี ส่วนกฎของ webkit ให้กำหนดสี รัศมี และสถานะเมื่อชี้เมาส์แยกกันได้

  3. 3

    เพิ่มเอฟเฟกต์เมื่อชี้เมาส์ (ไม่บังคับ)

    ตัวเลื่อนจะสว่างขึ้นเมื่อชี้เมาส์ ทำงานผ่าน `::-webkit-scrollbar-thumb:hover`

  4. 4

    กำหนดขอบเขต

    ใช้กับ `html` / `body` (ทั้งหน้า) หรือใช้เฉพาะกับคอนเทนเนอร์ที่เลื่อนได้ตัวใดตัวหนึ่ง

  5. 5

    คัดลอก CSS

    กฎแบบสมัยใหม่ผสานกับ webkit: ทำงานได้ในทุกเบราว์เซอร์สมัยใหม่ พร้อมการรองรับสำรองที่ราบรื่น

คุณสมบัติมาตรฐานสมัยใหม่ (2023 เป็นต้นไป)

/* Applies to the element that scrolls */
html {
  scrollbar-width: thin;           /* auto | thin | none */
  scrollbar-color: #4f46e5 #e5e7eb; /* thumb track */
}

การรองรับของเบราว์เซอร์ (2024):

  • scrollbar-width: Chrome 121+, Safari 18.2+, Firefox 64+
  • scrollbar-color: Chrome 121+, Safari 18.2+, Firefox 64+
  • scrollbar-gutter: stable: Chrome 94+, Safari 14+, Firefox 97+ จองพื้นที่ของแถบเลื่อนไว้แม้ในตอนที่ไม่จำเป็น จึงช่วยป้องกันการขยับของเลย์เอาต์

พสูโดอิลิเมนต์ของ webkit (Chrome, Safari, Edge รุ่นเก่า)

::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}
::-webkit-scrollbar-track {
  background: #e5e7eb;
  border-radius: 10px;
}
::-webkit-scrollbar-thumb {
  background: #4f46e5;
  border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
  background: #3730a3;
}

ควบคุมได้ละเอียดยิ่งขึ้น width กำหนดความกว้างของแถบเลื่อนแนวตั้ง ส่วน height กำหนดความสูงของแถบเลื่อนแนวนอน ให้ใส่ทั้งสองค่าสำหรับคอนเทนเนอร์ที่เลื่อนได้ทั้งสองทิศทาง

จัดลำดับการซ้อนทั้งสองแนวทาง

ระบุกฎแบบสมัยใหม่ก่อน แล้วจึงใช้ webkit เป็นส่วนเสริมสำหรับเบราว์เซอร์ที่แสดงผลได้ทั้งสองแบบ:

.scroll-area {
  scrollbar-width: thin;
  scrollbar-color: #4f46e5 #e5e7eb;
}
.scroll-area::-webkit-scrollbar       { width: 8px; }
.scroll-area::-webkit-scrollbar-track { background: #e5e7eb; }
.scroll-area::-webkit-scrollbar-thumb {
  background: #4f46e5;
  border-radius: 4px;
  border: 2px solid #e5e7eb;
}

Firefox จะยึดตามกฎ scrollbar-* แบบสมัยใหม่เท่านั้น ส่วน Chrome และ Safari จะยึดตามกฎของ webkit (ซึ่งเขียนทับกฎแบบสมัยใหม่ พฤติกรรมจึงสอดคล้องกัน)

scrollbar-gutter ป้องกันการขยับของเนื้อหา

หากไม่มีการจองช่องไว้ เนื้อหาจะจัดเรียงใหม่เมื่อแถบเลื่อนปรากฏขึ้น (พบได้บ่อยในรายการแบบไดนามิก) วิธีแก้:

html { scrollbar-gutter: stable; }
/* or */
html { scrollbar-gutter: stable both-edges; }

ช่องของแถบเลื่อนจะถูกจองไว้ไม่ว่าเนื้อหาจะเลื่อนหรือไม่ก็ตาม both-edges จะเพิ่มช่องที่เท่ากันไว้อีกฝั่งหนึ่ง เพื่อให้เนื้อหาอยู่กึ่งกลางในเชิงสายตา

ซ่อนแถบเลื่อนทั้งหมด

.no-scrollbar {
  scrollbar-width: none;           /* Firefox */
}
.no-scrollbar::-webkit-scrollbar { display: none; }  /* Chrome, Safari */

โปรดระวัง: การซ่อนแถบเลื่อนทำให้ผู้ใช้ไม่เห็นว่าเนื้อหาสามารถเลื่อนได้ ควรใช้เฉพาะเมื่อมีตัวบ่งชี้ที่ชัดเจน (ลูกศร จุดบอกหน้า) หรือเมื่อพฤติกรรมการเลื่อนชัดเจนจากบริบท (คารูเซลแนวนอน ประวัติการแชท)

ข้อควรพิจารณาสำหรับมือถือ

บน iOS และ Android แถบเลื่อนจะปรากฏเพียงชั่วครู่ระหว่างที่เลื่อน CSS แถบเลื่อนแบบกำหนดเองของคุณยังคงมีผล แต่ผู้ใช้อาจไม่เห็นมันนานเกินหนึ่งวินาที จงออกแบบให้เหมาะสม อย่าลงทุนมากเกินไปกับลูกเล่นทางสายตาที่แทบไม่ปรากฏ

การเข้าถึง

  • ความต่างของสี: ตัวเลื่อนเทียบกับรางควรได้อัตราส่วน 3:1 สำหรับความต่างของสีที่ไม่ใช่ข้อความ (WCAG 1.4.11)
  • ความกว้าง: แถบเลื่อนที่บางอาจจับด้วยเมาส์ได้ยาก โดยเฉพาะสำหรับผู้ใช้ที่มีข้อจำกัดด้านการเคลื่อนไหว ความกว้างปกติจึงเป็นค่าเริ่มต้นที่ปลอดภัยกว่า
  • อย่าเอาแถบเลื่อนออก จากพื้นที่ที่เลื่อนได้โดยเด็ดขาด หากไม่มีวิธีเลื่อนแบบอื่นให้ ผู้ใช้ที่พึ่งพาแถบเลื่อนจะติดขัด

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

ได้ ด้วยคุณสมบัติสมัยใหม่ scrollbar-width และ scrollbar-color Firefox ไม่รองรับพสูโดอิลิเมนต์ของ webkit ดังนั้นเพื่อให้ได้รูปลักษณ์ที่สอดคล้องกันในทุกเบราว์เซอร์ ให้ใช้คุณสมบัติสมัยใหม่ก่อน แล้วเพิ่มกฎของ webkit เป็นส่วนเสริม

เพราะแถบเลื่อนเริ่มต้นจะซ้อนทับเนื้อหาและไม่จองพื้นที่ไว้จนกว่าจะจำเป็น ให้ตั้งค่า scrollbar-gutter: stable บนองค์ประกอบที่เลื่อนได้ เพื่อจองช่องไว้เสมอ ซึ่งจะป้องกันการจัดเรียงใหม่เมื่อแถบเลื่อนปรากฏหรือหายไป

โดยทั่วไปควรซ่อน เพราะแถบเลื่อนดูไม่เข้ากันและแย่งความสนใจกับเนื้อหา ให้เพิ่มจุดบอกหน้าหรือปุ่มลูกศรที่มองเห็นได้ เพื่อให้ผู้ใช้ยังรู้ว่าเนื้อหาเลื่อนได้ และให้ปฏิบัติตาม prefers-reduced-motion หากใช้การดูดเข้าตำแหน่งขณะเลื่อน (scroll-snapping)

มีได้ แถบเลื่อนที่บางมากหรือมีความต่างของสีต่ำจะใช้งานยากสำหรับผู้ใช้ที่มีข้อจำกัดด้านการเคลื่อนไหวและผู้ที่สายตาเลือนราง ควรรักษาความกว้างของแถบเลื่อนไว้อย่างน้อย 8–10 px เพื่อให้จับได้สะดวก และคงความต่างของสีระหว่างตัวเลื่อนกับรางไว้ที่ 3:1

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

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

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

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

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

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

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

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

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

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

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

เครื่องมือตรวจสอบหมายเลขโทรศัพท์

ตรวจสอบโครงสร้างหมายเลขตามประเทศ พร้อมดูภูมิภาค ประเภท และรูปแบบ E.164 ระหว่างประเทศ ในประเทศ และ RFC 3966