<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tailwind CSS on kenji.blog</title><link>http://kenji.blog/hi/tags/tailwind-css/</link><description>Recent content in Tailwind CSS on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>hi</language><copyright>kenjinote</copyright><lastBuildDate>Sun, 13 Sep 2026 03:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/hi/tags/tailwind-css/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugo थीम कस्टमाइज़ेशन: Tailwind CSS को लागू करने का तरीका</title><link>http://kenji.blog/hi/p/hugo-tailwind-css-customization-guide/</link><pubDate>Sun, 13 Sep 2026 03:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/hugo-tailwind-css-customization-guide/</guid><description>&lt;img src="http://kenji.blog/p/hugo-tailwind-css-customization-guide/img/eyecatch.jpg" alt="Featured image of post Hugo थीम कस्टमाइज़ेशन: Tailwind CSS को लागू करने का तरीका" />&lt;h1 id="परचय-सटटक-सइट-जनरटर-hugo-और-tailwind-css-क-शकतशल-सनरज">परिचय: स्टैटिक साइट जनरेटर Hugo और Tailwind CSS की शक्तिशाली सिनर्जी
&lt;/h1>&lt;p>आधुनिक वेब फ्रंटएंड डेवलपमेंट में, प्रदर्शन और डेवलपमेंट अनुभव (DX: Developer Experience) के बीच संतुलन बनाए रखना हर प्रोजेक्ट की सबसे महत्वपूर्ण चुनौतियों में से एक है। स्टैटिक साइट जनरेटर्स (SSG) में दुनिया की सबसे तेज़ बिल्ड स्पीड वाले &lt;strong>Hugo&lt;/strong> और यूटिलिटी-फर्स्ट (utility-first) के अभिनव प्रतिमान (paradigm) को लाने वाले &lt;strong>Tailwind CSS&lt;/strong> का संयोजन, इस चुनौती का एक अंतिम समाधान कहा जा सकता है।&lt;/p>
&lt;p>Hugo को Go भाषा में लिखा गया है, और यह हजारों पेजों वाली साइटों को भी कुछ ही सेकंड या मिलीसेकंड में बिल्ड करने का अद्भुत प्रदर्शन प्रदान करता है। दूसरी ओर, Tailwind CSS पहले से परिभाषित अनगिनत यूटिलिटी क्लासेस (&lt;code>flex&lt;/code>, &lt;code>text-center&lt;/code>, &lt;code>mt-4&lt;/code> आदि) को सीधे HTML में लिखकर, CSS फाइल और HTML फाइल के बीच होने वाले कॉन्टेक्स्ट स्विच को खत्म करता है, और डिज़ाइन इटरेशन को तेज़ करता है।&lt;/p>
&lt;p>इस लेख में, हम Hugo थीम में Tailwind CSS को लागू करने और PostCSS का उपयोग करके एक उन्नत एसेट पाइपलाइन (Hugo Pipes) बनाने की प्रक्रिया को, आर्किटेक्चर के मूल से लेकर गणितीय प्रदर्शन अनुकूलन के दृष्टिकोण तक, विस्तार और गहराई से समझाएंगे।&lt;/p>
&lt;hr>
&lt;h2 id="1-यटलट-फरसट-css-और-कपनट-ओरएटड-दषटकण-क-वकस">1. यूटिलिटी-फर्स्ट CSS और कंपोनेंट-ओरिएंटेड दृष्टिकोण का विकास
&lt;/h2>&lt;p>Tailwind CSS को लागू करने की प्रक्रिया में जाने से पहले, हमें Tailwind CSS का उपयोग क्यों करना चाहिए, और इसके पीछे CSS डिज़ाइन दर्शन के इतिहास और विकास को गहराई से समझना बहुत फायदेमंद है।&lt;/p>
&lt;h3 id="परपरक-css-डजइन-bem-और-oocss-क-समए">पारंपरिक CSS डिज़ाइन (BEM और OOCSS) की सीमाएँ
&lt;/h3>&lt;p>अतीत के वेब विकास में, सिमेंटिक क्लास नाम देना एक सर्वोत्तम अभ्यास माना जाता था। उदाहरण के लिए, एक कार्ड कंपोनेंट बनाते समय, HTML और CSS को निम्न प्रकार से अलग किया जाता था।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;card&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">img&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;card__image&amp;#34;&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;image.jpg&amp;#34;&lt;/span> &lt;span class="na">alt&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;thumbnail&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;card__content&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">h2&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;card__title&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>शीर्षक&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">h2&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">p&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;card__description&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>विवरण यहाँ आएगा।&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">p&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">card&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">border-radius&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">8&lt;/span>&lt;span class="kt">px&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">box-shadow&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="kt">px&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="kt">px&lt;/span> &lt;span class="nb">rgba&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mf">0.1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">background-color&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#ffffff&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">overflow&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">hidden&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">.&lt;/span>&lt;span class="nc">card__title&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">font-size&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">1.5&lt;/span>&lt;span class="kt">rem&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">font-weight&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="kc">bold&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">color&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#333333&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* इसके बाद, विस्तृत स्टाइल्स आते हैं */&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस तरह का BEM (Block Element Modifier) आधारित डिज़ाइन तब तक काम करता है जब तक प्रोजेक्ट का आकार छोटा हो, लेकिन यह निम्नलिखित समस्याओं का कारण बन सकता है:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>नामकरण की थकावट और कमी&lt;/strong>: हर बार जब आप एक समान कंपोनेंट बनाते हैं, तो आपको एक नया क्लास नाम सोचना पड़ता है (जैसे: &lt;code>card-news&lt;/code>, &lt;code>card-featured&lt;/code> आदि)।&lt;/li>
&lt;li>&lt;strong>CSS का बढ़ना&lt;/strong>: हर बार नई सुविधा जोड़ने पर CSS की लाइनें बढ़ती जाती हैं, और एक बार लिखी गई CSS को यह सोचकर डिलीट नहीं किया जाता कि &amp;ldquo;यह कहाँ उपयोग हो रही है पता नहीं&amp;rdquo;, जिससे डेड कोड जमा होता रहता है।&lt;/li>
&lt;li>&lt;strong>कॉन्टेक्स्ट स्विच&lt;/strong>: HTML स्ट्रक्चर और CSS स्टाइल को अलग-अलग फाइलों में प्रबंधित करने के कारण, एडिटर में टैब के बीच स्विच करने की संख्या बहुत तेजी से बढ़ती है।&lt;/li>
&lt;/ol>
&lt;h3 id="tailwind-css-दवर-परडइम-शफट">Tailwind CSS द्वारा पैराडाइम शिफ्ट
&lt;/h3>&lt;p>Tailwind CSS इन समस्याओं को &amp;ldquo;यूटिलिटी क्लास के संयोजन&amp;rdquo; के दृष्टिकोण से हल करता है। यदि आप ऊपर दिए गए कार्ड कंपोनेंट के लिए Tailwind CSS का उपयोग करते हैं, तो यह कुछ इस तरह दिखेगा:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;rounded-lg shadow-md bg-white overflow-hidden&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">img&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;w-full h-48 object-cover&amp;#34;&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;image.jpg&amp;#34;&lt;/span> &lt;span class="na">alt&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;thumbnail&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;p-6&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">h2&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text-2xl font-bold text-gray-800&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>शीर्षक&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">h2&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">p&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;mt-2 text-gray-600&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>विवरण यहाँ आएगा。&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">p&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>चूंकि क्लास का नाम ही स्टाइल का विशिष्ट मान (&lt;code>p-6&lt;/code> का अर्थ &lt;code>padding: 1.5rem;&lt;/code> है आदि) दर्शाता है, इसलिए आप केवल HTML को देखकर अंतिम रेंडरिंग परिणाम की भविष्यवाणी कर सकते हैं। इसके अलावा, Tailwind के JIT (Just-In-Time) कंपाइलर के माध्यम से, केवल उपयोग की गई क्लासेस को ही प्रोडक्शन CSS फ़ाइल में निकाला जाता है, जिससे CSS का फ़ाइल आकार बहुत छोटा हो जाता है।&lt;/p>
&lt;hr>
&lt;h2 id="2-hugo-pipes-और-postcss-क-आरकटकचर">2. Hugo Pipes और PostCSS का आर्किटेक्चर
&lt;/h2>&lt;p>Hugo में Tailwind CSS को एकीकृत करने के लिए, आपको &lt;strong>Hugo Pipes&lt;/strong> नामक एसेट प्रोसेसिंग पाइपलाइन को समझना होगा। Hugo Pipes एक शक्तिशाली विशेषता है जो Sass/SCSS के कंपाइलेशन, JavaScript की बंडलिंग और Minify, और इस बार उपयोग किए जाने वाले &lt;strong>PostCSS&lt;/strong> के निष्पादन जैसी एसेट से संबंधित सभी प्रक्रियाओं को Hugo के भीतर ही पूरा करती है।&lt;/p>
&lt;p>PostCSS, JavaScript प्लगइन्स का उपयोग करके CSS को ट्रांसफॉर्म करने का एक टूल है। वास्तव में, Tailwind CSS खुद भी PostCSS के प्लगइन के रूप में काम करता है।&lt;/p>
&lt;h3 id="postcss-दवर-ast-abstract-syntax-tree-टरसफरमशन-ततर">PostCSS द्वारा AST (Abstract Syntax Tree) ट्रांसफॉर्मेशन तंत्र
&lt;/h3>&lt;p>PostCSS किस तरह CSS को प्रोसेस करता है, यह समझना ट्रबलशूटिंग के समय बहुत मददगार होता है। नीचे दिया गया Mermaid आरेख दिखाता है कि PostCSS कैसे CSS फ़ाइल को पढ़ता है, प्लगइन्स के माध्यम से इसे ट्रांसफॉर्म करता है, और अंतिम CSS आउटपुट करता है।&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;कच्चा CSS (styles.css)&amp;#34;] --&amp;gt;|Parser| B[&amp;#34;AST (Abstract Syntax Tree)&amp;#34;]
B --&amp;gt; C[&amp;#34;प्लगइन 1: Tailwind CSS&amp;#34;]
C --&amp;gt; D[&amp;#34;प्लगइन 2: Autoprefixer&amp;#34;]
D --&amp;gt; E[&amp;#34;प्लगइन N: cssnano&amp;#34;]
E --&amp;gt;|Stringifier| F[&amp;#34;कंपाइल और ऑप्टिमाइज़्ड CSS&amp;#34;]
&lt;/pre>
&lt;ol>
&lt;li>&lt;strong>Parser (पार्सर)&lt;/strong>: इनपुट किए गए कच्चे CSS स्ट्रिंग का विश्लेषण करता है और इसे AST (Abstract Syntax Tree) में बदलता है, जो एक डेटा स्ट्रक्चर है जिसे प्रोग्राम द्वारा प्रोसेस किया जा सकता है।&lt;/li>
&lt;li>&lt;strong>Plugins (प्लगइन्स)&lt;/strong>:
&lt;ul>
&lt;li>&lt;strong>Tailwind CSS&lt;/strong>: टेम्पलेट फाइलों (HTML या Markdown) को स्कैन करता है और उपयोग किए गए यूटिलिटी क्लासेस को नोड्स के रूप में AST पर जोड़ता है। इसके अलावा, यह &lt;code>@tailwind&lt;/code> डायरेक्टिव्स का विस्तार करता है।&lt;/li>
&lt;li>&lt;strong>Autoprefixer&lt;/strong>: &lt;code>Can I Use&lt;/code> के डेटाबेस का संदर्भ लेता है और आवश्यकतानुसार वेंडर प्रीफिक्स (&lt;code>-webkit-&lt;/code>, &lt;code>-moz-&lt;/code> आदि) को AST की प्रॉपर्टीज में जोड़ता है।&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Stringifier (स्ट्रिंगिफायर)&lt;/strong>: ट्रांसफॉर्मेशन पूरा होने के बाद, AST को फिर से ब्राउज़र द्वारा समझे जा सकने वाले CSS स्ट्रिंग में बदलकर आउटपुट देता है।&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="3-परयवरण-सटअप-और-परवपकषए">3. पर्यावरण सेटअप और पूर्वापेक्षाएँ
&lt;/h2>&lt;p>अब, आइए वास्तविक सेटअप प्रक्रिया शुरू ব্যায়াম करते हैं। सबसे पहले, यह जांच लें कि आवश्यक सॉफ़्टवेयर इंस्टॉल हैं या नहीं।&lt;/p>
&lt;h3 id="अनवरय-आवशयकतए">अनिवार्य आवश्यकताएँ
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>Hugo Extended Version&lt;/strong>:
सामान्य Hugo के बजाय, &lt;strong>Extended वर्ज़न&lt;/strong> अनिवार्य है, जिसमें Sass/SCSS प्रोसेसिंग फीचर्स और नेटिव PostCSS इंटीग्रेशन फीचर्स शामिल हैं। अपने टर्मिनल में निम्नलिखित कमांड चलाएँ और सुनिश्चित करें कि वर्ज़न जानकारी में &lt;code>extended&lt;/code> स्ट्रिंग शामिल है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo version
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># अपेक्षित आउटपुट उदाहरण:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># hugo v0.121.2-4146... windows/amd64 BuildDate=... VendorInfo=gohugoio +extended&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>&lt;strong>Node.js और npm&lt;/strong>:
Tailwind CSS और PostCSS जैसे डिपेंडेंसी पैकेज Node.js पर चलते हैं। सुनिश्चित करें कि Node.js (LTS वर्ज़न अनुशंसित) इंस्टॉल है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">node -v
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm -v
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ol>
&lt;h3 id="npm-पकजस-क-इसटलशन">npm पैकेजेस का इंस्टॉलेशन
&lt;/h3>&lt;p>प्रोजेक्ट की रूट डायरेक्टरी (जहाँ Hugo की कॉन्फ़िगरेशन फ़ाइल &lt;code>hugo.toml&lt;/code> स्थित है) में npm को इनिशियलाइज़ करें और आवश्यक पैकेजेस इंस्टॉल करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># package.json बनाना&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm init -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># डेवलपमेंट डिपेंडेंसी के रूप में Tailwind CSS, PostCSS, Autoprefixer को इंस्टॉल करना&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">npm install -D tailwindcss postcss postcss-cli autoprefixer
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;blockquote>
&lt;p>[!IMPORTANT]
यदि &lt;code>postcss-cli&lt;/code> इंस्टॉल नहीं है, तो Hugo के भीतर से PostCSS को कॉल करते समय एरर आ सकता है। Hugo Pipes आंतरिक रूप से &lt;code>postcss-cli&lt;/code> का उपयोग करता है, इसलिए इसे अवश्य इंस्टॉल करें।&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="4-कनफगरशन-फइल-बनन-postcss-और-tailwind-css">4. कॉन्फ़िगरेशन फ़ाइलें बनाना (PostCSS और Tailwind CSS)
&lt;/h2>&lt;p>पैकेज इंस्टॉलेशन पूरा होने के बाद, प्रोजेक्ट के व्यवहार को नियंत्रित करने वाली दो महत्वपूर्ण कॉन्फ़िगरेशन फ़ाइलें बनाएँ। इन्हें प्रोजेक्ट की रूट डायरेक्टरी में रखें।&lt;/p>
&lt;h3 id="tailwindconfigjs-बनन">tailwind.config.js बनाना
&lt;/h3>&lt;p>टर्मिनल में निम्न कमांड चलाने पर एक डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल उत्पन्न हो जाएगी।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">npx tailwindcss init
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>उत्पन्न की गई &lt;code>tailwind.config.js&lt;/code> को एडिटर में खोलें और &lt;code>content&lt;/code> प्रॉपर्टी सेट करें। यह बहुत महत्वपूर्ण है। Tailwind यहाँ निर्दिष्ट पाथ की फाइलों का विश्लेषण करेगा और उपयोग किए गए क्लासेस को निकालेगा। Hugo के प्रोजेक्ट स्ट्रक्चर के अनुसार, लेआउट फाइलों और कंटेंट फाइलों को सही ढंग से निर्दिष्ट करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/** @type {import(&amp;#39;tailwindcss&amp;#39;).Config} */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nx">module&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">exports&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Hugo की डायरेक्टरी संरचना के अनुसार स्कैन टारगेट निर्दिष्ट करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">content&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;./content/**/*.md&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;./content/**/*.html&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;./layouts/**/*.html&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;./assets/**/*.js&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// यदि आप किसी थीम का उपयोग कर रहे हैं, तो थीम की डायरेक्टरी को भी शामिल करना होगा
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// &amp;#34;./themes/my-theme/layouts/**/*.html&amp;#34;,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">theme&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">extend&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// कस्टम कलर्स या फोंट्स का विस्तार यहाँ करें
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">colors&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;brand-primary&amp;#39;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#3490dc&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;brand-secondary&amp;#39;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;#ffed4a&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">fontFamily&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s1">&amp;#39;sans&amp;#39;&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;Helvetica Neue&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;Arial&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;Hiragino Kaku Gothic ProN&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;Meiryo&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;sans-serif&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">plugins&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// यदि आवश्यक हो तो आधिकारिक प्लगइन्स जोड़ें (उदा: Typography प्लगइन)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="c1">// require(&amp;#39;@tailwindcss/typography&amp;#39;),
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="postcssconfigjs-बनन">postcss.config.js बनाना
&lt;/h3>&lt;p>इसके बाद, प्रोजेक्ट रूट में &lt;code>postcss.config.js&lt;/code> बनाएँ, जो परिभाषित करता है कि PostCSS किन प्लगइन्स को किस क्रम में चलाएगा।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">module&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">exports&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">plugins&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">tailwindcss&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">autoprefixer&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{},&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस सेटिंग के साथ, जब Hugo PostCSS को कॉल करता है, तो पहले Tailwind CSS प्रोसेसिंग की जाएगी, और उसके बाद Autoprefixer द्वारा वेंडर प्रीफिक्स जोड़ा जाएगा।&lt;/p>
&lt;hr>
&lt;h2 id="5-hugo-म-css-एसट-पइपलइन-क-नरमण">5. Hugo में CSS एसेट पाइपलाइन का निर्माण
&lt;/h2>&lt;p>कॉन्फ़िगरेशन पूरा होने के बाद, अंततः हम Hugo की थीम में Tailwind CSS को जोड़ेंगे।&lt;/p>
&lt;h3 id="5-1-एटर-पइट-क-रप-म-css-फइल-बनन">5-1. एंट्री पॉइंट के रूप में CSS फ़ाइल बनाना
&lt;/h3>&lt;p>&lt;code>assets/css/&lt;/code> डायरेक्टरी में (यदि यह मौजूद नहीं है तो इसे बनाएँ), एंट्री पॉइंट के रूप में काम करने वाली एक CSS फ़ाइल बनाएँ। यहाँ हम इसे &lt;code>main.css&lt;/code> कहेंगे।&lt;/p>
&lt;p>&lt;strong>फ़ाइल पाथ: &lt;code>assets/css/main.css&lt;/code>&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* Tailwind की बेस स्टाइल्स (जैसे रिसेट CSS) को लोड करना */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">@&lt;/span>&lt;span class="k">tailwind&lt;/span> &lt;span class="nt">base&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* कंपोनेंट क्लासेस को लोड करना */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">@&lt;/span>&lt;span class="k">tailwind&lt;/span> &lt;span class="nt">components&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* यूटिलिटी क्लासेस को लोड करना */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">@&lt;/span>&lt;span class="k">tailwind&lt;/span> &lt;span class="nt">utilities&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* यदि आपको कस्टम CSS की आवश्यकता है तो आप यहाँ लिख सकते हैं,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"> लेकिन जितना हो सके tailwind.config.js के extend में जोड़ने की सलाह दी जाती है */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">@&lt;/span>&lt;span class="k">layer&lt;/span> &lt;span class="nt">components&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">.&lt;/span>&lt;span class="nc">btn-primary&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="err">@apply&lt;/span> &lt;span class="err">bg-blue-500&lt;/span> &lt;span class="n">hover&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="n">bg-blue-700&lt;/span> &lt;span class="kc">text&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="kc">white&lt;/span> &lt;span class="k">font&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="kc">bold&lt;/span> &lt;span class="n">py-2&lt;/span> &lt;span class="n">px-4&lt;/span> &lt;span class="n">rounded&lt;/span> &lt;span class="k">transition&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">colors&lt;/span> &lt;span class="n">duration-300&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="5-2-लआउट-फइल-headhtml-क-एडट-करन">5-2. लेआउट फ़ाइल (head.html) को एडिट करना
&lt;/h3>&lt;p>इसके बाद, हम Hugo के टेम्पलेट से उपरोक्त CSS फ़ाइल को लोड करेंगे और PostCSS द्वारा प्रोसेस करने के लिए पाइपलाइन लिखेंगे। आम तौर पर, हम पार्शियल टेम्पलेट को एडिट करते हैं जो &lt;code>&amp;lt;head&amp;gt;&lt;/code> टैग को परिभाषित करता है (उदा: &lt;code>layouts/partials/head.html&lt;/code>)।&lt;/p>
&lt;p>&lt;strong>फ़ाइल पाथ: &lt;code>layouts/partials/head.html&lt;/code>&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-go-html-template" data-lang="go-html-template">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">meta&lt;/span> &lt;span class="na">charset&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;utf-8&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">meta&lt;/span> &lt;span class="na">name&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;viewport&amp;#34;&lt;/span> &lt;span class="na">content&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;width=device-width, initial-scale=1&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.Title&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span> | &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.Site.Title&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">title&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- assets/css/main.css प्राप्त करें --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">:=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">resources&lt;/span>&lt;span class="na">.Get&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;css/main.css&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- PostCSS विकल्प परिभाषा --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$options&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">:=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">dict&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;inlineImports&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">true&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">resources&lt;/span>&lt;span class="na">.PostCSS&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$options&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- प्रोडक्शन (Production) के लिए एसेट ऑप्टिमाइज़ेशन पाइपलाइन --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">if&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">hugo&lt;/span>&lt;span class="na">.IsProduction&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- 1. Minify (कंप्रेस) --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">minify&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- 2. Fingerprint (कैश बस्टिंग के लिए हैश जोड़ना) --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="o">|&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">fingerprint&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s">&amp;#34;sha512&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- 3. SRI (Subresource Integrity) के साथ टैग आउटपुट करें --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">link&lt;/span> &lt;span class="na">rel&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;stylesheet&amp;#34;&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="na">.RelPermalink&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>&lt;span class="s">&amp;#34;&lt;/span> &lt;span class="na">integrity&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="na">.Data.Integrity&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>&lt;span class="s">&amp;#34;&lt;/span> &lt;span class="na">crossorigin&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;anonymous&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">else&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- डेवलपमेंट (Development) वातावरण में कंप्रेस किए बिना आउटपुट करें (बिल्ड स्पीड को प्राथमिकता) --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">link&lt;/span> &lt;span class="na">rel&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;stylesheet&amp;#34;&lt;/span> &lt;span class="na">href&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="nx">$css&lt;/span>&lt;span class="na">.RelPermalink&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="k">end&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">head&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h4 id="पइपलइन-सपषटकरण-और-mermaid-आरख">पाइपलाइन स्पष्टीकरण और Mermaid आरेख
&lt;/h4>&lt;p>ऊपर दिया गया Go टेम्पलेट कोड CSS फ़ाइल को कैसे प्रोसेस करता है, इसके पाइपलाइन प्रोसेसिंग को आरेख के माध्यम से स्पष्ट किया गया है।&lt;/p>
&lt;pre class="mermaid">
flowchart TD
A[&amp;#34;assets/css/main.css&amp;#34;] --&amp;gt;|resources.Get| B[&amp;#34;Hugo मेमोरी स्पेस&amp;#34;]
B --&amp;gt;|resources.PostCSS| C[&amp;#34;PostCSS + Tailwind JIT प्रोसेस&amp;#34;]
C --&amp;gt; D{&amp;#34;hugo.IsProduction ?&amp;#34;}
D -- &amp;#34;हाँ (प्रोडक्शन वातावरण)&amp;#34; --&amp;gt; E[&amp;#34;minify (रिक्त स्थान और नई लाइनें हटाएँ)&amp;#34;]
E --&amp;gt; F[&amp;#34;fingerprint (हैश कैलकुलेशन)&amp;#34;]
F --&amp;gt; G[&amp;#34;public/css/main.[hash].css (SRI के साथ)&amp;#34;]
D -- &amp;#34;नहीं (डेवलपमेंट वातावरण)&amp;#34; --&amp;gt; H[&amp;#34;public/css/main.css&amp;#34;]
&lt;/pre>
&lt;ol>
&lt;li>&lt;strong>&lt;code>resources.Get&lt;/code>&lt;/strong>: &lt;code>assets&lt;/code> डायरेक्टरी के भीतर निर्दिष्ट फ़ाइल को ढूँढता है और इसे मेमोरी में रिसोर्स ऑब्जेक्ट के रूप में लोड करता है।&lt;/li>
&lt;li>&lt;strong>&lt;code>resources.PostCSS&lt;/code>&lt;/strong>: प्रोजेक्ट रूट में &lt;code>postcss.config.js&lt;/code> का संदर्भ लेता है और CSS सोर्स कोड पर Tailwind CSS और Autoprefixer प्रोसेसिंग लागू करता है। डेवलपमेंट वातावरण (&lt;code>hugo server&lt;/code>) में, JIT मोड काम करता है, और फ़ाइल बदलने पर यह तेज़ी से केवल आवश्यक क्लासेस उत्पन्न करता है।&lt;/li>
&lt;li>&lt;strong>&lt;code>minify&lt;/code>&lt;/strong>: प्रोडक्शन बिल्ड के दौरान (उदा: &lt;code>hugo --environment production&lt;/code>), यह अनावश्यक स्पेस और कमेंट्स को हटाकर फ़ाइल साइज़ को कम कर देता है।&lt;/li>
&lt;li>&lt;strong>&lt;code>fingerprint&lt;/code>&lt;/strong>: फ़ाइल सामग्री के आधार पर SHA हैश की गणना करता है और इसे फ़ाइल नाम में जोड़ता है (उदा: &lt;code>main.ab12cd...css&lt;/code>)। इससे ब्राउज़र के शक्तिशाली कैश का उपयोग करते हुए, CSS अपडेट होने पर नई फ़ाइल लोड होने की गारंटी मिलती है, जिसे &amp;ldquo;कैश बस्टिंग&amp;rdquo; कहा जाता है।&lt;/li>
&lt;li>&lt;strong>&lt;code>integrity&lt;/code>&lt;/strong>: Fingerprint द्वारा गणना किए गए हैश मान का उपयोग करके SRI (Subresource Integrity) विशेषता आउटपुट करता है, जो CDN आदि से डेटा में छेड़छाड़ को रोकता है।&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="6-css-ऑपटमइजशन-म-गणतय-परदरशन-वशलषण">6. CSS ऑप्टिमाइज़ेशन में गणितीय प्रदर्शन विश्लेषण
&lt;/h2>&lt;p>Tailwind CSS को लागू करने का सबसे बड़ा लाभ यह है कि डिलीवर की गई CSS फ़ाइल का आकार बहुत कम हो जाता है। इसका वेब परफॉरमेंस (विशेष रूप से First Contentful Paint: FCP) पर क्या प्रभाव पड़ता है, आइए गणितीय मॉडल का उपयोग करके इसका मात्रात्मक विश्लेषण करें।&lt;/p>
&lt;h3 id="css-फइल-आकर-म-कम-क-मडल">CSS फ़ाइल आकार में कमी का मॉडल
&lt;/h3>&lt;p>पारंपरिक CSS फ्रेमवर्क (जैसे Bootstrap) में, उन स्टाइल्स को भी लोड किया जाता है जिनका उपयोग नहीं किया जा रहा है, जिससे फ़ाइल का आकार $S_{original}$ बड़ा हो जाता है (लगभग 150KB - 200KB)।
Tailwind CSS के JIT कंपाइलर द्वारा अनावश्यक क्लासेस को हटाने (Purge) के बाद का आकार $S_{purged}$ मानते हुए, कमी दर $R_{purge}$ का उपयोग करके इसे इस प्रकार व्यक्त किया जा सकता है:&lt;/p>
$$
S_{purged} = S_{original} \times (1 - R_{purge})
$$&lt;p>एक सामान्य प्रोजेक्ट में, $R_{purge}$ लगभग $0.9$ (90% की कमी) तक पहुँच जाता है, और $S_{purged}$ मात्र 10KB से 20KB तक रह जाता है।&lt;/p>
&lt;p>इसके अलावा, डिलीवरी के समय सर्वर साइड पर Brotli या Gzip द्वारा संपीड़न किया जाता है। यदि संपीड़न दर को $R_{compress}$ (आमतौर पर लगभग 0.7 - 0.8) माना जाए, तो नेटवर्क से गुज़रने वाला अंतिम पेलोड आकार $S_{final}$ की गणना इस सूत्र से की जाती है:&lt;/p>
$$
S_{final} = S_{purged} \times (1 - R_{compress})
$$&lt;h3 id="करटकल-रडरग-पथ-और-नटवरक-वलबत">क्रिटिकल रेंडरिंग पाथ और नेटवर्क विलंबता
&lt;/h3>&lt;p>ब्राउज़र द्वारा स्क्रीन पर पहला कंटेंट रेंडर करने में लगने वाले समय (FCP) का अनुमान HTML डाउनलोड समय, CSS डाउनलोड समय और रेंडरिंग समय के योग से लगाया जा सकता है।&lt;/p>
$$
T_{FCP} \approx RTT + \frac{S_{HTML}}{BW} + RTT + \frac{S_{final}}{BW} + T_{render}
$$&lt;p>यहाँ,&lt;/p>
&lt;ul>
&lt;li>$RTT$ : Round Trip Time (सर्वर के साथ राउंड-ट्रिप संचार में देरी का समय)&lt;/li>
&lt;li>$BW$ : नेटवर्क बैंडविड्थ (Bandwidth)&lt;/li>
&lt;/ul>
&lt;p>मोबाइल नेटवर्क जैसे वातावरण में जहाँ $BW$ कम है और $RTT$ बड़ा है (देरी अधिक है), Tailwind CSS का दृष्टिकोण जो $S_{final}$ को कुछ किलोबाइट्स तक कम कर सकता है, $\frac{S_{final}}{BW}$ को शून्य के करीब ले आता है, जिससे Google PageSpeed Insights आदि में शानदार स्कोर प्राप्त होता है।&lt;/p>
&lt;hr>
&lt;h2 id="7-डवलपमट-सरवर-क-शर-करन-और-हट-रलड-क-पषट-करन">7. डेवलपमेंट सर्वर को शुरू करना और हॉट रिलोड की पुष्टि करना
&lt;/h2>&lt;p>सभी सेटिंग्स पूरी होने के बाद, Hugo का डेवलपमेंट सर्वर शुरू करें और जांचें कि क्या Tailwind CSS सही ढंग से काम कर रहा है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">hugo server -D
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>ब्राउज़र में &lt;code>http://localhost:1313/&lt;/code> पर जाएं और जांचें कि क्या साइट दिखाई दे रही है।
Markdown के कंटेंट फाइलों या Hugo के टेम्पलेट्स (&lt;code>layouts/&lt;/code> के अंतर्गत फ़ाइलें) को खोलें और क्लासेस जोड़ने का प्रयास करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- परीक्षण के लिए Tailwind क्लासेस लागू करने का उदाहरण --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;bg-gradient-to-r from-blue-500 to-purple-600 text-white p-8 rounded-xl shadow-2xl text-center transform transition duration-500 hover:scale-105&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">h1&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text-4xl font-extrabold tracking-tight&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>Tailwind CSS + Hugo is Awesome!&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">h1&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">p&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;mt-4 text-lg font-medium&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>पुष्टि करें कि हॉट रिलोड तुरंत लागू हो गया है।&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">p&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>फ़ाइल को सहेजते ही, आपको तुरंत हॉट रिलोड का अनुभव होगा: Hugo का शक्तिशाली फ़ाइल वॉचर और Tailwind का JIT कंपाइलर मिलकर काम करते हैं, और मिलीसेकंड में CSS फिर से बन जाता है, और ब्राउज़र अपने आप रीलोड हो जाता है।&lt;/p>
&lt;h3 id="टरबलशटग-यद-सटइल-लग-नह-ह-रह-ह">ट्रबलशूटिंग: यदि स्टाइल लागू नहीं हो रहे हैं
&lt;/h3>&lt;p>यदि परिवर्तन लागू नहीं हो रहे हैं, तो कृपया निम्नलिखित बिंदुओं की जाँच करें:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>&lt;code>tailwind.config.js&lt;/code> में &lt;code>content&lt;/code> पाथ सेटिंग&lt;/strong>
यदि स्कैन करने के लिए फ़ाइल पाथ गलत हैं, तो Tailwind फ़ाइल में उपयोग किए गए क्लासेस का पता नहीं लगा पाएगा और उन्हें CSS में आउटपुट नहीं करेगा। विशेष रूप से यदि आप किसी थीम का उपयोग कर रहे हैं, तो जांचें कि थीम डायरेक्टरी का पाथ छूटा तो नहीं है।&lt;/li>
&lt;li>&lt;strong>PostCSS एरर&lt;/strong>
यदि टर्मिनल के Hugo सर्वर लॉग में &lt;code>Error: failed to transform resource: PostCSS not found&lt;/code> जैसा एरर आ रहा है, तो हो सकता है कि &lt;code>npm install&lt;/code> सही तरीके से नहीं चला हो, या &lt;code>postcss-cli&lt;/code> गायब हो।&lt;/li>
&lt;li>&lt;strong>Hugo का कैश साफ़ करना&lt;/strong>
कभी-कभी Hugo के कैश के कारण पुरानी CSS रह सकती है। सर्वर को रोकें और &lt;code>hugo server --ignoreCache&lt;/code> से शुरू करें, या OS की अस्थायी डायरेक्टरी (जैसे &lt;code>/tmp/hugo_cache/&lt;/code>) को हटा दें।&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="8-परडकशन-क-लए-बलड-और-अधक-उननत-बनन">8. प्रोडक्शन के लिए बिल्ड और अधिक उन्नत बनाना
&lt;/h2>&lt;p>अपनी साइट को प्रोडक्शन सर्वर (Netlify, Vercel, GitHub Pages, Cloudflare Pages आदि) पर डिप्लॉय करते समय, आपको पर्यावरण वेरिएबल सेट करके प्रोडक्शन ऑप्टिमाइज़ेशन पाइपलाइन को चलाना होगा।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># प्रोडक्शन बिल्ड कमांड का उदाहरण&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">NODE_ENV&lt;/span>&lt;span class="o">=&lt;/span>production hugo --minify --environment production
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>--environment production&lt;/code> फ्लैग जोड़ने से, &lt;code>head.html&lt;/code> के अंदर का &lt;code>{{ if hugo.IsProduction }}&lt;/code> ब्लॉक निष्पादित होता है, जो CSS को Minify करता है और Fingerprint जोड़ता है।&lt;/p>
&lt;h3 id="typography-पलगइन-क-उपयग-करक-markdown-क-सटइलग">Typography प्लगइन का उपयोग करके Markdown की स्टाइलिंग
&lt;/h3>&lt;p>Hugo जैसी ब्लॉग या डॉक्यूमेंट साइटों में, आप Markdown से उत्पन्न शुद्ध HTML तत्वों (&lt;code>&amp;lt;h1&amp;gt;&lt;/code>, &lt;code>&amp;lt;p&amp;gt;&lt;/code>, &lt;code>&amp;lt;ul&amp;gt;&lt;/code> आदि) पर सीधे क्लास नहीं जोड़ सकते। इस स्थिति में, Tailwind का आधिकारिक &lt;strong>Typography प्लगइन&lt;/strong> बहुत उपयोगी होता है।&lt;/p>
&lt;ol>
&lt;li>
&lt;p>प्लगइन इंस्टॉल करना&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">npm install -D @tailwindcss/typography
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>इसे &lt;code>tailwind.config.js&lt;/code> में जोड़ना&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">module&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">exports&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// ...
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">plugins&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">require&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;@tailwindcss/typography&amp;#39;&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>
&lt;p>टेम्पलेट में लागू करना
लेख के टेक्स्ट को आउटपुट करने वाले कंटेनर एलिमेंट में केवल &lt;code>prose&lt;/code> क्लास (और आपके इच्छित रंग या आकार का वैरिएंट) जोड़ने से, एक सुंदर डिफ़ॉल्ट स्टाइल लागू हो जाएगी।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-go-html-template" data-lang="go-html-template">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">article&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;prose prose-lg prose-blue mx-auto mt-10&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cp">{{&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="na">.Content&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="cp">}}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">article&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;/ol>
&lt;p>इससे हाथ से जटिल CSS सिलेक्टर (&lt;code>.article-content h2 { ... }&lt;/code>) लिखने की आवश्यकता पूरी तरह खत्म हो जाती है, और कंपोनेंट की मोड्युलैरिटी पूरी तरह से बनी रहती है।&lt;/p>
&lt;hr>
&lt;h2 id="9-नषकरष-उचच-रख-रखव-वल-फरटएड-इकससटम-क-नरमण">9. निष्कर्ष: उच्च रख-रखाव वाले फ्रंटएंड इकोसिस्टम का निर्माण
&lt;/h2>&lt;p>बहुत बढ़िया! अब आपके पास एक उत्तम वेब डेवलपमेंट एसेट पाइपलाइन है, जिसमें Hugo का सुपर-फ़ास्ट स्टैटिक साइट जनरेशन इंजन, Tailwind CSS की आधुनिक स्टाइलिंग क्षमताएँ, और PostCSS की एक्सटेंसिबिलिटी शामिल है।&lt;/p>
&lt;p>इस आर्किटेक्चर की सबसे बड़ी खूबी यह है कि &lt;strong>&amp;ldquo;कॉन्फ़िगरेशन केवल एक बार करना होता है&amp;rdquo;&lt;/strong>। एक बार पाइपलाइन बन जाने के बाद, डेवलपर्स को CSS फ़ाइल खोलने की आवश्यकता नहीं होती; वे केवल HTML या Markdown टेम्पलेट्स में सहज यूटिलिटी क्लासेस को लिखकर शानदार गति से जटिल UI बना सकते हैं।&lt;/p>
&lt;p>इसके अलावा, आउटपुट की गई CSS का आकार हमेशा न्यूनतम रखा जाता है, जो सीधे Core Web Vitals स्कोर को बेहतर बनाने में मदद करता है, और SEO के दृष्टिकोण से भी यह बहुत फायदेमंद है।&lt;/p>
&lt;p>Hugo और Tailwind CSS का संयोजन, व्यक्तिगत टेक ब्लॉग्स से लेकर बड़े कॉर्पोरेट वेबसाइट्स तक, सभी प्रोजेक्ट्स के लिए हमेशा &amp;ldquo;सर्वोत्तम विकल्पों&amp;rdquo; में से एक रहेगा। अपने आरामदायक वेब डेवलपमेंट अनुभव का आनंद लेने के लिए इस शक्तिशाली टूलचेन का लाभ ज़रूर उठाएँ!&lt;/p></description></item><item><title>ब्लॉग के डार्क मोड सपोर्ट में CSS डिज़ाइन के महत्वपूर्ण बिंदु</title><link>http://kenji.blog/hi/p/dark-mode-css-design-patterns/</link><pubDate>Sat, 12 Sep 2026 12:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/dark-mode-css-design-patterns/</guid><description>&lt;img src="http://kenji.blog/p/dark-mode-css-design-patterns/img/eyecatch.jpg" alt="Featured image of post ब्लॉग के डार्क मोड सपोर्ट में CSS डिज़ाइन के महत्वपूर्ण बिंदु" />&lt;p>आधुनिक वेब विकास में, डार्क मोड (Dark Mode) का सपोर्ट केवल एक &amp;ldquo;सुखद सुविधा (Nice to have)&amp;rdquo; से बदलकर उपयोगकर्ता अनुभव (UX) को बेहतर बनाने के लिए एक &amp;ldquo;अनिवार्य आवश्यकता (Must have)&amp;rdquo; बन गया है। विशेष रूप से ब्लॉग या दस्तावेज़ साइटों जैसे मीडिया के लिए जहाँ लंबे समय तक पाठ पढ़ने की अपेक्षा की जाती है, डार्क मोड सपोर्ट का महत्व बहुत अधिक है क्योंकि यह उपयोगकर्ताओं की आँखों की थकान को कम करता है और डिवाइस की बैटरी खपत को बचाता है।&lt;/p>
&lt;p>इस लेख में, हम एक फ्रंटएंड इंजीनियर के दृष्टिकोण से ब्लॉग के डार्क मोड सपोर्ट में आने वाली तकनीकी चुनौतियों और अत्यधिक बनाए रखने योग्य CSS डिज़ाइन के प्रमुख बिंदुओं पर बहुत गहराई से चर्चा करेंगे। हम CSS कस्टम प्रॉपर्टीज़ (CSS वेरिएबल्स) के उपयोग, FOUC (Flash of Unstyled Content) को रोकने के लिए उन्नत जावास्क्रिप्ट नियंत्रण और SSR एकीकरण, एक्सेसिबिलिटी (WCAG 2.1 AAA) सुनिश्चित करने के लिए रंग डिज़ाइन (RGB, HSL, और नवीनतम OKLCH), और Tailwind CSS का उपयोग करके व्यावहारिक कोड उदाहरणों सहित डार्क मोड कार्यान्वयन की हर चीज़ को कवर करेंगे।&lt;/p>
&lt;hr>
&lt;h2 id="1-css-custom-properties-css-वरएबलस-क-मधयम-स-थम-डजइन-क-मल-सदधत">1. CSS Custom Properties (CSS वेरिएबल्स) के माध्यम से थीम डिज़ाइन के मूल सिद्धांत
&lt;/h2>&lt;p>वर्तमान में डार्क मोड को लागू करने का सबसे मानक और शक्तिशाली तरीका &lt;strong>CSS Custom Properties (CSS वेरिएबल्स)&lt;/strong> का उपयोग करना है। जबकि Sass जैसे CSS प्रीप्रोसेसर के चर (&lt;code>$color&lt;/code>) संकलन समय (compile time) पर स्थिर रूप से हल किए जाते हैं, CSS वेरिएबल्स गतिशील रूप से हल किए जाते हैं और ब्राउज़र के रनटाइम में ओवरराइट किए जाते हैं। यह केवल जावास्क्रिप्ट से क्लास को स्विच करके तुरंत पूरे पेज की रंग योजना को बदलना संभव बनाता है।&lt;/p>
&lt;h3 id="11-बनयद-कलर-थम-क-परभषत-करन">1.1 बुनियादी कलर थीम को परिभाषित करना
&lt;/h3>&lt;p>सबसे पहले, लाइट मोड (डिफ़ॉल्ट) के कलर पैलेट को परिभाषित करने के लिए &lt;code>:root&lt;/code> स्यूडो-क्लास का उपयोग करें। फिर, एक सामान्य डिज़ाइन पैटर्न यह है कि जब &lt;code>[data-theme='dark']&lt;/code> (या &lt;code>.dark&lt;/code> क्लास) जैसा कोई एट्रिब्यूट लागू होता है, तो उन वेरिएबल्स को ओवरराइट किया जाता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* लाइट मोड (डिफ़ॉल्ट) वेरिएबल परिभाषाएँ */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">:&lt;/span>&lt;span class="nd">root&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-bg-primary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#ffffff&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-bg-secondary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#f3f4f6&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-text-primary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#111827&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-text-secondary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#4b5563&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-accent&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#3b82f6&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-border&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#e5e7eb&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* डार्क मोड में वेरिएबल्स को ओवरराइट करना */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>&lt;span class="nt">data-theme&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-bg-primary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#111827&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-bg-secondary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#1f2937&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-text-primary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#f9fafb&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-text-secondary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#9ca3af&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-accent&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#60a5fa&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-border&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#374151&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* वास्तविक अनुप्रयोग */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nt">body&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">background-color&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">var&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="kc">color&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">bg&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">primary&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">color&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">var&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="kc">color&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="kc">text&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">primary&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">transition&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="k">background-color&lt;/span> &lt;span class="mf">0.3&lt;/span>&lt;span class="kt">s&lt;/span> &lt;span class="kc">ease&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kc">color&lt;/span> &lt;span class="mf">0.3&lt;/span>&lt;span class="kt">s&lt;/span> &lt;span class="kc">ease&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nt">a&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">color&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">var&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">--&lt;/span>&lt;span class="kc">color&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">accent&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस तरह से लेआउट और टाइपोग्राफी के विनिर्देशन को रंग (थीम) के विनिर्देशन से पूरी तरह अलग करने से CSS की मेंटेनबिलिटी (रखरखाव क्षमता) में भारी सुधार होता है।&lt;/p>
&lt;h3 id="12-media-prefers-color-scheme-dark-क-उपयग">1.2 @media (prefers-color-scheme: dark) का उपयोग
&lt;/h3>&lt;p>जब OS स्तर पर डार्क मोड सेट होता है, तो UX के दृष्टिकोण से यह वांछनीय है कि उपयोगकर्ता के पहली बार वेबसाइट पर आते ही स्वचालित रूप से डार्क थीम लागू हो जाए। इसे &lt;code>@media (prefers-color-scheme: dark)&lt;/code> नामक मीडिया क्वेरी का उपयोग करके प्राप्त किया जा सकता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* जब OS पर्यावरण सेटिंग डार्क मोड में हो तो फ़ॉलबैक */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">@&lt;/span>&lt;span class="k">media&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="nt">prefers-color-scheme&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="nt">dark&lt;/span>&lt;span class="o">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">:&lt;/span>&lt;span class="nd">root&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nd">not&lt;/span>&lt;span class="o">([&lt;/span>&lt;span class="nt">data-theme&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;light&amp;#39;&lt;/span>&lt;span class="o">])&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-bg-primary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#111827&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-bg-secondary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#1f2937&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-text-primary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#f9fafb&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-text-secondary&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#9ca3af&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-accent&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#60a5fa&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--color-border&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mh">#374151&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस नोटेशन के साथ, जब तक उपयोगकर्ता स्पष्ट रूप से लाइट मोड (&lt;code>data-theme='light'&lt;/code>) नहीं चुनता, तब तक OS की डार्क मोड सेटिंग का सम्मान किया जाता है और वेरिएबल्स को ओवरराइट किया जाता है।&lt;/p>
&lt;hr>
&lt;h2 id="2-कलर-सपस-क-समझन-और-एकससबलट-wcag-21-aaa">2. कलर स्पेस को समझना और एक्सेसिबिलिटी (WCAG 2.1 AAA)
&lt;/h2>&lt;p>डार्क मोड के लिए रंग डिज़ाइन करते समय, बस &amp;ldquo;बैकग्राउंड को काला करना और टेक्स्ट को सफेद करना&amp;rdquo; पर्याप्त नहीं है। यदि कंट्रास्ट बहुत अधिक है, तो यह चमक (हलेशन) पैदा कर सकता है और इसे पढ़ना कठिन बना सकता है; यदि कंट्रास्ट बहुत कम है, तो दृश्यता से समझौता किया जाता है। वेब कंटेंट एक्सेसिबिलिटी गाइडलाइंस (WCAG) दृश्यता सुनिश्चित करने के लिए कंट्रास्ट अनुपात को सख्ती से परिभाषित करती हैं।&lt;/p>
&lt;h3 id="21-wcag-कटरसट-अनपत-गणन-सतर">2.1 WCAG कंट्रास्ट अनुपात गणना सूत्र
&lt;/h3>&lt;p>WCAG में कंट्रास्ट अनुपात (Contrast Ratio) $CR$ को पृष्ठभूमि रंग और अग्रभूमि रंग की सापेक्ष चमक (Relative Luminance) का उपयोग करके निम्नानुसार परिभाषित किया गया है।&lt;/p>
$$CR = \frac{L_{lighter} + 0.05}{L_{darker} + 0.05}$$&lt;p>जहाँ, $L_{lighter}$ हल्के रंग की सापेक्ष चमक है, और $L_{darker}$ गहरे रंग की सापेक्ष चमक है (मान सीमा 0.0 से 1.0 तक है)। WCAG 2.1 स्तर AAA को प्राप्त करने के लिए, सामान्य टेक्स्ट के लिए &lt;strong>7:1 या अधिक&lt;/strong> और बड़े टेक्स्ट के लिए &lt;strong>4.5:1 या अधिक&lt;/strong> के कंट्रास्ट अनुपात की आवश्यकता होती है।&lt;/p>
&lt;p>सापेक्ष चमक $L$ की गणना sRGB कलर स्पेस के RGB मानों से निम्नलिखित जटिल सूत्र का उपयोग करके की जाती है।&lt;/p>
$$L = 0.2126 \times R + 0.7152 \times G + 0.0722 \times B$$&lt;p>प्रत्येक घटक ($R, G, B$) को 255 से विभाजित मूल 8-बिट मान ($R_{sRGB}$) के सामान्यीकृत मान का उपयोग करके गामा सुधार को हल करने के लिए निम्नलिखित रूपांतरण किया जाता है।&lt;/p>
$$
R, G, B =
\begin{cases}
\frac{C_{sRGB}}{12.92} &amp; \text{if } C_{sRGB} \le 0.03928 \\
\left( \frac{C_{sRGB} + 0.055}{1.055} \right)^{2.4} &amp; \text{otherwise}
\end{cases}
$$&lt;p>इस गणना को मैन्युअल रूप से करना मुश्किल है, लेकिन रंग डिज़ाइन टूल का उपयोग करके, आप यांत्रिक रूप से उन रंगों का चयन कर सकते हैं जो 7:1 ($CR \ge 7.0$) के कंट्रास्ट अनुपात को पूरा करते हैं।&lt;/p>
&lt;h3 id="22-hsl-बनम-rgb-बनम-oklch">2.2 HSL बनाम RGB बनाम OKLCH
&lt;/h3>&lt;p>कलर पैलेट बनाते समय, RGB या HSL मुख्य धारा हुआ करते थे। हालाँकि, &amp;ldquo;अवधारणात्मक एकरूपता (perceptual uniformity)&amp;rdquo; के मामले में इनमें एक बड़ी खामी है।&lt;/p>
&lt;ul>
&lt;li>&lt;strong>RGB&lt;/strong>: प्रकाश के यांत्रिक प्राथमिक रंग होने के कारण, मनुष्यों के लिए &amp;ldquo;हल्का (brighten)&amp;rdquo; या &amp;ldquo;गहरा (darken)&amp;rdquo; करने जैसे सहज समायोजन करना मुश्किल है।&lt;/li>
&lt;li>&lt;strong>HSL&lt;/strong>: यह ह्यु (Hue), सैचुरेशन (Saturation), और लाइटनेस (Lightness) का उपयोग करता है, लेकिन HSL की &amp;ldquo;लाइटनेस (L)&amp;rdquo; मानव आँख द्वारा देखी जाने वाली चमक से मेल नहीं खाती। उदाहरण के लिए, 50% HSL लाइटनेस वाला शुद्ध पीला और शुद्ध नीला संख्यात्मक रूप से समान रूप से चमकीले हैं, लेकिन पीला रंग मानव आँख को बहुत अधिक चमकीला दिखाई देता है।&lt;/li>
&lt;li>&lt;strong>OKLCH&lt;/strong>: यह नवीनतम कलर स्पेस है जिसे हाल ही में CSS Color Module Level 4 में पेश किया गया है। इसमें लाइटनेस (perceptual lightness), क्रोमा (saturation), और ह्यु (hue) शामिल हैं, और यह &lt;strong>मानव दृश्य विशेषताओं (अवधारणात्मक एकरूपता) से पूरी तरह मेल खाता है&lt;/strong>।&lt;/li>
&lt;/ul>
&lt;p>OKLCH का उपयोग करके, आप ह्यु (Hue) बदलते समय समान अवधारणात्मक लाइटनेस बनाए रख सकते हैं, जिससे डार्क मोड के लिए कलर पैलेट जनरेशन अत्यधिक पूर्वानुमानित और सुरक्षित हो जाता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="cl">&lt;span class="c">/* OKLCH का उपयोग करके CSS वेरिएबल्स को परिभाषित करने का उदाहरण */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">:&lt;/span>&lt;span class="nd">root&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">/* लाइट मोड के लिए उच्च आधार लाइटनेस और कम सैचुरेशन */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--bg-base&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">oklch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.98&lt;/span> &lt;span class="mf">0.01&lt;/span> &lt;span class="mi">250&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--text-base&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">oklch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.25&lt;/span> &lt;span class="mf">0.02&lt;/span> &lt;span class="mi">250&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--primary-brand&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">oklch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.65&lt;/span> &lt;span class="mf">0.15&lt;/span> &lt;span class="mi">250&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>&lt;span class="nt">data-theme&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;dark&amp;#34;&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">/* डार्क मोड में, केवल लाइटनेस को उलटने से अवधारणात्मक कंट्रास्ट बनाए रखना आसान हो जाता है */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--bg-base&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">oklch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.20&lt;/span> &lt;span class="mf">0.02&lt;/span> &lt;span class="mi">250&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--text-base&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">oklch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.95&lt;/span> &lt;span class="mf">0.01&lt;/span> &lt;span class="mi">250&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nv">--primary-brand&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nf">oklch&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.75&lt;/span> &lt;span class="mf">0.15&lt;/span> &lt;span class="mi">250&lt;/span>&lt;span class="p">);&lt;/span> &lt;span class="c">/* डार्क मोड के लिए दृश्यता सुनिश्चित करने के लिए थोड़ा हल्का */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>इस तरह से OKLCH को अपनाकर, आप कई थीमों में लगातार कंट्रास्ट अनुपात (WCAG AAA मानक) सुनिश्चित करने के लिए आसानी से एक तर्क बना सकते हैं।&lt;/p>
&lt;hr>
&lt;h2 id="3-fouc-flash-of-unstyled-content-क-रकथम-और-ssr-हइडरशन">3. FOUC (Flash of Unstyled Content) की रोकथाम और SSR हाइड्रेशन
&lt;/h2>&lt;p>डार्क मोड का समर्थन करते समय डेवलपर्स को सबसे अधिक परेशान करने वाली समस्या स्क्रीन झिलमिलाहट (flickering) है, जिसे &lt;strong>FOUC (Flash of Unstyled Content)&lt;/strong> कहा जाता है।&lt;/p>
&lt;h3 id="31-कलइट-सइड-js-दवर-थम-सवचग-क-जल">3.1 क्लाइंट-साइड JS द्वारा थीम स्विचिंग का जाल
&lt;/h3>&lt;p>React और Vue जैसे SPA (या SSG के साथ स्थिर साइटों) में, उपयोगकर्ता की प्राथमिकताओं को &lt;code>localStorage&lt;/code> में सहेजना और थीम स्विच करने के लिए जावास्क्रिप्ट का उपयोग करके उन्हें पढ़ना आम बात है। हालाँकि, यदि यह प्रक्रिया React के &lt;code>useEffect&lt;/code> में की जाती है, तो निम्नलिखित समस्याएँ उत्पन्न होती हैं।&lt;/p>
&lt;ol>
&lt;li>ब्राउज़र लाइट मोड HTML/CSS रेंडर करता है।&lt;/li>
&lt;li>JS बंडल लोड और निष्पादित (executed) किया जाता है।&lt;/li>
&lt;li>&lt;code>localStorage&lt;/code> से &lt;code>dark&lt;/code> सेटिंग पढ़ी जाती है।&lt;/li>
&lt;li>&lt;code>dark&lt;/code> क्लास HTML में जोड़ा जाता है, और स्क्रीन अचानक डार्क हो जाती है (झिलमिलाहट)।&lt;/li>
&lt;/ol>
&lt;h3 id="32-परण-fouc-रकथम-ककज-और-ssr-क-उपयग">3.2 पूर्ण FOUC रोकथाम: कुकीज़ और SSR का उपयोग
&lt;/h3>&lt;p>FOUC को पूरी तरह से रोकने और हाइड्रेशन त्रुटियों से बचने का सबसे अच्छा अभ्यास है &lt;strong>उपयोगकर्ता की थीम सेटिंग्स को &lt;code>document.cookie&lt;/code> में सहेजना और सर्वर-साइड रेंडरिंग (SSR) चरण में उपयुक्त क्लास के साथ HTML वापस करना&lt;/strong>।&lt;/p>
&lt;p>नीचे दिया गया अनुक्रम आरेख (sequence diagram) कुकीज़ का उपयोग करके थीम आरंभीकरण (theme initialization) के लिए आदर्श प्रवाह दिखाता है।&lt;/p>
&lt;pre class="mermaid">
sequenceDiagram
participant User as &amp;#34;उपयोगकर्ता&amp;#34;
participant Browser as &amp;#34;ब्राउज़र OS&amp;#34;
participant Server as &amp;#34;सर्वर SSR&amp;#34;
participant DOM as &amp;#34;क्लाइंट DOM&amp;#34;
User-&amp;gt;&amp;gt;Browser: &amp;#34;पेज का अनुरोध करें&amp;#34;
Browser-&amp;gt;&amp;gt;Server: &amp;#34;कुकी (theme=dark) के साथ GET अनुरोध&amp;#34;
Server--&amp;gt;&amp;gt;Browser: &amp;#34;&amp;lt;html data-theme=&amp;#39;dark&amp;#39;&amp;gt; के साथ HTML वापस करें&amp;#34;
Browser-&amp;gt;&amp;gt;DOM: &amp;#34;प्रारंभिक HTML रेंडर करें (कोई FOUC नहीं)&amp;#34;
DOM-&amp;gt;&amp;gt;DOM: &amp;#34;हाइड्रेशन स्क्रिप्ट निष्पादित करें&amp;#34;
alt &amp;#34;कुकी अनुपस्थित (पहली यात्रा)&amp;#34;
DOM-&amp;gt;&amp;gt;Browser: &amp;#34;OS prefers-color-scheme जांचें&amp;#34;
Browser--&amp;gt;&amp;gt;DOM: &amp;#34;matchMedia परिणाम (जैसे dark)&amp;#34;
DOM-&amp;gt;&amp;gt;DOM: &amp;#34;इनलाइन ब्लॉकिंग स्क्रिप्ट के माध्यम से data-theme=&amp;#39;dark&amp;#39; सेट करें&amp;#34;
end
&lt;/pre>
&lt;h3 id="33-इनलइन-सकरपट-क-मधयम-स-रकष-पकत-उन-सथर-सइट-क-लए-ज-ककज-क-उपयग-नह-कर-सकत-ह">3.3 इनलाइन स्क्रिप्ट के माध्यम से रक्षा पंक्ति (उन स्थिर साइटों के लिए जो कुकीज़ का उपयोग नहीं कर सकती हैं)
&lt;/h3>&lt;p>उन ब्लॉगों के लिए जो केवल SSG (स्टेटिक साइट जेनरेशन) का उपयोग करते हैं और SSR नहीं कर सकते (जैसे Hugo, Gatsby, या Astro का स्टेटिक एक्सपोर्ट), &lt;code>&amp;lt;head&amp;gt;&lt;/code> टैग के अंदर एक ब्लॉकिंग इनलाइन जावास्क्रिप्ट रखना अनिवार्य है जो DOM रेंडर होने से ठीक पहले क्लास जोड़ता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- &amp;lt;head&amp;gt; के अंत में रखें --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">(&lt;/span>&lt;span class="kd">function&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">try&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">localTheme&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">localStorage&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">getItem&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;theme&amp;#39;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">osTheme&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">window&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">matchMedia&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;(prefers-color-scheme: dark)&amp;#39;&lt;/span>&lt;span class="p">).&lt;/span>&lt;span class="nx">matches&lt;/span> &lt;span class="o">?&lt;/span> &lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span> &lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;light&amp;#39;&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kd">var&lt;/span> &lt;span class="nx">theme&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nx">localTheme&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="nx">osTheme&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">document&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">documentElement&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">setAttribute&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;data-theme&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">theme&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">catch&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="nx">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">})();&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>चूँकि यह छोटी स्क्रिप्ट ब्राउज़र की रेंडरिंग को ब्लॉक करके तुरंत निष्पादित की जाती है, &lt;code>data-theme&lt;/code> विशेषता स्क्रीन के रेंडर होने के समय तक पहले ही सेट हो जाती है, जिससे स्क्रीन झिलमिलाहट (FOUC) को पूरी तरह से रोका जा सकता है।&lt;/p>
&lt;hr>
&lt;h2 id="4-tailwind-css-और-र-scsscss-करयनवयन-दषटकण">4. Tailwind CSS और रॉ SCSS/CSS कार्यान्वयन दृष्टिकोण
&lt;/h2>&lt;p>वास्तविक परियोजनाओं में डार्क मोड को एकीकृत करते समय, प्रत्येक टूल के दृष्टिकोण को समझना आवश्यक है।&lt;/p>
&lt;h3 id="41-tailwind-css-म-डरक-मड">4.1 Tailwind CSS में डार्क मोड
&lt;/h3>&lt;p>Tailwind CSS डिफ़ॉल्ट रूप से &lt;code>dark:&lt;/code> संस्करण प्रदान करता है, जिससे डार्क मोड को लागू करना बहुत आसान हो जाता है। आप कॉन्फ़िगरेशन फ़ाइल (&lt;code>tailwind.config.js&lt;/code>) में &lt;code>darkMode&lt;/code> गुण सेट करते हैं।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// tailwind.config.js
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="nx">module&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">exports&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// &amp;#39;media&amp;#39; (OS सेटिंग पर निर्भर) या &amp;#39;class&amp;#39; (मैन्युअल रूप से टॉगल करने योग्य)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="nx">darkMode&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;class&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">theme&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">extend&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">colors&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* CSS वेरिएबल्स का उपयोग करके Tailwind कलर पैलेट का विस्तार करें */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">primary&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;rgb(var(--color-primary) / &amp;lt;alpha-value&amp;gt;)&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">background&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s1">&amp;#39;rgb(var(--color-background) / &amp;lt;alpha-value&amp;gt;)&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>HTML पक्ष पर, आपको बस निम्नानुसार क्लास जोड़ने की आवश्यकता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">div&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;bg-white dark:bg-gray-900 text-gray-900 dark:text-gray-100&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">h1&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;text-2xl font-bold&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>Hello World&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">h1&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">p&lt;/span> &lt;span class="na">class&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;mt-2&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>Tailwind makes dark mode incredibly easy.&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">p&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">div&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>हालाँकि, हर तत्व में &lt;code>dark:bg-xxx&lt;/code> जोड़ने से घटक का आकार (component bloat) बढ़ सकता है। बड़े ब्लॉग और ऐप के लिए, एक हाइब्रिड डिज़ाइन (सिमेंटिक कलर डिज़ाइन) की सिफारिश की जाती है जो &lt;strong>CSS वेरिएबल्स पर आधारित है और Tailwind से उन CSS वेरिएबल्स को संदर्भित करता है&lt;/strong>।&lt;/p>
&lt;p>नीचे दिया गया क्लास आरेख CSS वेरिएबल इनहेरिटेंस और एप्लिकेशन लेयर्स दिखाता है।&lt;/p>
&lt;pre class="mermaid">
classDiagram
class GlobalCSSVariables {
&amp;#34;--color-brand-500&amp;#34;
&amp;#34;--color-gray-900&amp;#34;
}
class SemanticVariables {
&amp;#34;--bg-primary&amp;#34;
&amp;#34;--text-base&amp;#34;
&amp;#34;--accent&amp;#34;
}
class TailwindConfig {
&amp;#34;theme.colors.background&amp;#34;
&amp;#34;theme.colors.primary&amp;#34;
}
class UIComponents {
&amp;#34;class=&amp;#39;bg-background text-primary&amp;#39;&amp;#34;
}
GlobalCSSVariables &amp;lt;|-- SemanticVariables : &amp;#34;:root &amp;amp; .dark&amp;#34;
SemanticVariables &amp;lt;|-- TailwindConfig : &amp;#34;tailwind.config.js&amp;#34;
TailwindConfig &amp;lt;.. UIComponents : &amp;#34;उपयोगिता कक्षाएं लागू करता है&amp;#34;
&lt;/pre>
&lt;h3 id="42-raw-scsscss-क-सथ-करयनवयन-mixin-क-उपयग">4.2 Raw SCSS/CSS के साथ कार्यान्वयन (Mixin का उपयोग)
&lt;/h3>&lt;p>उन परियोजनाओं के लिए जो Tailwind का उपयोग नहीं करते हैं और अपना स्वयं का SCSS लिखते हैं, डार्क मोड शैलियों को एनकैप्सुलेट करने के लिए &lt;code>@mixin&lt;/code> का उपयोग करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-scss" data-lang="scss">&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/* SCSS Mixin परिभाषा */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">@mixin&lt;/span>&lt;span class="nf"> dark-mode&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="cm">/* [data-theme=&amp;#39;dark&amp;#39;] विशेषता या OS सेटिंग्स दोनों का समर्थन करता है */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">[&lt;/span>&lt;span class="nt">data-theme&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="k">&amp;amp;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">@content&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">@media&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">prefers-color-scheme&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="ni">dark&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nd">:root:not&lt;/span>&lt;span class="o">([&lt;/span>&lt;span class="nt">data-theme&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;light&amp;#39;&lt;/span>&lt;span class="o">])&lt;/span> &lt;span class="k">&amp;amp;&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">@content&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cm">/* उपयोग उदाहरण */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nc">.card&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">background-color&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mh">#ffffff&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">color&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mh">#333333&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">border&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="kt">px&lt;/span> &lt;span class="ni">solid&lt;/span> &lt;span class="mh">#eeeeee&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">@include&lt;/span>&lt;span class="nd"> dark-mode&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">background-color&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mh">#1a202c&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">color&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mh">#e2e8f0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">border-color&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mh">#2d3748&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>यह विधि सहज है, लेकिन संकलित CSS फ़ाइल का आकार आसानी से बढ़ सकता है (क्योंकि मीडिया क्वेरी प्रत्येक चयनकर्ता में डुप्लिकेट की जाती है), इसलिए वर्तमान प्रवृत्ति CSS वेरिएबल्स (Custom Properties) के आसपास केंद्रित डिज़ाइन में स्थानांतरित होने की है।&lt;/p>
&lt;hr>
&lt;h2 id="5-चतर-image-और-svg-डरक-मड-अनकलन">5. चित्र (Image) और SVG डार्क मोड अनुकूलन
&lt;/h2>&lt;p>भले ही टेक्स्ट और बैकग्राउंड के लिए रंग डिज़ाइन पूरा हो गया हो, यदि सामग्री के रूप में रखे गए चित्र और आइकन (SVG) लाइट मोड में रहते हैं, तो वे डार्क मोड में बहुत चमकीले और अलग दिखाई देंगे। इनके लिए अनुकूलन (optimization) भी आवश्यक है।&lt;/p>
&lt;h3 id="51-css-फलटर-चतर-क-चमक-क-कम-करन-क-लए">5.1 CSS फ़िल्टर चित्र की चमक को कम करने के लिए
&lt;/h3>&lt;p>फ़ोटो जैसी बिटमैप छवियों को डार्क मोड में प्रदर्शित किए जाने पर वे बहुत चमकीली हो सकती हैं। CSS &lt;code>filter&lt;/code> प्रॉपर्टी का उपयोग करके चित्र की चमक (brightness) और कंट्रास्ट को थोड़ा कम करने से, इसे डार्क थीम UI में स्वाभाविक रूप से मिश्रित किया जा सकता है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-css" data-lang="css">&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>&lt;span class="nt">data-theme&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="nt">img&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nd">not&lt;/span>&lt;span class="o">([&lt;/span>&lt;span class="nt">src&lt;/span>&lt;span class="o">*=&lt;/span>&lt;span class="s2">&amp;#34;.svg&amp;#34;&lt;/span>&lt;span class="o">])&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">/* चमक कम करें और कंट्रास्ट थोड़ा बढ़ाएं */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">filter&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">brightness&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">0.8&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nb">contrast&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mf">1.1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">transition&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="k">filter&lt;/span> &lt;span class="mf">0.3&lt;/span>&lt;span class="kt">s&lt;/span> &lt;span class="kc">ease&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="o">[&lt;/span>&lt;span class="nt">data-theme&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;dark&amp;#39;&lt;/span>&lt;span class="o">]&lt;/span> &lt;span class="nt">img&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="nd">hover&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">/* होवर पर मूल चमक में वापस लौटें (यदि उपयोगकर्ता विवरण देखना चाहता है) */&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">filter&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">brightness&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="nb">contrast&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="52-picture-टग-क-मधयम-स-छवय-क-सवच-करन">5.2 &lt;code>&amp;lt;picture&amp;gt;&lt;/code> टैग के माध्यम से छवियों को स्विच करना
&lt;/h3>&lt;p>लोगो छवियाँ या व्याख्यात्मक आरेख (जैसे एक निश्चित सफेद पृष्ठभूमि वाले JPEG) को केवल फ़िल्टरिंग द्वारा नियंत्रित नहीं किया जा सकता है। उस स्थिति में, डार्क मोड के लिए एक अलग चित्र फ़ाइल पर स्विच करने के लिए HTML &lt;code>&amp;lt;picture&amp;gt;&lt;/code> तत्व और मीडिया क्वेरीज़ का उपयोग करना सही तरीका है।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">picture&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- डार्क मोड OS सेटिंग वाले उपयोगकर्ताओं को यह दिखाएं --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">source&lt;/span> &lt;span class="na">srcset&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;/img/logo-dark.png&amp;#34;&lt;/span> &lt;span class="na">media&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;(prefers-color-scheme: dark)&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c">&amp;lt;!-- डिफ़ॉल्ट (लाइट मोड) --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">img&lt;/span> &lt;span class="na">src&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;/img/logo-light.png&amp;#34;&lt;/span> &lt;span class="na">alt&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;साइट का लोगो&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">picture&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>※हालाँकि, यह विधि &lt;code>localStorage&lt;/code> आदि का उपयोग करके मैन्युअल टॉगलिंग से जुड़ी नहीं है (यह केवल OS सेटिंग्स पर निर्भर करती है)। इसलिए, यदि आपने मैन्युअल स्विचिंग लागू की है, तो आपको JS का उपयोग करके छवि के &lt;code>src&lt;/code> को गतिशील रूप से फिर से लिखना होगा, या CSS क्लास का उपयोग करके &lt;code>display: none&lt;/code> को टॉगल करना होगा।&lt;/p>
&lt;h3 id="53-svg-आइकन-क-लए-currentcolor-समरथन">5.3 SVG आइकन के लिए &lt;code>currentColor&lt;/code> समर्थन
&lt;/h3>&lt;p>आइकन के लिए उपयोग किए जाने वाले इनलाइन SVG को पैरेंट एलिमेंट के टेक्स्ट रंग से लिंक करना सबसे चतुर तरीका है। SVG के &lt;code>fill&lt;/code> या &lt;code>stroke&lt;/code> एट्रिब्यूट के लिए &lt;code>currentColor&lt;/code> निर्दिष्ट करें।&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-html" data-lang="html">&lt;span class="line">&lt;span class="cl">&lt;span class="c">&amp;lt;!-- CSS color प्रॉपर्टी का मान (जैसे var(--text-primary)) स्वचालित रूप से लागू किया जाता है --&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">svg&lt;/span> &lt;span class="na">viewBox&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;0 0 24 24&amp;#34;&lt;/span> &lt;span class="na">fill&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;currentColor&amp;#34;&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">&amp;lt;&lt;/span>&lt;span class="nt">path&lt;/span> &lt;span class="na">d&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;M12 2L2 22h20L12 2z&amp;#34;&lt;/span> &lt;span class="p">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">&amp;lt;/&lt;/span>&lt;span class="nt">svg&lt;/span>&lt;span class="p">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>नतीजतन, जब डार्क मोड चालू होता है और पैरेंट एलिमेंट का टेक्स्ट रंग सफेद हो जाता है, तो SVG आइकन भी अपने आप सफेद हो जाएगा।&lt;/p>
&lt;hr>
&lt;h2 id="6-नषकरष-टकऊ-डरक-मड-डजइन-क-ओर">6. निष्कर्ष: टिकाऊ डार्क मोड डिज़ाइन की ओर
&lt;/h2>&lt;p>ब्लॉग या वेब एप्लिकेशन में उच्च गुणवत्ता वाले डार्क मोड को लागू करने के लिए, एक CSS डिज़ाइन आवश्यक है जो निम्नलिखित बिंदुओं को कवर करता हो:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>CSS Custom Properties का लाभ उठाएं&lt;/strong>: रंग हार्डकोडिंग से बचें और अर्थपूर्ण चर नामों (उदा. &lt;code>--bg-primary&lt;/code>) का उपयोग करके उन्हें अमूर्त करें।&lt;/li>
&lt;li>&lt;strong>OKLCH कलर स्पेस अपनाएं&lt;/strong>: WCAG 2.1 AAA के अनुरूप अत्यधिक सुलभ कंट्रास्ट अनुपात (7:1 या अधिक) को एक अवधारणात्मक रूप से समान कलर स्पेस का उपयोग करके तार्किक रूप से डिज़ाइन करें।&lt;/li>
&lt;li>&lt;strong>FOUC को सख्ती से रोकें&lt;/strong>: SSR और कुकीज़ को जोड़कर, या &lt;code>&amp;lt;head&amp;gt;&lt;/code> के अंदर ब्लॉकिंग इनलाइन स्क्रिप्ट का उपयोग करके शुरुआती लोड पर स्क्रीन की झिलमिलाहट को पूरी तरह से खत्म करें।&lt;/li>
&lt;li>&lt;strong>मीडिया और एसेट को अनुकूलित करें&lt;/strong>: टेक्स्ट के अलावा अन्य तत्वों को डार्क थीम में मिलाने के लिए &lt;code>filter: brightness()&lt;/code>, &lt;code>currentColor&lt;/code>, और &lt;code>&amp;lt;picture&amp;gt;&lt;/code> टैग का पूरा उपयोग करें।&lt;/li>
&lt;/ol>
&lt;p>यह कहा जा सकता है कि केवल &amp;ldquo;रंगों को उलटने&amp;rdquo; से परे ये सावधानीपूर्वक विचार एक आधुनिक ब्लॉग की शर्तें हैं जो उपयोगकर्ताओं द्वारा पसंद किया जाएगा और पढ़ने का एक उत्कृष्ट अनुभव (reading experience) प्रदान करेगा जो आँखों पर कम थकाने वाला है। यदि आप एक डेवलपर हैं जो डार्क मोड लागू करने वाले हैं, तो कृपया इस लेख में दिए गए डिज़ाइन पैटर्न को संदर्भ के रूप में उपयोग करें।&lt;/p></description></item></channel></rss>