← Back to HTML Course | Chapter 8: Modern HTML & Components | Lesson 2 of 10

HTML Dark Mode

सोचिए आप पूरी तरह अंधेरे कमरे में एक चमकदार टैबलेट स्क्रीन पर कुछ पढ़ रहे हैं। चमकदार सफेद बैकग्राउंड आपकी आँखों को नुकसान पहुंचा सकता है और दबाव पैदा कर सकता है। HTML Dark Mode इस समस्या को हल करता है। यह एक डिज़ाइन सेटिंग है, जो आपके वेबपेज के रंगों को यूज़र की सिस्टम प्रेफरेंस या मैन्युअल थीम चुनाव के हिसाब से अपने-आप एडजस्ट करने देती है। कम रोशनी वाले वातावरण में डार्क बैकग्राउंड और आरामदायक टेक्स्ट कंट्रास्ट इस्तेमाल करने के लिए अपने कलर स्कीम्स को एडजस्ट करके, आप अपने रीडर्स की आँखों की सुरक्षा करते हैं और मोबाइल डिवाइसेस पर बैटरी की खपत कम करते हैं।
Syntax
markup
<meta name="color-scheme" content="light dark">
<style>
  @media (prefers-color-scheme: dark) {
    selector { property: value; }
  }
</style>

सिस्टम प्रेफरेंस को सुनना

आप prefers-color-scheme मीडिया क्वेरी का उपयोग करके यह पता लगा सकते हैं कि यूज़र ने अपनी डिवाइस सेटिंग्स में डार्क मोड इनेबल किया है या नहीं। यह आपकी CSS स्टाइलशीट को बिना किसी JavaScript स्क्रिप्ट की ज़रूरत के अपने-आप अपने रंग एडजस्ट करने देता है।

Note: prefers-color-scheme मीडिया क्वेरीज़ का उपयोग करके अपनी वेबसाइट के लेआउट्स को डार्क मोड सिस्टम्स के लिए अपने-आप डिज़ाइन करें।
Warning: सिस्टम प्रेफरेंस चेक न करने पर उन यूज़र्स पर भी चमकदार सफेद लेआउट थोपा जा सकता है जो आरामदायक डार्क थीम पसंद करते हैं।

उदाहरण: Listening to System Preferences

markup
<style>
  @media (prefers-color-scheme: dark) {
    body {
      background-color: black;
      color: white;
    }
  }
</style>

color-scheme Meta टैग

color-scheme meta टैग ब्राउज़र को बताता है कि आपका वेबपेज लाइट और डार्क दोनों थीम्स सपोर्ट करता है। यह ब्राउज़र को नेटिव एलिमेंट्स (जैसे scrollbars, form buttons, और input fields) को पेज थीम से मैच करने के लिए अपने-आप एडजस्ट करने का निर्देश देता है।

Note: यह सुनिश्चित करने के लिए कि ब्राउज़र इसे जल्दी लोड करे, color-scheme meta टैग को अपने head सेक्शन में सबसे ऊपर रखें।
Warning: यह मेटा टैग घोषित न करने पर अन्यथा डार्क पेज पर स्क्रॉलबार चमकदार सफेद रंग में दिख सकते हैं।

उदाहरण: The color-scheme Meta Tag

markup
<head>
  <meta name="color-scheme" content="light dark">
</head>

CSS Variables से Dynamic Colors

हर एलिमेंट के लिए डुप्लीकेट स्टाइल रूल्स लिखने के बजाय, आप root सिलेक्टर के अंदर CSS custom properties (variables) का उपयोग करके अपने पेज के रंग परिभाषित कर सकते हैं। थीम्स बदलने के लिए, आप बस अपने variables को एक ही सेंट्रल जगह पर अपडेट करते हैं।

Note: अपने डार्क मोड थीम्स को अपडेट और मेंटेन करना तेज़ और आसान बनाने के लिए CSS variables का उपयोग करें।
Warning: अपने कंटेंट को पठनीय बनाए रखने के लिए सुनिश्चित करें कि आपके कलर वैरिएबल्स दोनों थीम्स में हाई कंट्रास्ट रखें।

