0Pricing
CSS Academy · บทเรียน

การสลับโหมดมืดอัตโนมัติและด้วยตนเอง

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

การสลับโหมดมืดอัตโนมัติและด้วยตนเอง เป็นบทเรียน CSS Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CSS Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CSS Academy มีบทเรียนทั้งหมด 4 บทเรียน

เป้าหมาย

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

ภาพรวมสถาปัตยกรรม

มีสามสถานะที่ต้องจัดการ:

  1. การตั้งค่าของระบบ: ใช้ prefers-color-scheme ร่วมกับตัวแปร CSS
  2. การแทนที่ของผู้ใช้: มืด: ตั้งคลาสหรือแอตทริบิวต์ข้อมูลบน <html>
  3. การแทนที่ของผู้ใช้: สว่าง: ตั้งคลาสอื่นเพื่อป้องกันโหมดมืดอัตโนมัติ

การตั้งค่าโทเค็น CSS

กำหนดตัวแปร CSS ที่เรียงลำดับการสืบทอดได้อย่างถูกต้องสำหรับทุกสถานะ:

<div class="demo" data-theme="dark">Dark token demo</div>
<div class="demo" data-theme="light">Light token demo</div>

ตรรกะการสลับด้วย JavaScript

อ่านการตั้งค่าที่บันทึกไว้ ใช้การตั้งค่านั้น และอัปเดตเมื่อมีการสลับ:

<div class="demo" id="theme-demo">Toggle my theme</div>
<div class="demo" data-theme="dark">Dark override example</div>
<button id="toggle-btn">Toggle Theme</button>
<script>
  function toggleTheme() {
    const current = document.getElementById('theme-demo').dataset.theme;
    const system = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
    if (!current) {
      const next = system === 'dark' ? 'light' : 'dark';
      document.getElementById('theme-demo').dataset.theme = next;
    } else {
      delete document.getElementById('theme-demo').dataset.theme;
    }
  }
  document.getElementById('toggle-btn').addEventListener('click', toggleTheme);
</script>

การสลับสามสถานะ

การสลับสามสถานะที่ละเอียดขึ้น: สว่าง | ระบบ | มืด:

<div class="demo" id="theme-demo">Cycles: light → system → dark</div>
<div class="demo" data-theme="dark">Dark state example</div>
<p id="state-label">system</p>
<button id="cycle-btn">Cycle Theme</button>
<script>
  const states = ['light', 'system', 'dark'];
  let current = 'system';
  const demo = document.getElementById('theme-demo');
  const label = document.getElementById('state-label');
  document.getElementById('cycle-btn').addEventListener('click', () => {
    current = states[(states.indexOf(current) + 1) % states.length];
    label.textContent = current;
    if (current === 'system') { delete demo.dataset.theme; } else { demo.dataset.theme = current; }
  });
</script>

การป้องกันการกะพริบของธีมที่ไม่ถูกต้อง

ใช้ธีมที่บันทึกไว้แบบ同步ก่อนที่หน้าจะแสดงผล:

<pre class="code-sample">&lt;!-- In &lt;head&gt;, before any styles --&gt;
&lt;script&gt;
  const t = localStorage.getItem("theme");
  if (t) document.documentElement.dataset.theme = t;
&lt;/script&gt;</pre>

การเข้าถึงปุ่มสลับ

ปุ่มสลับควรสื่อสารสถานะปัจจุบันให้โปรแกรมอ่านหน้าจอทราบ อัปเดตป้ายกำกับเพื่อการเข้าถึงเมื่อมีการสลับ:

<button id="theme-toggle" aria-label="Switch to dark mode">🌙</button>

การเปลี่ยนธีมแบบเคลื่อนไหว

เปลี่ยนสีอย่างราบรื่นเมื่อธีมเปลี่ยน:

<div class="demo" id="at-demo">Smooth theme transition</div>
<button onclick="document.documentElement.classList.add('theme-transitioning'); const d=document.getElementById('at-demo'); const dark = d.style.background==='rgb(17, 17, 17)'; d.style.background = dark ? '#fff' : '#111'; d.style.color = dark ? '#111' : '#fff'; setTimeout(()=>document.documentElement.classList.remove('theme-transitioning'),250);">Toggle</button>

การรับฟังการเปลี่ยนแปลงของระบบ

ควรตอบสนองด้วยหากผู้ใช้เปลี่ยนการตั้งค่า OS ขณะที่หน้าเว็บเปิดอยู่:

<p id="status">Listening for system theme changes…</p>
<script>
  window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => {
    document.getElementById('status').textContent = 'System changed to ' + (e.matches ? 'dark' : 'light');
  });
</script>

ไอคอนโหมดมืด

สลับไอคอนสำหรับแต่ละโหมด ใช้องค์ประกอบ picture สำหรับรูปภาพที่ปรับตามธีม หรือใช้ CSS เพื่อแสดงและซ่อนไอคอนที่แตกต่างกัน:

<div>Light: <span class="icon-sun">☀️</span><span class="icon-moon">🌙</span></div>
<div data-theme="dark">Dark: <span class="icon-sun">☀️</span><span class="icon-moon">🌙</span></div>

สรุป: รายการตรวจสอบการใช้งาน

รายการตรวจสอบโหมดมืด:

  • ตัวแปร CSS สำหรับโทเค็นสีทั้งหมด
  • มีเดียคิวรี prefers-color-scheme สำหรับการตรวจจับอัตโนมัติ
  • แอตทริบิวต์ data-theme สำหรับการแทนที่ด้วยตนเอง
  • localStorage สำหรับการบันทึกการตั้งค่า
  • สคริปต์แบบแทรกใน head เพื่อป้องกันการกะพริบ
  • ปุ่มสลับที่เข้าถึงได้พร้อม aria-label แบบไดนามิก

ตรวจสอบความเข้าใจ

เทคนิคใดช่วยป้องกัน "การกะพริบของธีมที่ไม่ถูกต้อง" เมื่อโหลดหน้าเว็บ

สรุป

การสลับโหมดมืดที่สมบูรณ์ใช้ตัวแปร CSS สำหรับโทเค็นธีม ใช้คิวรี prefers-color-scheme สำหรับการตรวจจับอัตโนมัติ ใช้แอตทริบิวต์ data-theme สำหรับการแทนที่ด้วยตนเอง ใช้ localStorage เพื่อบันทึกการตั้งค่า และใช้สคริปต์ใน head ที่ทำงานแบบ同步เพื่อป้องกันการกะพริบ ควรมีการสลับสามสถานะที่เข้าถึงได้ (สว่าง/ระบบ/มืด) เพื่อประสบการณ์ใช้งานที่ดีที่สุด

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

บทเรียน “การสลับโหมดมืดอัตโนมัติและด้วยตนเอง” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสลับโหมดมืดอัตโนมัติและด้วยตนเอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CSS Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CSS Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสลับโหมดมืดอัตโนมัติและด้วยตนเอง”

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

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CSS Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน CSS Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การสลับโหมดมืดอัตโนมัติและด้วยตนเอง” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน CSS Academy นี้ได้ไหม

ได้ บทเรียน CSS Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. มีเดียคิวรี prefers-color-scheme
  2. ตัวแปร CSS สำหรับธีม
  3. คุณสมบัติ color-scheme
  4. การสลับโหมดมืดอัตโนมัติและด้วยตนเอง
← กลับไปที่ CSS Academy