การสลับโหมดมืดอัตโนมัติและด้วยตนเอง
สร้างตัวสลับธีมที่เคารพการตั้งค่าของระบบเป็นค่าเริ่มต้น และให้ผู้ใช้เปลี่ยนการตั้งค่าได้ด้วยตนเอง
การสลับโหมดมืดอัตโนมัติและด้วยตนเอง เป็นบทเรียน CSS Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CSS Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CSS Academy มีบทเรียนทั้งหมด 4 บทเรียน
เป้าหมาย
การใช้งานโหมดมืดในอุดมคติจะตรวจจับการตั้งค่าของ OS โดยอัตโนมัติเป็นค่าเริ่มต้น และมีปุ่มสลับที่ให้ผู้ใช้แทนที่การตั้งค่านั้นได้อย่างอิสระ โดยบันทึกการตั้งค่าไว้แม้โหลดหน้าเว็บใหม่
ภาพรวมสถาปัตยกรรม
มีสามสถานะที่ต้องจัดการ:
- การตั้งค่าของระบบ: ใช้
prefers-color-schemeร่วมกับตัวแปร CSS - การแทนที่ของผู้ใช้: มืด: ตั้งคลาสหรือแอตทริบิวต์ข้อมูลบน
<html> - การแทนที่ของผู้ใช้: สว่าง: ตั้งคลาสอื่นเพื่อป้องกันโหมดมืดอัตโนมัติ
การตั้งค่าโทเค็น 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"><!-- In <head>, before any styles -->
<script>
const t = localStorage.getItem("theme");
if (t) document.documentElement.dataset.theme = t;
</script></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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- มีเดียคิวรี prefers-color-scheme
- ตัวแปร CSS สำหรับธีม
- คุณสมบัติ color-scheme
- การสลับโหมดมืดอัตโนมัติและด้วยตนเอง