उदाहरण: Dynamic Colors with CSS Variables

markup
<style>
  :root {
    --bg-color: white;
    --text-color: black;
  }
  body {
    background-color: var(--bg-color);
    color: var(--text-color);
  }
</style>

Data Attributes से थीम्स टॉगल करना

जहाँ सिस्टम प्रेफरेंसेस सुविधाजनक हैं, वहीं यूज़र्स को अक्सर थीम्स बदलने के लिए एक मैनुअल टॉगल बटन भी चाहिए होता है।

आप अपने HTML टैग पर एक कस्टम data एट्रिब्यूट (जैसे data-theme="dark") लगाने के लिए JavaScript का उपयोग करके, और उस एट्रिब्यूट को अपने CSS के अंदर स्टाइल करके इसे हैंडल कर सकते हैं।

Note: यूज़र की मैनुअल थीम चुनाव को localStorage में सेव करें ताकि उनकी प्रेफरेंस विज़िट्स के बीच बनी रहे।
Warning: सुनिश्चित करें कि आपका मैन्युअल टॉगल बटन उन कीबोर्ड यूज़र्स के लिए भी accessible हो जो माउस से नेविगेट नहीं कर सकते।

उदाहरण: Toggling Themes with Data Attributes

markup
<html data-theme="dark">
</html>
<style>
  [data-theme="dark"] { background-color: black; }
</style>

Image और Vector Flash को रोकना

चमकीली सफेद इमेजेज़ और इलस्ट्रेशन्स डार्क पेज पर कर्कश (jarring) दिख सकते हैं। आप अपनी इमेजेज़ को थोड़ा धीमा करने या डार्क मोड में आइकन्स को इनवर्ट करने के लिए CSS फिल्टर्स का उपयोग कर सकते हैं, ताकि वे बहुत ज़्यादा चमकीले न लगें।

Note: अपनी इमेजेज़ की चमक को नरम करने और उन्हें पेज में अच्छी तरह ब्लेंड करने के लिए डार्क मोड में उन पर हल्का opacity फिल्टर लगाएँ।
Warning: स्टैंडर्ड फोटोग्राफिक इमेजेस को इनवर्ट न करें, क्योंकि इससे उनके रंग बिगड़ जाएंगे और वे नेगेटिव जैसी दिखने लगेंगी।

उदाहरण: Preventing Image and Vector Flash

markup
<style>
  [data-theme="dark"] img {
    filter: brightness(0.8);
  }
</style>

JavaScript से थीम चुनाव को पहचानना और सेव करना

सिर्फ सिस्टम प्रेफरेंस को अपने-आप फॉलो करने के अलावा, ज़्यादातर साइट्स यूज़र्स को एक टॉगल बटन से मैनुअली थीम ओवरराइड करने देती हैं, फिर उस चुनाव को localStorage का उपयोग करके याद रखती हैं ताकि यह विज़िट्स के बीच बना रहे, चाहे ऑपरेटिंग सिस्टम में जो भी सेट हो।

Note: पहले localStorage में सेव की गई प्रेफरेंस चेक करें, और सिस्टम के prefers-color-scheme सेटिंग पर तभी फॉलबैक करें जब यूज़र ने कभी मैनुअली कोई थीम न चुनी हो।
Warning: यूज़र की मैन्युअल थीम पसंद को सेव करना भूल जाने का मतलब है कि हर बार साइट पर दोबारा आने पर यह सिस्टम डिफॉल्ट पर रीसेट हो जाएगी, जो टूटा हुआ महसूस होता है।

उदाहरण: Detecting and Saving Theme Choice with JavaScript

markup
<script>
  const theme = localStorage.getItem('theme') || 'light';
  document.documentElement.setAttribute('data-theme', theme);
</script>
Live Example
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.