गतिशील और रिस्पॉन्सिव वेब डिज़ाइन बनाने के लिए CSS @when नियम की शक्ति को अनलॉक करें। कंटेनर क्वेरी, कस्टम स्टेट्स और अन्य मानदंडों के आधार पर सशर्त रूप से स्टाइल लागू करना सीखें।
CSS @when नियम में महारत हासिल करना: गतिशील वेब डिज़ाइन के लिए सशर्त स्टाइल एप्लीकेशन
CSS @when नियम, जो CSS कंडीशनल रूल्स मॉड्यूल लेवल 5 स्पेसिफिकेशन का हिस्सा है, कुछ शर्तों के आधार पर सशर्त रूप से स्टाइल लागू करने का एक शक्तिशाली तरीका प्रदान करता है। यह पारंपरिक मीडिया क्वेरी से आगे जाता है, जिससे कंटेनर आकार, कस्टम गुणों और यहां तक कि तत्वों की स्थिति के आधार पर स्टाइलिंग पर अधिक सूक्ष्म नियंत्रण मिलता है। यह आपके वेब डिज़ाइन की प्रतिक्रियाशीलता और अनुकूलनशीलता को काफी बढ़ा सकता है, जिससे विभिन्न उपकरणों और संदर्भों में बेहतर उपयोगकर्ता अनुभव प्राप्त होता है।
@when नियम के मूल सिद्धांतों को समझना
इसके मूल में, @when नियम CSS स्टाइल के एक ब्लॉक को केवल तभी निष्पादित करने के लिए एक तंत्र प्रदान करता है जब कोई विशिष्ट शर्त पूरी होती है। यह प्रोग्रामिंग भाषाओं में if स्टेटमेंट के समान है। आइए सिंटैक्स को तोड़ते हैं:
@when condition {
/* CSS नियम जो शर्त सही होने पर लागू होंगे */
}
condition विभिन्न कारकों पर आधारित हो सकती है, जिनमें शामिल हैं:
- कंटेनर क्वेरी: व्यूपोर्ट के बजाय उनके कंटेनिंग तत्व के आकार के आधार पर तत्वों को स्टाइल करना।
- कस्टम स्टेट्स: उपयोगकर्ता इंटरैक्शन या एप्लिकेशन स्टेट्स पर प्रतिक्रिया करना।
- CSS वेरिएबल्स: CSS कस्टम गुणों के मान के आधार पर स्टाइल लागू करना।
- रेंज क्वेरी: यह जाँचना कि कोई मान एक विशिष्ट सीमा के भीतर आता है या नहीं।
@when की शक्ति वास्तव में कंपोनेंट-आधारित स्टाइलिंग बनाने की क्षमता में निहित है। आप एक कंपोनेंट के भीतर स्टाइलिंग लॉजिक को एनकैप्सुलेट कर सकते हैं और यह सुनिश्चित कर सकते हैं कि यह केवल तभी लागू हो जब कंपोनेंट कुछ मानदंडों को पूरा करता है, चाहे आसपास के पेज लेआउट कुछ भी हो।
@when के साथ कंटेनर क्वेरी
कंटेनर क्वेरी रिस्पॉन्सिव डिज़ाइन के लिए एक गेम-चेंजर हैं। वे तत्वों को केवल व्यूपोर्ट की चौड़ाई के आधार पर नहीं, बल्कि उनके पैरेंट कंटेनर के आयामों के आधार पर अपनी स्टाइलिंग को अनुकूलित करने की अनुमति देते हैं। यह अधिक लचीले और पुन: प्रयोज्य कंपोनेंट्स को सक्षम बनाता है। एक कार्ड कंपोनेंट की कल्पना करें जो इस आधार पर अलग-अलग प्रदर्शित होता है कि इसे एक संकीर्ण साइडबार में रखा गया है या एक विस्तृत मुख्य सामग्री क्षेत्र में। @when नियम इसे अविश्वसनीय रूप से सीधा बनाता है।
बेसिक कंटेनर क्वेरी उदाहरण
सबसे पहले, आपको एक कंटेनर घोषित करने की आवश्यकता है। आप इसे container-type प्रॉपर्टी का उपयोग करके कर सकते हैं:
.container {
container-type: inline-size;
}
inline-size कंटेनर को उसके इनलाइन आकार (क्षैतिज लेखन मोड में चौड़ाई, ऊर्ध्वाधर लेखन मोड में ऊंचाई) के आधार पर क्वेरी करने की अनुमति देता है। आप दोनों आयामों को क्वेरी करने के लिए size का उपयोग भी कर सकते हैं, या क्वेरी कंटेनर न बनाने के लिए normal का उपयोग कर सकते हैं।
अब, आप कंटेनर के आकार के आधार पर स्टाइल लागू करने के लिए @container (अक्सर @when के साथ संयोजन में उपयोग किया जाता है) का उपयोग कर सकते हैं:
@container (min-width: 300px) {
.card {
flex-direction: row;
align-items: center;
}
.card__image {
width: 100px;
height: 100px;
}
}
@container (max-width: 299px) {
.card {
flex-direction: column;
align-items: flex-start;
}
.card__image {
width: 100%;
height: auto;
}
}
इस उदाहरण में, .card का लेआउट कंटेनर की चौड़ाई के आधार पर बदलता है। जब कंटेनर कम से कम 300px चौड़ा होता है, तो कार्ड छवि और टेक्स्ट को अगल-बगल प्रदर्शित करता है। जब यह संकीर्ण होता है, तो वे लंबवत रूप से स्टैक हो जाते हैं।
यहां बताया गया है कि हम समान परिणाम प्राप्त करने के लिए @when का उपयोग कैसे कर सकते हैं, संभावित रूप से ब्राउज़र समर्थन और कोडिंग वरीयता के आधार पर @container के साथ संयुक्त (क्योंकि @when केवल कंटेनर आकार से परे कुछ परिदृश्यों में अधिक लचीलापन प्रदान करता है):
@container card-container (min-width: 300px) {
@when container(card-container) {
.card {
flex-direction: row;
align-items: center;
}
.card__image {
width: 100px;
height: 100px;
}
}
}
@container card-container (max-width: 299px) {
@when container(card-container) {
.card {
flex-direction: column;
align-items: flex-start;
}
.card__image {
width: 100%;
height: auto;
}
}
}
इस मामले में, `card-container` एक कंटेनर नाम है जिसे `@container` के साथ असाइन किया गया है, और `@when` में `container(card-container)` यह जाँचता है कि निर्दिष्ट कंटेनर संदर्भ सक्रिय है या नहीं। ध्यान दें: `container()` फ़ंक्शन और सटीक सिंटैक्स के लिए समर्थन ब्राउज़रों और संस्करणों में भिन्न हो सकता है। लागू करने से पहले ब्राउज़र संगतता तालिकाओं से परामर्श करें।
व्यावहारिक अंतर्राष्ट्रीय उदाहरण
- ई-कॉमर्स उत्पाद लिस्टिंग: श्रेणी पृष्ठ ग्रिड में उपलब्ध स्थान के आधार पर उत्पाद लिस्टिंग को अलग-अलग प्रदर्शित करें। एक छोटा कंटेनर केवल उत्पाद की छवि और कीमत दिखा सकता है, जबकि एक बड़ा कंटेनर एक संक्षिप्त विवरण और रेटिंग शामिल कर सकता है। यह अलग-अलग इंटरनेट स्पीड और डिवाइस प्रकार वाले विभिन्न क्षेत्रों में उपयोगी है, जो विकासशील देशों में हाई-एंड डेस्कटॉप और कम-बैंडविड्थ मोबाइल कनेक्शन दोनों पर अनुकूलित अनुभव की अनुमति देता है।
- समाचार आलेख सारांश: समाचार वेबसाइट के होमपेज पर प्रदर्शित लेख सारांश की लंबाई को कंटेनर की चौड़ाई के आधार पर समायोजित करें। एक संकीर्ण साइडबार में, केवल एक शीर्षक और कुछ शब्द दिखाएं; मुख्य सामग्री क्षेत्र में, एक अधिक विस्तृत सारांश प्रदान करें। भाषा के अंतर पर विचार करें, जहां कुछ भाषाओं (जैसे, जर्मन) में लंबे शब्द और वाक्यांश होते हैं, जो सारांश के लिए आवश्यक स्थान को प्रभावित करते हैं।
- डैशबोर्ड विजेट्स: डैशबोर्ड विजेट्स के लेआउट को उनके कंटेनर आकार के आधार पर संशोधित करें। एक छोटा विजेट एक साधारण चार्ट प्रदर्शित कर सकता है, जबकि एक बड़ा विजेट विस्तृत आँकड़े और नियंत्रण शामिल कर सकता है। उपयोगकर्ता के विशिष्ट डिवाइस और स्क्रीन आकार के लिए डैशबोर्ड अनुभव को अनुकूलित करें, डेटा विज़ुअलाइज़ेशन के लिए सांस्कृतिक वरीयताओं पर विचार करें। उदाहरण के लिए, कुछ संस्कृतियाँ पाई चार्ट पर बार चार्ट पसंद कर सकती हैं।
कस्टम स्टेट्स के साथ @when का उपयोग
कस्टम स्टेट्स आपको तत्वों के लिए अपने स्वयं के स्टेट्स को परिभाषित करने और उन स्टेट्स के आधार पर स्टाइल परिवर्तनों को ट्रिगर करने की अनुमति देते हैं। यह विशेष रूप से जटिल वेब अनुप्रयोगों में उपयोगी है जहां पारंपरिक CSS स्यूडो-क्लास जैसे :hover और :active अपर्याप्त हैं। जबकि ब्राउज़र कार्यान्वयन में कस्टम स्टेट्स अभी भी विकसित हो रहे हैं, @when नियम समर्थन परिपक्व होने पर इन स्टेट्स के आधार पर स्टाइल को नियंत्रित करने के लिए एक आशाजनक अवसर प्रदान करता है।
अवधारणात्मक उदाहरण (स्टेट्स का अनुकरण करने के लिए CSS वेरिएबल्स का उपयोग करके)
चूंकि नेटिव कस्टम स्टेट समर्थन अभी तक सार्वभौमिक रूप से उपलब्ध नहीं है, हम इसे CSS वेरिएबल्स और जावास्क्रिप्ट का उपयोग करके अनुकरण कर सकते हैं।
/* CSS */
.my-element {
--is-active: 0;
background-color: #eee;
}
@when var(--is-active) = 1 {
.my-element {
background-color: #aaf;
}
}
/* JavaScript */
const element = document.querySelector('.my-element');
element.addEventListener('click', () => {
element.style.setProperty('--is-active', element.style.getPropertyValue('--is-active') === '0' ? '1' : '0');
});
इस उदाहरण में, हम तत्व की स्थिति को ट्रैक करने के लिए एक CSS चर --is-active का उपयोग करते हैं। जावास्क्रिप्ट कोड इस चर के मान को टॉगल करता है जब तत्व पर क्लिक किया जाता है। @when नियम तब एक अलग पृष्ठभूमि रंग लागू करता है जब --is-active 1 के बराबर होता है। जबकि यह एक समाधान है, यह स्थिति के आधार पर सशर्त स्टाइलिंग की अवधारणा को प्रदर्शित करता है।
सच्चे कस्टम स्टेट्स के साथ भविष्य के संभावित उपयोग के मामले
जब सच्चे कस्टम स्टेट्स लागू किए जाते हैं, तो सिंटैक्स कुछ इस तरह दिख सकता है (ध्यान दें: यह अनुमानित है और प्रस्तावों पर आधारित है):
.my-element {
/* प्रारंभिक स्टाइल */
}
@when :state(my-custom-state) {
.my-element {
/* स्टाइल जब कस्टम स्टेट सक्रिय हो */
}
}
फिर आप कस्टम स्टेट को सेट और अनसेट करने के लिए जावास्क्रिप्ट का उपयोग करेंगे:
element.states.add('my-custom-state'); // स्टेट को सक्रिय करें
element.states.remove('my-custom-state'); // स्टेट को निष्क्रिय करें
यह एप्लिकेशन लॉजिक के आधार पर स्टाइलिंग पर अविश्वसनीय रूप से सूक्ष्म नियंत्रण की अनुमति देगा।
अंतर्राष्ट्रीयकरण और स्थानीयकरण विचार
- दाएं-से-बाएं भाषाएं (RTL): अरबी और हिब्रू जैसी RTL भाषाओं के लिए कंपोनेंट्स के लेआउट और स्टाइलिंग को अनुकूलित करने के लिए कस्टम स्टेट्स का उपयोग किया जा सकता है। उदाहरण के लिए, जब एक विशिष्ट RTL स्टेट सक्रिय हो तो नेविगेशन मेनू के लेआउट को मिरर करना।
- पहुँच (Accessibility): बेहतर पहुँच सुविधाएँ प्रदान करने के लिए कस्टम स्टेट्स का उपयोग करें, जैसे कि केंद्रित तत्वों को हाइलाइट करना या जब उपयोगकर्ता इंटरैक्शन स्टेट ट्रिगर हो तो वैकल्पिक टेक्स्ट विवरण प्रदान करना। सुनिश्चित करें कि इन स्टेट परिवर्तनों को सहायक तकनीकों को प्रभावी ढंग से संप्रेषित किया जाता है।
- सांस्कृतिक डिज़ाइन प्राथमिकताएँ: सांस्कृतिक डिज़ाइन प्राथमिकताओं के आधार पर कंपोनेंट्स की दृश्य उपस्थिति को अनुकूलित करें। उदाहरण के लिए, उपयोगकर्ता के लोकेल या भाषा के आधार पर विभिन्न रंग योजनाओं या आइकन सेट का उपयोग करना।
CSS वेरिएबल्स और रेंज क्वेरी के साथ काम करना
@when नियम का उपयोग CSS वेरिएबल्स के साथ गतिशील और अनुकूलन योग्य स्टाइल बनाने के लिए भी किया जा सकता है। आप एक CSS चर के मान के आधार पर स्टाइल लागू कर सकते हैं, जिससे उपयोगकर्ता बिना कोई कोड लिखे आपकी वेबसाइट की उपस्थिति को अनुकूलित कर सकते हैं।
उदाहरण: थीम स्विचिंग
:root {
--theme-color: #fff;
--text-color: #000;
}
body {
background-color: var(--theme-color);
color: var(--text-color);
}
@when var(--theme-color) = #000 {
body {
--text-color: #fff;
}
}
इस उदाहरण में, --theme-color चर बॉडी के पृष्ठभूमि रंग को नियंत्रित करता है। जब इसे #000 पर सेट किया जाता है, तो @when नियम --text-color को #fff में बदल देता है, जिससे एक डार्क थीम बनती है। उपयोगकर्ता तब जावास्क्रिप्ट का उपयोग करके --theme-color के मान को बदल सकते हैं या उपयोगकर्ता स्टाइलशीट में एक अलग CSS चर सेट कर सकते हैं।
रेंज क्वेरी
रेंज क्वेरी आपको यह जांचने की अनुमति देती है कि कोई मान एक विशिष्ट सीमा के भीतर आता है या नहीं। यह अधिक जटिल सशर्त स्टाइल बनाने के लिए उपयोगी हो सकता है।
@when (400px <= width <= 800px) {
.element {
/* स्टाइल जो तब लागू होते हैं जब चौड़ाई 400px और 800px के बीच होती है */
}
}
हालांकि, @when के भीतर रेंज क्वेरी के लिए सटीक सिंटैक्स और समर्थन भिन्न हो सकता है। नवीनतम विनिर्देशों और ब्राउज़र संगतता तालिकाओं से परामर्श करना उचित है। कंटेनर क्वेरी अक्सर आकार-आधारित स्थितियों के लिए एक अधिक मजबूत और अच्छी तरह से समर्थित विकल्प प्रदान करती हैं।
वैश्विक पहुँच और उपयोगकर्ता प्राथमिकताएँ
- उच्च कंट्रास्ट थीम्स: उच्च कंट्रास्ट थीम लागू करने के लिए CSS वेरिएबल्स और
@whenनियम का उपयोग करें जो दृश्य हानि वाले उपयोगकर्ताओं को पूरा करते हैं। उपयोगकर्ताओं को उनकी विशिष्ट आवश्यकताओं को पूरा करने के लिए रंग पैलेट और फ़ॉन्ट आकार को अनुकूलित करने की अनुमति दें। - कम गति (Reduced Motion): जब उपयोगकर्ता ने अपने ऑपरेटिंग सिस्टम में "कम गति" सेटिंग सक्षम की हो तो एनिमेशन और ट्रांज़िशन को अक्षम करने के लिए CSS वेरिएबल्स का उपयोग करके कम गति के लिए उपयोगकर्ता की प्राथमिकता का सम्मान करें। अधिक सटीक नियंत्रण के लिए
prefers-reduced-motionमीडिया क्वेरी को@whenके साथ जोड़ा जा सकता है। - फ़ॉन्ट आकार समायोजन: उपयोगकर्ताओं को CSS वेरिएबल्स का उपयोग करके वेबसाइट के फ़ॉन्ट आकार को समायोजित करने की अनुमति दें। सभी उपयोगकर्ताओं के लिए पठनीयता और प्रयोज्यता सुनिश्चित करते हुए, विभिन्न फ़ॉन्ट आकारों को समायोजित करने के लिए तत्वों के लेआउट और स्पेसिंग को अनुकूलित करने के लिए
@whenनियम का उपयोग करें।
सर्वोत्तम अभ्यास और विचार
- ब्राउज़र संगतता:
@whenनियम अभी भी अपेक्षाकृत नया है, और ब्राउज़र समर्थन अभी तक सार्वभौमिक नहीं है। उत्पादन में इसका उपयोग करने से पहले हमेशा ब्राउज़र संगतता तालिकाओं की जाँच करें। पुराने ब्राउज़रों के लिए पॉलीफ़िल या फ़ॉलबैक समाधानों का उपयोग करने पर विचार करें। 2024 के अंत तक, ब्राउज़र समर्थन सीमित बना हुआ है, और@containerपर बहुत अधिक भरोसा करना और जावास्क्रिप्ट फ़ॉलबैक के साथ CSS वेरिएबल्स का विवेकपूर्ण उपयोग अक्सर एक अधिक व्यावहारिक दृष्टिकोण है। - विशिष्टता (Specificity):
@whenनियम का उपयोग करते समय CSS विशिष्टता का ध्यान रखें। सुनिश्चित करें कि आपकी सशर्त स्टाइल किसी भी परस्पर विरोधी स्टाइल को ओवरराइड करने के लिए पर्याप्त विशिष्ट हैं। - रखरखाव योग्यता (Maintainability): अपने कोड को अधिक पठनीय और रखरखाव योग्य बनाने के लिए CSS वेरिएबल्स और टिप्पणियों का उपयोग करें। अत्यधिक जटिल सशर्त नियम बनाने से बचें जिन्हें समझना और डीबग करना मुश्किल है।
- प्रदर्शन (Performance): जबकि
@whenनियम पार्स किए जाने वाले CSS की मात्रा को कम करके प्रदर्शन में सुधार कर सकता है, इसका विवेकपूर्ण उपयोग करना महत्वपूर्ण है। सशर्त नियमों का अत्यधिक उपयोग प्रदर्शन पर नकारात्मक प्रभाव डाल सकता है, खासकर पुराने उपकरणों पर। - प्रगतिशील वृद्धि (Progressive Enhancement): यह सुनिश्चित करने के लिए प्रगतिशील वृद्धि का उपयोग करें कि आपकी वेबसाइट अच्छी तरह से काम करती है, भले ही ब्राउज़र
@whenनियम का समर्थन न करता हो। सभी उपयोगकर्ताओं के लिए एक बुनियादी, कार्यात्मक अनुभव प्रदान करें और फिर उन ब्राउज़रों के लिए इसे उत्तरोत्तर बढ़ाएं जो सुविधा का समर्थन करते हैं।
सशर्त स्टाइलिंग का भविष्य
@when नियम CSS में एक महत्वपूर्ण कदम का प्रतिनिधित्व करता है। यह अधिक अभिव्यंजक और गतिशील स्टाइलिंग की अनुमति देता है, जो अधिक जटिल और रिस्पॉन्सिव वेब अनुप्रयोगों के लिए मार्ग प्रशस्त करता है। जैसे-जैसे ब्राउज़र समर्थन में सुधार होता है और विनिर्देश विकसित होता है, @when नियम वेब डेवलपर्स के लिए एक आवश्यक उपकरण बनने की संभावना है।
CSS Houdini में और प्रगति और कस्टम स्टेट्स का मानकीकरण @when की क्षमताओं को और बढ़ाएगा, जिससे स्टाइलिंग पर और भी अधिक सूक्ष्म नियंत्रण और जावास्क्रिप्ट के साथ अधिक सहज एकीकरण की अनुमति मिलेगी।
निष्कर्ष
CSS @when नियम कंटेनर क्वेरी, कस्टम स्टेट्स, CSS वेरिएबल्स और अन्य मानदंडों के आधार पर सशर्त रूप से स्टाइल लागू करने का एक शक्तिशाली और लचीला तरीका प्रदान करता है। जबकि ब्राउज़र समर्थन अभी भी विकसित हो रहा है, यह गतिशील और रिस्पॉन्सिव वेब डिज़ाइन बनाने के लिए आपके शस्त्रागार में एक मूल्यवान उपकरण है जो विभिन्न संदर्भों और उपयोगकर्ता प्राथमिकताओं के अनुकूल है। @when नियम के मूल सिद्धांतों को समझकर और सर्वोत्तम प्रथाओं का पालन करके, आप इसकी पूरी क्षमता को अनलॉक कर सकते हैं और वास्तव में असाधारण उपयोगकर्ता अनुभव बना सकते हैं। संगतता और इष्टतम प्रदर्शन सुनिश्चित करने के लिए हमेशा विभिन्न ब्राउज़रों और उपकरणों पर पूरी तरह से परीक्षण करना याद रखें।
जैसे-जैसे वेब का विकास जारी है, @when जैसी नई CSS सुविधाओं को अपनाना वक्र से आगे रहने और वैश्विक दर्शकों को अत्याधुनिक वेब अनुभव प्रदान करने के लिए महत्वपूर्ण है।