सीएसएस पॉडकास्ट - 044: ट्रांज़िशन
किसी वेबसाइट का इस्तेमाल करते समय, आपको कई एलिमेंट में स्टेटस दिख सकता है. उदाहरण के लिए, ड्रॉपडाउन खुले या बंद हो सकते हैं. बटन पर फ़ोकस करने या कर्सर घुमाने पर, उनका रंग बदल सकता है. मॉडल दिखते और गायब होते हैं.
डिफ़ॉल्ट रूप से, सीएसएस इन स्थितियों की स्टाइल को तुरंत स्विच कर देती है.
सीएसएस ट्रांज़िशन का इस्तेमाल करके, हम एलिमेंट की शुरुआती स्थिति और टारगेट स्टेटस के बीच इंटरपोलेशन कर सकते हैं. इन दोनों के बीच ट्रांज़िशन, उपयोगकर्ता अनुभव को बेहतर बनाता है. ऐसा, विज़ुअल निर्देश, सहायता, और इंटरैक्शन के असर और वजह के बारे में सुझाव देकर किया जाता है.
ट्रांज़िशन प्रॉपर्टी
सीएसएस में ट्रांज़िशन का इस्तेमाल करने के लिए, अलग-अलग ट्रांज़िशन प्रॉपर्टी या transition
शॉर्टहैंड प्रॉपर्टी का इस्तेमाल किया जा सकता है.
transition-property
transition-property
प्रॉपर्टी से यह तय होता है कि किस स्टाइल में ट्रांज़िशन करना है.
.my-element {
transition-property: background-color;
}
transition-property
, कॉमा लगाकर अलग की गई सूची में एक या उससे ज़्यादा सीएसएस प्रॉपर्टी के नाम स्वीकार करता है.
इसके अलावा, transition-property: all
का इस्तेमाल करके यह भी बताया जा सकता है कि हर प्रॉपर्टी को ट्रांज़िशन करना चाहिए.
transition-duration
transition-duration
प्रॉपर्टी का इस्तेमाल, ट्रांज़िशन पूरा होने में लगने वाले समय की जानकारी देने के लिए किया जाता है.
transition-duration
, समय की यूनिट को सेकंड (s
) या मिलीसेकंड (ms
) में स्वीकार करता है. डिफ़ॉल्ट रूप से, यह 0s
पर सेट होता है.
transition-timing-function
transition-duration
के दौरान सीएसएस ट्रांज़िशन की स्पीड में बदलाव करने के लिए, transition-timing-function
प्रॉपर्टी का इस्तेमाल करें.
डिफ़ॉल्ट रूप से, सीएसएस आपके एलिमेंट को एक ही स्पीड (transition-timing-function: linear
) पर ट्रांज़िशन करेगी. हालांकि, लीनियर ट्रांज़िशन कुछ हद तक अमान्य लग सकते हैं: असल ज़िंदगी में, ऑब्जेक्ट का वज़न होता है और वे तुरंत रुक और शुरू नहीं हो सकते. ट्रांज़िशन में धीरे-धीरे या तेज़ी से बदलाव करने से, ट्रांज़िशन ज़्यादा बेहतर और नैचुरल लगते हैं.
सीएसएस ऐनिमेशन के बारे में हमारे मॉड्यूल में, टाइमिंग फ़ंक्शन के बारे में अच्छी जानकारी दी गई है.
रीयल-टाइम में अलग-अलग टाइमिंग फ़ंक्शन आज़माने के लिए, DevTools का इस्तेमाल किया जा सकता है.
transition-delay
ट्रांज़िशन शुरू होने का समय बताने के लिए, transition-delay
प्रॉपर्टी का इस्तेमाल करें. अगर transition-duration
की वैल्यू नहीं दी गई है, तो ट्रांज़िशन तुरंत शुरू हो जाएंगे, क्योंकि डिफ़ॉल्ट वैल्यू 0s
होती है. इस प्रॉपर्टी में समय की यूनिट डाली जा सकती है. जैसे, सेकंड (s
) या मिलीसेकंड (ms
).
यह प्रॉपर्टी, ट्रांज़िशन को अलग-अलग समय पर दिखाने के लिए काम की है. इसके लिए, ग्रुप में मौजूद हर एलिमेंट के लिए transition-delay
को ज़्यादा सेट किया जाता है.
transition-delay
, डीबग करने के लिए भी मददगार है. देरी को नेगेटिव वैल्यू पर सेट करने से, टाइमलाइन में आगे ट्रांज़िशन शुरू हो सकता है.
shorthand: transition
ज़्यादातर सीएसएस प्रॉपर्टी की तरह, इसका भी शॉर्टहैंड वर्शन होता है. transition
में transition-property
, transition-duration
, transition-timing-function
, और transition-delay
शामिल हैं.
.longhand {
transition-property: transform;
transition-duration: 300ms;
transition-timing-function: ease-in-out;
transition-delay: 0s;
}
.shorthand {
transition: transform 300ms ease-in-out 0s;
}
क्या-क्या ट्रांज़िशन किया जा सकता है और क्या-क्या नहीं?
सीएसएस लिखते समय, यह तय किया जा सकता है कि किन प्रॉपर्टी में ऐनिमेशन वाले ट्रांज़िशन होने चाहिए. ऐनिमेशन वाली सीएसएस प्रॉपर्टी की MDN की यह सूची देखें.
आम तौर पर, सिर्फ़ उन एलिमेंट को ट्रांज़िशन किया जा सकता है जिनकी शुरुआती और आखिरी स्थिति के बीच "मध्य स्थिति" हो सकती है. उदाहरण के लिए, font-family
के लिए ट्रांज़िशन नहीं जोड़े जा सकते, क्योंकि यह साफ़ तौर पर नहीं पता कि serif
और monospace
के बीच "मिडल स्टेट" कैसा दिखना चाहिए. दूसरी ओर, font-size
के लिए ट्रांज़िशन जोड़े जा सकते हैं, क्योंकि इसकी यूनिट एक लंबाई है, जिसे बीच में इंटरपोल किया जा सकता है.
यहां कुछ सामान्य प्रॉपर्टी दी गई हैं जिनमें ट्रांज़िशन किया जा सकता है.
डेटा को बदलना
transform
CSS प्रॉपर्टी को आम तौर पर ट्रांज़िशन किया जाता है, क्योंकि यह GPU की मदद से तेज़ी से काम करती है. इससे ऐनिमेशन बेहतर तरीके से चलता है और बैटरी भी कम खर्च होती है. इस प्रॉपर्टी की मदद से, किसी एलिमेंट को अपनी पसंद के मुताबिक स्केल, घुमाया, ट्रांसलेट या स्क्यू किया जा सकता है.
हमारे फ़ंक्शन मॉड्यूल में, ट्रांसफ़ॉर्म सेक्शन देखें.
रंग
इंटरैक्शन से पहले, उसके दौरान, और उसके बाद, रंग किसी चीज़ की स्थिति के बारे में काफ़ी जानकारी दे सकता है. उदाहरण के लिए, किसी बटन पर कर्सर घुमाने पर उसका रंग बदल सकता है. रंग बदलने से, उपयोगकर्ता को यह फ़ीडबैक मिल सकता है कि बटन पर क्लिक किया जा सकता है.
color
, background-color
, और border-color
प्रॉपर्टी ऐसी कुछ जगहें हैं जहां इंटरैक्शन पर रंग बदला जा सकता है.
रंग से जुड़ा हमारा मॉड्यूल देखें.
परछाई
आम तौर पर, ऊंचाई में बदलाव के बारे में बताने के लिए, शैडो में ट्रांज़िशन किया जाता है. जैसे, उपयोगकर्ता के फ़ोकस से.
शेड के बारे में हमारा मॉड्यूल देखें.
फ़िल्टर
filter
एक बेहतरीन सीएसएस प्रॉपर्टी है. इसकी मदद से, फ़्लाइट के दौरान ग्राफ़िक इफ़ेक्ट जोड़े जा सकते हैं. अलग-अलग filter
स्टेटस के बीच ट्रांज़िशन करने से, बेहतर नतीजे मिल सकते हैं.
फ़िल्टर के बारे में हमारा मॉड्यूल देखें.
ट्रांज़िशन ट्रिगर
आपकी सीएसएस में, स्टेटस में बदलाव और ऐसा इवेंट शामिल होना चाहिए जो सीएसएस ट्रांज़िशन चालू करने के लिए, स्टेटस में बदलाव को ट्रिगर करता हो. इस तरह के ट्रिगर का एक सामान्य उदाहरण, :hover
स्यूडो-क्लास है. यह स्यूडो-क्लास तब मैच होता है, जब उपयोगकर्ता अपने कर्सर को किसी एलिमेंट पर घुमाता है.
यहां कुछ ऐसे स्यूडो-क्लास और इवेंट की सूची दी गई है जो आपके एलिमेंट में स्थिति में बदलाव कर सकते हैं.
:hover
: कर्सर एलिमेंट पर होने पर मैच होता है.:focus
: एलिमेंट पर फ़ोकस होने पर मैच होता है.:focus-within
: एलिमेंट या उसके किसी वंश पर फ़ोकस होने पर मैच होता है.:target
: यह तब मैच होता है, जब मौजूदा यूआरएल का फ़्रैगमेंट, एलिमेंट के आईडी से मेल खाता हो.:active
: एलिमेंट के चालू होने पर मैच होता है. आम तौर पर, ऐसा तब होता है, जब उस पर माउस को दबाया जाता है.class
JavaScript से बदलाव: जब किसी एलिमेंट की सीएसएसclass
, JavaScript की मदद से बदलती है, तो सीएसएस, ज़रूरी शर्तें पूरी करने वाली उन प्रॉपर्टी को ट्रांज़िशन कर देगी जो बदल गई हैं.
ऑब्जेक्ट को सीन में शामिल करने या हटाने के लिए अलग-अलग ट्रांज़िशन
कर्सर घुमाने/फ़ोकस करने पर अलग-अलग transition
प्रॉपर्टी सेट करके, कुछ दिलचस्प इफ़ेक्ट बनाए जा सकते हैं.
.my-element {
background: red;
/* This transition is applied on the "exit" transition */
transition: background 2000ms ease-in;
}
.my-element:hover {
background: blue;
/* This transition is applied on the "enter" transition */
transition: background 150ms ease;
}
सुलभता से जुड़ी बातें
सीएसएस ट्रांज़िशन सभी के लिए नहीं हैं. कुछ लोगों को ट्रांज़िशन और ऐनिमेशन से, मोशन सिकनेस या असहजता महसूस हो सकती है. हालांकि, सीएसएस में prefers-reduced-motion
नाम की एक मीडिया सुविधा है. इससे पता चलता है कि उपयोगकर्ता ने अपने डिवाइस पर कम मोशन की प्राथमिकता दी है या नहीं.
/*
If the user has expressed their preference for
reduced motion, then don't use transitions.
*/
@media (prefers-reduced-motion: reduce) {
.my-element {
transition: none;
}
}
/*
If the browser understands the media query and the user
explicitly hasn't set a preference, then use transitions.
*/
@media (prefers-reduced-motion: no-preference) {
.my-element {
transition: transform 250ms ease;
}
}
मीडिया की इस सुविधा के बारे में ज़्यादा जानने के लिए, हमारी ब्लॉग पोस्ट prefers-reduced-motion: Sometimes less movement is more देखें.
प्रदर्शन संबंधी विचार
सीएसएस ट्रांज़िशन का इस्तेमाल करते समय, कुछ सीएसएस प्रॉपर्टी के लिए ट्रांज़िशन जोड़ने पर, आपको परफ़ॉर्मेंस से जुड़ी समस्याएं आ सकती हैं. उदाहरण के लिए, जब width
या height
जैसी प्रॉपर्टी में बदलाव होता है, तो वे पेज के बाकी हिस्सों में कॉन्टेंट को पुश करती हैं. इससे सीएसएस को ट्रांज़िशन के हर फ़्रेम के लिए, उन सभी एलिमेंट की नई पोज़िशन का हिसाब लगाना पड़ता है जिन पर असर पड़ा है. हमारा सुझाव है कि जब भी हो सके, transform
और opacity
जैसी प्रॉपर्टी का इस्तेमाल करें.
इस विषय के बारे में ज़्यादा जानने के लिए, बेहतर परफ़ॉर्मेंस वाले सीएसएस ऐनिमेशन के बारे में हमारी गाइड देखें.
देखें कि आपको क्या समझ आया
ट्रांज़िशन के बारे में अपनी जानकारी की जांच करना
ट्रांज़िशन की कौनसी प्रॉपर्टी, आसानी से होने वाले बदलाव के बारे में बताती है?
transition-duration
transition-easing
transition-cubic-bezier
transition-timing-function
animation-ease
transition-property: all
का इस्तेमाल करना सबसे सही तरीका है
all
की वैल्यू देने पर, परफ़ॉर्मेंस से जुड़ी समस्याएं आ सकती हैं. साथ ही, अनचाहे ट्रांज़िशन भी हो सकते हैं.सभी प्रॉपर्टी को ट्रांज़िशन किया जा सकता है.
font-family
जैसी प्रॉपर्टी में बदलाव नहीं किया जा सकता.