ToolHub
View All Posts

การออกแบบเว็บ Dark Mode: แนวทางปฏิบัติที่ดีที่สุดและคู่มือการนำไปใช้

Dark Mode ได้พัฒนาจากความชอบของนักพัฒนามาเป็นความคาดหวังด้านการออกแบบกระแสหลัก นักพัฒนามากกว่า 80% ใช้ Dark Mode ใน IDE ของตน และระบบปฏิบัติการหลักทั้งหมดมีธีมมืดระดับระบบแล้ว ผู้ใช้คาดหวังให้เว็บไซต์และแอปเคารพความต้องการของพวกเขา คู่มือนี้ครอบคลุมหลักการออกแบบ ทฤษฎีสี การนำไปใช้ด้วย CSS และข้อควรพิจารณาด้านการเข้าถึงที่จำเป็นสำหรับการสร้างประสบการณ์ Dark Mode ที่มีประสิทธิภาพ

ทำไม Dark Mode จึงสำคัญ

Dark Mode ไม่ใช่แค่ทางเลือกด้านความสวยงาม แต่มันให้ประโยชน์ที่จับต้องได้แก่ผู้ใช้ ในสภาพแวดล้อมที่มีแสงน้อย พื้นหลังสีเข้มช่วยลดความเมื่อยล้าของดวงตาโดยลดปริมาณแสงที่หน้าจอปล่อยออกมา สำหรับหน้าจอ OLED และ AMOLED พิกเซลสีเข้มใช้พลังงานน้อยกว่าพิกเซลสว่างมาก ช่วยยืดอายุแบตเตอรี่ของอุปกรณ์มือถือ Dark Mode ยังสร้างลำดับชั้นทางสายตาผ่าน contrast ดึงดูดความสนใจไปยังเนื้อหาและองค์ประกอบเชิงโต้ตอบ

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

ทฤษฎีสีสำหรับ Dark Mode

ข้อผิดพลาดที่พบบ่อยที่สุดในการออกแบบ Dark Mode คือการกลับสีจากธีมสว่างง่ายๆ วิธีการนี้ล้มเหลวเพราะการรับรู้สีเปลี่ยนแปลงบนพื้นหลังสีเข้ม สีที่ดูสดใสบนพื้นขาวอาจดูจ้าเกินไปหรือรุนแรงบนพื้นผิวสีเข้ม ในขณะที่ความแตกต่างเล็กน้อยในเงาสีอ่อนจะมองไม่เห็นบนสีเข้ม

สีพื้นหลัง

