Skip to main content
ExodeUI

EXODEUI DESKTOP

A little space for good ideas.

Choose your platform to get the official ExodeUI installer.

Looking for Intel Mac or other builds? Explore the web studio or check all download options.

Prefer the browser? Try for free in your browser →
บทช่วยสอน · เว็บอ่าน 7 นาที·Updated ตุลาคม 2026·โดยทีม ExodeUI

การเปลี่ยนโหมดแสงและความมืดที่ราบรื่น: โทเค็น, CSS และการเคลื่อนไหว

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

สรุปโดยตรงและคำจำกัดความ

หลัก Takeaway

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

เริ่มจากการตั้งค่าระบบ

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

โทเค็นธีมสีอ่อนเปลี่ยนผ่านการเฟดสั้น ๆ หรือการดูการเปลี่ยนเป็นโทเค็นธีมสีเข้ม
สลับโทเค็นความหมายและตั้งค่าโครงร่างสี ทำให้การเปลี่ยนแปลงสั้นลง

ธีมที่มีโทเค็น ไม่ใช่การแทนที่

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

อย่าลืมการควบคุมแบบเนทีฟ

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

หลีกเลี่ยงแฟลชขณะโหลด

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

เคลื่อนไหวสวิตช์อย่างระมัดระวัง

cross-fade สั้นๆ ประมาณ 150 ถึง 250 มิลลิวินาที ทำให้การเปลี่ยนแปลงมีเจตนา หลีกเลี่ยงการเปลี่ยนทุกคุณสมบัติสีในทุกองค์ประกอบ ซึ่งอาจช้าในหน้าขนาดใหญ่ สแนปชอต View Transition เดียวมักจะราบรื่นกว่า ทำให้ตัวสลับชัดเจนพร้อมป้ายกำกับหรือคำแนะนำเครื่องมือ และลบภาพเคลื่อนไหวเมื่อเปิดการลดการเคลื่อนไหว

ตัวอย่างการใช้งานการผลิต

การใช้งานส่วนประกอบแบบโต้ตอบ
/* Tokens per theme */
:root { color-scheme: light dark; --surface: #ffffff; --text: #121212; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) { --surface: #121212; --text: #f2f2f2; }
}
:root[data-theme="dark"] { color-scheme: dark; --surface: #121212; --text: #f2f2f2; }
:root[data-theme="light"] { color-scheme: light; }

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

// Switch with a View Transition where supported, instantly otherwise
function setTheme(theme) {
  const apply = () => { document.documentElement.dataset.theme = theme; localStorage.setItem('theme', theme); };
  const reduce = matchMedia('(prefers-reduced-motion: reduce)').matches;
  if (!document.startViewTransition || reduce) return apply();
  document.startViewTransition(apply);
}

คีย์ Principles ที่ต้องจำ

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

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

แหล่งที่มา

  1. prefers-color-scheme — MDN เว็บเอกสาร
  2. color-scheme — MDN เว็บเอกสาร
  3. View Transition API — MDN เว็บเอกสาร

คำแนะนำและตัวอย่างที่เกี่ยวข้อง

ธีมสลับกับตัวละครจริง

เรียกดูปุ่มสลับภาพเคลื่อนไหวฟรี รวมถึงสวิตช์ดวงอาทิตย์และดวงจันทร์ และเปิดใน ExodeUI เพื่อปรับเปลี่ยน

เรียกดูส่วนประกอบสด
ลองฟรี