ट्रांजिशन और एनिमेशन

आप एक बटन में :hover कलर जोड़ते हैं और यह काम करता है, लेकिन बदलाव अचानक है: एक फ्रेम में यह नीला है, अगले में यह गहरा है, बीच में कुछ नहीं। एक छोटी सी फेड पूरे पेज को कम झटकेदार महसूस कराएगी। वह फेड एक ट्रांजिशन है, और एक बार जब आप दो स्टेट के बीच मोशन का वर्णन कर सकते हैं, तो वही टूल्स होवर इफेक्ट, कार्ड जो उठते हैं, और एक स्पिनर जो कुछ लोड होने के दौरान घूमता है, तक स्केल करते हैं। यह चैप्टर इस बारे में है कि CSS चीजों को कैसे मूव करता है, और उन्हें कैसे मूव करते हैं बिना पेज को उपयोग करने के लिए कठिन बनाए।
ट्रांजिशन
एक ट्रांजिशन ब्राउज़र को उसके पुरानी वैल्यू से नई वैल्यू तक एक प्रॉपर्टी को एनिमेट करने के लिए कहता है, बजाय उनके बीच स्नैप करने के। आप दो स्टेट का वर्णन करते हैं, सामान्य एक और होवर एक, और ट्रांजिशन बीच के फ्रेम को भर देता है।
यहाँ एक बटन है जो होवर पर कलर बदलता है। ट्रांजिशन के बिना कलर कूदता है; एक के साथ यह फेड होता है:
.btn {
background: #3b82f6;
transition: background 0.2s; /* 0.2 सेकंड में कलर को फेड करें */
}
.btn:hover {
background: #1d4ed8; /* एनिमेट करने के लिए नया स्टेट */
}आप transition को सामान्य स्टेट पर रखते हैं, :hover पर नहीं। इस तरह यह माउस के आने और जाने दोनों समय लागू होता है।
:hover पर नहीं, इसलिए यह आने और वापस जाने दोनों समय काम करता है। प्रॉपर्टी और एक अवधि के साथ शुरू करें और आपके पास पहले से ही एक काम करने वाली फेड है। ट्रांसफॉर्म
एक ट्रांसफॉर्म एक एलिमेंट को मूव करता है, स्केल करता है, या घुमाता है बिना अपने चारों ओर की कोई चीज़ को बाधित किए। यह वह चीज़ है जिसे आप आमतौर पर एनिमेट करना चाहते हैं, क्योंकि यह स्मूथ दिखता है और पड़ोसियों को धकेलता नहीं है।
तीन हैं जिन्हें आप लगातार इस्तेमाल करेंगे:
.card:hover {
transform: translateY(-4px); /* 4 पिक्सेल ऊपर मूव करें */
}
.icon:hover {
transform: scale(1.1); /* अपने आकार के 110% तक बढ़ें */
}
.arrow.open {
transform: rotate(90deg); /* एक चौथाई मोड़ दक्षिणावर्त घुमाएं */
}translate मूव करता है, scale रिसाइज़ करता है, और rotate घुमाता है। इनमें से किसी को भी ट्रांजिशन के साथ जोड़ें और आपको एक कार्ड मिलता है जो उठता है, एक आइकन जो पॉप करता है, या एक तीर जो खुलता है।
transform एक एलिमेंट को मूव करता है, स्केल करता है, या घुमाता है बिना अपने पड़ोसियों को धकेले। तीन को याद रखना हैं translate को मूव करने के लिए, scale को रिसाइज़ करने के लिए, और rotate को घुमाने के लिए। इसे ट्रांजिशन के साथ जोड़ें और आपको एक कार्ड मिलता है जो उठता है या एक आइकन जो होवर पर पॉप करता है। कीफ्रेम एनिमेशन
एक ट्रांजिशन दो स्टेट के बीच एनिमेट करता है। जब आपको दो से अधिक की जरूरत हो, या आपको मोशन को दोहराने की जरूरत हो, तो आप एक कीफ्रेम एनिमेशन का उपयोग करते हैं। आप @keyframes के साथ कदम लिखते हैं, फिर उन्हें animation प्रॉपर्टी के साथ एक एलिमेंट से जोड़ते हैं।
एक लोडिंग स्पिनर क्लासिक उदाहरण है: यह हमेशा घूमता है, इसलिए एक ट्रांजिशन इसे नहीं कर सकता।
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.spinner {
animation: spin 1s linear infinite; /* स्पिन चलाएं, प्रति टर्न 1s, हमेशा के लिए */
}from शुरुआत है और to अंत है। animation लाइन कहती है कि कौन से कीफ्रेम चलाएं, एक चक्र कितना लंबा ले, स्पीड कर्व, और कितनी बार दोहराएं। infinite का मतलब यह कभी नहीं रुकता है।
@keyframes में कदम लिखें और animation के साथ चलाएं। एक स्पिनर जाने के लिए go-to उदाहरण है: from 0 डिग्री पर, to 360 पर, infinite के साथ लूप करना। animation लाइन कौन से कीफ्रेम, कितना लंबा, कर्व, और कितनी बार सेट करती है। मोशन जो उपयोगकर्ता का सम्मान करता है
हर कोई स्क्रीन पर मोशन नहीं चाहता। कुछ लोगों को यह विचलित करने वाला लगता है, और कुछ के लिए यह असली असुविधा या मतली का कारण बन सकता है। ब्राउज़र लोगों को इसे कम करने के लिए अपनी सिस्टम सेटिंग्स में पूछने देते हैं, और CSS इसे प्रीफर्स-रिडिउस्ड-मोशन के साथ पढ़ सकता है।
अपनी एनिमेशन को एक चेक में लपेटें ताकि वे केवल लोगों के लिए चलें जिन्होंने मोशन को बंद करने के लिए नहीं कहा है:
@media (prefers-reduced-motion: no-preference) {
.card {
transition: transform 0.2s;
}
}उपयोगकर्ता का सम्मान करने का दूसरा आधा हिस्सा संयम है: मोशन को छोटा, सूक्ष्म, और किसी ऐसी चीज़ से जुड़ा हुआ रखें जो पाठक ने किया हो, जैसे होवर या क्लिक। मोशन जो वास्तविक परिवर्तन पर ध्यान आकर्षित करता है मदद करता है; अपने आप के लिए मोशन तेजी से थक जाता है।
prefers-reduced-motion के साथ पढ़ें और केवल लोगों के लिए एनिमेशन चलाएं जिन्होंने मोशन को बंद नहीं किया है। मोशन को छोटा, सूक्ष्म, और पाठक ने जो किया उससे जुड़ा हुआ रखें। क्या एनिमेट करें, और क्यों यह महत्वपूर्ण है
एक त्वरित नियम जो आपको बाद में परेशानी से बचाएगा: जब आप मूवमेंट एनिमेट करते हैं, तो transform और opacity एनिमेट करें, width, height, top, या margin जैसी प्रॉपर्टीज़ नहीं।
/* स्मूथ: ब्राउज़र इन्हें सस्ते में संभालता है */
.card:hover {
transform: translateY(-4px);
opacity: 0.9;
}कारण यह है कि transform और opacity दो प्रॉपर्टीज़ हैं जिन्हें ब्राउज़र सबसे सस्ते में घुमा सकता है, इसलिए उन पर बनी एनिमेशन धीमे उपकरणों पर भी स्मूथ रहती है। आकार या स्थिति प्रॉपर्टीज़ को एनिमेट करना ब्राउज़र को हर फ्रेम पर अधिक काम करने के लिए करता है, और मोशन हकदार हो सकता है। आप जब गहरे जाएंगे तब पूर्ण कारण मिलेंगे, लेकिन आदत अभी बनाने लायक है।
transform और opacity एनिमेट करें, और width, height, top, या margin को एनिमेट करने से दूर रहें। वे दो ब्राउज़र के लिए सस्ते में चलाने के लिए हैं, इसलिए मोशन धीमे उपकरणों पर भी स्मूथ रहता है। आप बाद में पूर्ण क्यों जानेंगे, लेकिन आदत अभी शुरू करने लायक है। 