หลีกเลี่ยงการใช้สีดำล้วน (#000000) เป็นพื้นหลัง สีดำล้วนสร้าง contrast มากเกินไปกับข้อความสีขาว ทำให้เมื่อยล้าดวงตา ให้ใช้สีเทาเข้มที่มีโทนสีเล็กน้อยแทน เพื่อเพิ่มความลึกและความน่าสนใจทางสายตา

ระดับพื้นหลังสีกรณีใช้งาน
ฐาน#0f172aพื้นหลังหน้า
พื้นผิว#1e293bการ์ด, Modal
ยกขึ้น#334155สถานะ Hover, Dropdown Menu
Overlayrgba(0,0,0,0.5)พื้นหลัง Modal

สีข้อความ

ในทำนองเดียวกัน หลีกเลี่ยงการใช้สีขาวล้วน (#ffffff) สำหรับข้อความเนื้อหา ใช้โทนสีขาวนวลที่รักษาความสามารถในการอ่านในขณะที่ลดแสงจ้า เก็บสีขาวล้วนไว้สำหรับหัวเรื่องและการเน้น

สีเน้น

สีเน้นมักต้องปรับแต่งสำหรับ Dark Mode สีที่มีความอิ่มตัวสูงที่ทำงานได้ดีบนพื้นหลังสีขาวอาจดูเหมือนสั่นไหวบนพื้นผิวสีเข้ม ลดความอิ่มตัวของสีเน้นเล็กน้อยและเพิ่มความสว่างเพื่อรักษาการมองเห็นโดยไม่ทำให้เกิดความเมื่อยล้าทางสายตา

การนำไปใช้ด้วย CSS

วิธีการ Dark Mode ที่บำรุงรักษาง่ายที่สุดคือการใช้ CSS Custom Properties (ตัวแปร) ร่วมกับ prefers-color-scheme media query ซึ่งช่วยให้คุณกำหนดสีเพียงครั้งเดียวและสลับธีมโดยการเปลี่ยนค่าตัวแปร

การใช้ CSS Custom Properties

:root {
  --bg: #f8fafc;
  --bg-card: #ffffff;
  --text: #1e293b;
  --text-muted: #64748b;
  --primary: #3b82f6;
  --border: #e2e8f0;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #0f172a;
    --bg-card: #1e293b;
    --text: #e2e8f0;
    --text-muted: #94a3b8;
    --primary: #60a5fa;
    --border: #334155;
  }
}

body {
  background: var(--bg);
  color: var(--text);
}

การสลับด้วยตนเองโดยใช้ JavaScript

แม้ว่า prefers-color-scheme จะจัดการความต้องการของระบบ ผู้ใช้ก็ยังต้องการการสลับด้วยตนเอง เก็บความต้องการใน localStorage และนำไปใช้ผ่าน data attribute บน root element

function toggleTheme() {
  const current = document.documentElement.dataset.theme;
  const next = current === 'dark' ? 'light' : 'dark';
  document.documentElement.dataset.theme = next;
  localStorage.setItem('theme', next);
}

// On page load
const saved = localStorage.getItem('theme');
if (saved) {
  document.documentElement.dataset.theme = saved;
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
  document.documentElement.dataset.theme = 'dark';
}

จากนั้นใช้ attribute selector ใน CSS ร่วมกับวิธีการ media query:

[data-theme="dark"] {
  --bg: #0f172a;
  --bg-card: #1e293b;
  --text: #e2e8f0;
}

การจัดการลำดับชั้นและความลึก

ใน Light Mode เงาสื่อถึงลำดับชั้น ใน Dark Mode เงาจะมองเห็นได้น้อยบนพื้นผิวสีเข้ม ให้ใช้สีพื้นหลังที่ค่อยๆ สว่างขึ้นเพื่อแสดงลำดับชั้นแทน แต่ละชั้นควรสว่างกว่าชั้นล่างเล็กน้อย สร้างลำดับชั้นทางสายตาที่เลียนแบบแสงตกกระทบบนพื้นผิวที่ยกขึ้น

รูปภาพและสื่อใน Dark Mode

รูปภาพที่สว่างอาจดูโดดเกินไปบนพื้นหลังสีเข้ม ใช้ CSS filter เพื่อลดความสว่างของรูปภาพเล็กน้อยใน Dark Mode สำหรับ logo และไอคอน ให้เตรียมเวอร์ชันสีอ่อน

[data-theme="dark"] img {
  filter: brightness(0.9);
}

[data-theme="dark"] .logo-dark {
  display: inline-block;
}

[data-theme="dark"] .logo-light {
  display: none;
}

ข้อควรพิจารณาด้านการเข้าถึง

Dark Mode ต้องเป็นไปตามมาตรฐานการเข้าถึงเดียวกันกับ Light Mode หลักเกณฑ์ WCAG 2.1 ต้องการ contrast ขั้นต่ำ 4.5:1 สำหรับข้อความปกติ และ 3:1 สำหรับข้อความขนาดใหญ่ ใช้เครื่องมือตรวจสอบ contrast เพื่อทดสอบธีมมืดของคุณและรับรองการปฏิบัติตาม

ข้อผิดพลาด Dark Mode ที่พบบ่อย

ต้องการตรวจสอบ contrast ของการออกแบบ Dark Mode หรือไม่? ลองใช้เครื่องมือตรวจสอบ contrast ฟรีของเรา เพื่อให้แน่ใจว่าสีของคุณเป็นไปตามมาตรฐานการเข้าถึง WCAG

ตรวจสอบ Contrast ทันที

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

ควรใช้สีดำล้วนสำหรับพื้นหลัง Dark Mode หรือไม่?

ไม่ควร สีดำล้วน (#000000) มี contrast กับข้อความสีขาวมากเกินไป ทำให้เมื่อยล้าดวงตาและเกิดเอฟเฟกต์ฮาโล ใช้สีเทาเข้มเช่น #121212, #1e293b หรือ #0f172a แทน สีเหล่านี้ให้ contrast ที่เพียงพอสำหรับการอ่าน ในขณะที่อ่อนโยนต่อดวงตามากกว่า

จะตรวจจับความต้องการ Dark Mode ของผู้ใช้ใน CSS ได้อย่างไร?

ใช้ prefers-color-scheme media query: @media (prefers-color-scheme: dark) { /* สไตล์ Dark Mode */ } ซึ่งจะใช้สไตล์มืดโดยอัตโนมัติเมื่อผู้ใช้เปิดใช้งาน Dark Mode ในการตั้งค่าระบบปฏิบัติการ

ข้อความ Dark Mode ควรมี contrast เท่าใด?

WCAG 2.1 ต้องการ contrast ขั้นต่ำ 4.5:1 สำหรับข้อความปกติ และ 3:1 สำหรับข้อความขนาดใหญ่ ใน Dark Mode ใช้ข้อความสีเทาอ่อน (#e2e8f0 หรือ #f1f5f9) บนพื้นหลังสีเข้มแทนสีขาวล้วน เพื่อลดแสงจ้าในขณะที่รักษา contrast ที่เพียงพอ

Dark Mode ควรเป็นตัวเลือกเริ่มต้นหรือไม่?

ใช้ prefers-color-scheme เพื่อทำตามความต้องการของระบบผู้ใช้ หากไม่พบความต้องการ Light Mode เป็นตัวเลือกเริ่มต้นที่ปลอดภัยกว่า เพราะมีความเข้ากันได้กว้างกว่าและผู้ใช้ส่วนใหญ่ชอบ Light Mode เมื่อใช้งานในเวลากลางวัน จัดให้มีปุ่มสลับเสมอเพื่อให้ผู้ใช้สามารถสลับด้วยตนเอง

จะจัดการรูปภาพใน Dark Mode อย่างไร?

ใช้ CSS filter: brightness(0.9) ใน Dark Mode เพื่อลดความสว่างของรูปภาพเล็กน้อย ป้องกันไม่ให้ดูสว่างเกินไปบนพื้นหลังสีเข้ม สำหรับ logo และไอคอน ให้เตรียมเวอร์ชันสีอ่อน พิจารณาใช้การปรับความโปร่งใสสำหรับรูปภาพตกแต่ง