સરળ, એપ જેવા વેબ અનુભવોને અનલૉક કરો. આ વ્યાપક માર્ગદર્શિકા ડાયનેમિક પેજ ટ્રાન્ઝિશનને સ્ટાઇલ કરવા માટે શક્તિશાળી CSS વ્યૂ ટ્રાન્ઝિશન સ્યુડો-એલિમેન્ટ્સની શોધ કરે છે, જેમાં વ્યવહારુ ઉદાહરણો અને શ્રેષ્ઠ પદ્ધતિઓ છે.
CSS વ્યૂ ટ્રાન્ઝિશન્સમાં નિપુણતા: સ્યુડો-એલિમેન્ટ સ્ટાઇલિંગનો ઊંડાણપૂર્વક અભ્યાસ
વેબ ડેવલપમેન્ટના સતત વિકસતા ક્ષેત્રમાં, એક સીમલેસ, સરળ અને આકર્ષક વપરાશકર્તા અનુભવની શોધ સતત ચાલુ રહે છે. વર્ષોથી, ડેવલપર્સ વેબ અને નેટિવ એપ્લિકેશન્સ વચ્ચેના અંતરને દૂર કરવા માટે પ્રયત્નશીલ રહ્યા છે, ખાસ કરીને પેજ ટ્રાન્ઝિશનની સરળતાના સંદર્ભમાં. પરંપરાગત વેબ નેવિગેશન ઘણીવાર કઠોર, ફુલ-પેજ રિલોડમાં પરિણમે છે - એક ખાલી સફેદ સ્ક્રીન જે ક્ષણભર માટે વપરાશકર્તાની નિમજ્જનતાને તોડે છે. સિંગલ-પેજ એપ્લિકેશન્સ (SPAs) એ આને ઘટાડ્યું છે, પરંતુ કસ્ટમ, અર્થપૂર્ણ ટ્રાન્ઝિશન બનાવવાનું એક જટિલ અને ઘણીવાર નાજુક કાર્ય રહ્યું છે, જે મોટાભાગે જાવાસ્ક્રિપ્ટ લાઇબ્રેરીઓ અને જટિલ સ્ટેટ મેનેજમેન્ટ પર આધારિત છે.
પ્રસ્તુત છે CSS વ્યૂ ટ્રાન્ઝિશન્સ API, એક ગેમ-ચેન્જિંગ ટેકનોલોજી જે વેબ પર UI ફેરફારોને સંભાળવાની રીતમાં ક્રાંતિ લાવવા માટે તૈયાર છે. આ શક્તિશાળી API વિવિધ DOM સ્ટેટ્સ વચ્ચે એનિમેટ કરવા માટે એક સરળ છતાં અત્યંત લવચીક મિકેનિઝમ પ્રદાન કરે છે, જેનાથી વપરાશકર્તાઓ અપેક્ષા રાખે છે તેવા પોલિશ્ડ, એપ જેવા અનુભવો બનાવવાનું પહેલા કરતાં વધુ સરળ બને છે. આ API ની શક્તિના કેન્દ્રમાં નવા CSS સ્યુડો-એલિમેન્ટ્સનો સમૂહ છે. આ તમારા સામાન્ય સિલેક્ટર્સ નથી; તે બ્રાઉઝર દ્વારા જનરેટ કરાયેલા ડાયનેમિક, અસ્થાયી એલિમેન્ટ્સ છે જે તમને ટ્રાન્ઝિશનના દરેક તબક્કા પર ઝીણવટભર્યું નિયંત્રણ આપે છે. આ માર્ગદર્શિકા તમને આ સ્યુડો-એલિમેન્ટ ટ્રીમાં ઊંડાણપૂર્વક લઈ જશે, અને વૈશ્વિક પ્રેક્ષકો માટે અદભૂત, પર્ફોર્મન્ટ અને સુલભ એનિમેશન બનાવવા માટે દરેક ઘટકને કેવી રીતે સ્ટાઇલ કરવું તે શોધશે.
વ્યૂ ટ્રાન્ઝિશનની રચના
આપણે ટ્રાન્ઝિશનને સ્ટાઇલ કરીએ તે પહેલાં, આપણે સમજવું જોઈએ કે જ્યારે કોઈ ટ્રાન્ઝિશન શરૂ થાય ત્યારે પડદા પાછળ શું થાય છે. જ્યારે તમે વ્યૂ ટ્રાન્ઝિશન શરૂ કરો છો (ઉદાહરણ તરીકે, document.startViewTransition() કૉલ કરીને), ત્યારે બ્રાઉઝર શ્રેણીબદ્ધ પગલાં ભરે છે:
- જૂની સ્થિતિ કેપ્ચર કરો: બ્રાઉઝર વર્તમાન પેજની સ્થિતિનો "સ્ક્રીનશોટ" લે છે.
- DOM અપડેટ કરો: તમારો કોડ પછી DOM માં તેના ફેરફારો કરે છે (દા.ત., નવા વ્યૂ પર નેવિગેટ કરવું, એલિમેન્ટ્સ ઉમેરવા અથવા દૂર કરવા).
- નવી સ્થિતિ કેપ્ચર કરો: DOM અપડેટ પૂર્ણ થયા પછી, બ્રાઉઝર નવી સ્થિતિનો સ્ક્રીનશોટ લે છે.
- સ્યુડો-એલિમેન્ટ ટ્રી બનાવો: બ્રાઉઝર પછી પેજના ઓવરલેમાં સ્યુડો-એલિમેન્ટ્સનું એક અસ્થાયી ટ્રી બનાવે છે. આ ટ્રીમાં જૂની અને નવી સ્થિતિઓની કેપ્ચર કરેલી છબીઓ હોય છે.
- એનિમેટ કરો: CSS એનિમેશન આ સ્યુડો-એલિમેન્ટ્સ પર લાગુ કરવામાં આવે છે, જે જૂની સ્થિતિથી નવી સ્થિતિમાં એક સરળ સંક્રમણ બનાવે છે. ડિફોલ્ટ એક સરળ ક્રોસ-ફેડ છે.
- સફાઈ: એનિમેશન પૂર્ણ થયા પછી, સ્યુડો-એલિમેન્ટ ટ્રી દૂર કરવામાં આવે છે, અને વપરાશકર્તા નવા, લાઇવ DOM સાથે ક્રિયાપ્રતિક્રિયા કરી શકે છે.
કસ્ટમાઇઝેશનની ચાવી આ અસ્થાયી સ્યુડો-એલિમેન્ટ ટ્રી છે. તેને ડિઝાઇન ટૂલમાં લેયર્સના સમૂહ તરીકે વિચારો, જે અસ્થાયી રૂપે તમારા પેજની ટોચ પર મૂકવામાં આવે છે. તમારી પાસે આ લેયર્સ પર સંપૂર્ણ CSS નિયંત્રણ છે. અહીં તે માળખું છે જેની સાથે તમે કામ કરશો:
- ::view-transition
- ::view-transition-group(*)
- ::view-transition-image-pair(*)
- ::view-transition-old(*)
- ::view-transition-new(*)
- ::view-transition-image-pair(*)
- ::view-transition-group(*)
ચાલો જોઈએ કે આ દરેક સ્યુડો-એલિમેન્ટ્સ શું રજૂ કરે છે.
સ્યુડો-એલિમેન્ટ કાસ્ટ
::view-transition: આ સમગ્ર માળખાનું મૂળ છે. તે એક જ એલિમેન્ટ છે જે વ્યૂપોર્ટને ભરે છે અને અન્ય તમામ પેજ સામગ્રીની ટોચ પર બેસે છે. તે તમામ ટ્રાન્ઝિશનિંગ જૂથો માટે કન્ટેનર તરીકે કાર્ય કરે છે અને અવધિ અથવા ટાઇમિંગ ફંક્શન જેવી એકંદર ટ્રાન્ઝિશન પ્રોપર્ટીઝ સેટ કરવા માટે એક ઉત્તમ સ્થળ છે.
::view-transition-group(*): દરેક અલગ ટ્રાન્ઝિશનિંગ એલિમેન્ટ માટે (જે view-transition-name CSS પ્રોપર્ટી દ્વારા ઓળખાય છે), એક જૂથ બનાવવામાં આવે છે. આ સ્યુડો-એલિમેન્ટ તેની સામગ્રીની સ્થિતિ અને કદ ને એનિમેટ કરવા માટે જવાબદાર છે. જો તમારી પાસે એક કાર્ડ છે જે સ્ક્રીનની એક બાજુથી બીજી બાજુ જાય છે, તો તે ::view-transition-group છે જે ખરેખર આગળ વધી રહ્યું છે.
::view-transition-image-pair(*): જૂથની અંદર નેસ્ટ થયેલ, આ એલિમેન્ટ જૂના અને નવા વ્યૂ માટે કન્ટેનર અને ક્લિપિંગ માસ્ક તરીકે કાર્ય કરે છે. તેની પ્રાથમિક ભૂમિકા એનિમેશન દરમિયાન border-radius અથવા transform જેવી અસરો જાળવવાની અને ડિફોલ્ટ ક્રોસ-ફેડ એનિમેશનને હેન્ડલ કરવાની છે.
::view-transition-old(*): આ એલિમેન્ટની તેની જૂની સ્થિતિ (DOM ફેરફાર પહેલાં) માં "સ્ક્રીનશોટ" અથવા રેન્ડર કરેલ વ્યૂ રજૂ કરે છે. ડિફોલ્ટ રૂપે, તે opacity: 1 થી opacity: 0 સુધી એનિમેટ થાય છે.
::view-transition-new(*): આ એલિમેન્ટની તેની નવી સ્થિતિ (DOM ફેરફાર પછી) માં "સ્ક્રીનશોટ" અથવા રેન્ડર કરેલ વ્યૂ રજૂ કરે છે. ડિફોલ્ટ રૂપે, તે opacity: 0 થી opacity: 1 સુધી એનિમેટ થાય છે.
રુટ: ::view-transition સ્યુડો-એલિમેન્ટને સ્ટાઇલ કરવું
::view-transition સ્યુડો-એલિમેન્ટ એ કેનવાસ છે જેના પર તમારું સંપૂર્ણ એનિમેશન દોરવામાં આવ્યું છે. ટોપ-લેવલ કન્ટેનર તરીકે, તે એવી પ્રોપર્ટીઝને વ્યાખ્યાયિત કરવા માટે આદર્શ સ્થાન છે જે ટ્રાન્ઝિશન પર વૈશ્વિક સ્તરે લાગુ થવી જોઈએ. ડિફોલ્ટ રૂપે, બ્રાઉઝર એનિમેશનનો સમૂહ પ્રદાન કરે છે, પરંતુ તમે તેને સરળતાથી ઓવરરાઇડ કરી શકો છો.
ઉદાહરણ તરીકે, ડિફોલ્ટ ટ્રાન્ઝિશન 250 મિલિસેકન્ડ ચાલે તેવું ક્રોસ-ફેડ છે. જો તમે તમારી સાઇટ પરના દરેક ટ્રાન્ઝિશન માટે આને બદલવા માંગતા હો, તો તમે રુટ સ્યુડો-એલિમેન્ટને લક્ષ્ય બનાવી શકો છો:
::view-transition {
animation-duration: 500ms;
animation-timing-function: ease-in-out;
}
આ સરળ નિયમ હવે તમામ ડિફોલ્ટ પેજ ફેડ્સને બમણો સમય લેવડાવે છે અને 'ease-in-out' કર્વનો ઉપયોગ કરે છે, જે તેમને થોડો અલગ અનુભવ આપે છે. જ્યારે તમે અહીં જટિલ એનિમેશન લાગુ કરી શકો છો, ત્યારે તે સામાન્ય રીતે સાર્વત્રિક સમય અને સરળતાને વ્યાખ્યાયિત કરવા માટે શ્રેષ્ઠ રીતે ઉપયોગમાં લેવાય છે, જ્યારે વધુ વિશિષ્ટ સ્યુડો-એલિમેન્ટ્સ વિગતવાર કોરિયોગ્રાફીને સંભાળે છે.
ગ્રુપિંગ અને નામકરણ: `view-transition-name` ની શક્તિ
કોઈપણ વધારાના કામ વિના, વ્યૂ ટ્રાન્ઝિશન API સમગ્ર પેજ માટે ક્રોસ-ફેડ પ્રદાન કરે છે. આ રુટ માટે એક જ સ્યુડો-એલિમેન્ટ જૂથ દ્વારા સંભાળવામાં આવે છે. API ની સાચી શક્તિ ત્યારે અનલૉક થાય છે જ્યારે તમે ચોક્કસ, વ્યક્તિગત એલિમેન્ટ્સને સ્ટેટ્સ વચ્ચે ટ્રાન્ઝિશન કરવા માંગો છો. ઉદાહરણ તરીકે, લિસ્ટ પેજ પરના પ્રોડક્ટ થંબનેલને ડિટેલ પેજ પર મુખ્ય પ્રોડક્ટ ઇમેજની સ્થિતિમાં સીમલેસ રીતે મોટું અને ખસેડવું.
બ્રાઉઝરને કહેવા માટે કે વિવિધ DOM સ્ટેટ્સમાં બે એલિમેન્ટ્સ વૈચારિક રીતે સમાન છે, તમે view-transition-name CSS પ્રોપર્ટીનો ઉપયોગ કરો છો. આ પ્રોપર્ટી પ્રારંભિક એલિમેન્ટ અને અંતિમ એલિમેન્ટ બંને પર લાગુ થવી આવશ્યક છે.
/* લિસ્ટ પેજ CSS પર */
.product-thumbnail {
view-transition-name: product-image;
}
/* ડિટેલ પેજ CSS પર */
.main-product-image {
view-transition-name: product-image;
}
બંને એલિમેન્ટ્સને સમાન અનન્ય નામ ('product-image' આ કિસ્સામાં) આપીને, તમે બ્રાઉઝરને સૂચના આપો છો: "ફક્ત જૂના પેજને ફેડ આઉટ કરવા અને નવા પેજને ફેડ ઇન કરવાને બદલે, આ વિશિષ્ટ એલિમેન્ટ માટે એક ખાસ ટ્રાન્ઝિશન બનાવો." બ્રાઉઝર હવે રુટ ફેડથી અલગ રીતે તેના એનિમેશનને હેન્ડલ કરવા માટે એક સમર્પિત ::view-transition-group(product-image) જનરેટ કરશે. આ મૂળભૂત ખ્યાલ છે જે લોકપ્રિય "મોર્ફિંગ" અથવા "શેર્ડ એલિમેન્ટ" ટ્રાન્ઝિશન ઇફેક્ટને સક્ષમ કરે છે.
મહત્વપૂર્ણ નોંધ: ટ્રાન્ઝિશન દરમિયાન કોઈપણ ક્ષણ માટે, view-transition-name અનન્ય હોવું આવશ્યક છે. તમે એક જ સમયે સમાન નામવાળા બે દૃશ્યમાન એલિમેન્ટ્સ રાખી શકતા નથી.
ઊંડાણપૂર્વકની સ્ટાઇલિંગ: મુખ્ય સ્યુડો-એલિમેન્ટ્સ
આપણા એલિમેન્ટ્સનું નામકરણ કર્યા પછી, હવે આપણે બ્રાઉઝર દ્વારા તેમના માટે જનરેટ કરાયેલા વિશિષ્ટ સ્યુડો-એલિમેન્ટ્સને સ્ટાઇલ કરી શકીએ છીએ. અહીં તમે ખરેખર કસ્ટમ અને અભિવ્યક્ત એનિમેશન બનાવી શકો છો.
`::view-transition-group(name)`: ધ મુવર
જૂથની એકમાત્ર જવાબદારી જૂના એલિમેન્ટના કદ અને સ્થિતિથી નવા એલિમેન્ટના કદ અને સ્થિતિમાં સંક્રમણ કરવાની છે. તેમાં વાસ્તવિક સામગ્રીનો દેખાવ નથી, ફક્ત તેનું બાઉન્ડિંગ બોક્સ છે. તેને એક ચલિત ફ્રેમ તરીકે વિચારો.
ડિફોલ્ટ રૂપે, બ્રાઉઝર તેની transform અને width/height પ્રોપર્ટીઝને એનિમેટ કરે છે. તમે વિવિધ અસરો બનાવવા માટે આને ઓવરરાઇડ કરી શકો છો. ઉદાહરણ તરીકે, તમે તેને વક્ર પાથ પર એનિમેટ કરીને તેની ગતિમાં એક આર્ક ઉમેરી શકો છો, અથવા તેની મુસાફરી દરમિયાન તેને ઉપર અને નીચે સ્કેલ કરી શકો છો.
::view-transition-group(product-image) {
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
આ ઉદાહરણમાં, અમે ફક્ત પ્રોડક્ટ ઇમેજની ગતિ પર એક વિશિષ્ટ ઇઝિંગ ફંક્શન લાગુ કરી રહ્યા છીએ, જે તેને વધુ ગતિશીલ અને ભૌતિક લાગે છે, જ્યારે બાકીના પેજના ડિફોલ્ટ ફેડને અસર કર્યા વિના.
`::view-transition-image-pair(name)`: ધ ક્લિપર અને ફેડર
ચલિત જૂથની અંદર, ઇમેજ-પેર જૂના અને નવા વ્યૂને ધરાવે છે. તે ક્લિપિંગ માસ્ક તરીકે કાર્ય કરે છે, તેથી જો તમારા એલિમેન્ટમાં border-radius હોય, તો ઇમેજ-પેર સુનિશ્ચિત કરે છે કે સામગ્રી કદ અને સ્થિતિ એનિમેશન દરમિયાન તે ત્રિજ્યા સાથે ક્લિપ થયેલી રહે. તેનું બીજું મુખ્ય કામ જૂની અને નવી સામગ્રી વચ્ચેના ડિફોલ્ટ ક્રોસ-ફેડનું સંચાલન કરવાનું છે.
તમે દ્રશ્ય સુસંગતતા સુનિશ્ચિત કરવા અથવા વધુ અદ્યતન અસરો બનાવવા માટે આ એલિમેન્ટને સ્ટાઇલ કરવા માગી શકો છો. ધ્યાનમાં લેવા જેવી એક મુખ્ય પ્રોપર્ટી છે isolation: isolate. આ નિર્ણાયક છે જો તમે બાળકો (જૂના અને નવા) પર અદ્યતન mix-blend-mode અસરોનો ઉપયોગ કરવાની યોજના ઘડી રહ્યા હોવ, કારણ કે તે એક નવો સ્ટેકીંગ સંદર્ભ બનાવે છે અને ટ્રાન્ઝિશન જૂથની બહારના એલિમેન્ટ્સને બ્લેન્ડિંગને અસર કરતા અટકાવે છે.
::view-transition-image-pair(product-image) {
isolation: isolate;
}
`::view-transition-old(name)` અને `::view-transition-new(name)`: શોના સ્ટાર્સ
આ તે સ્યુડો-એલિમેન્ટ્સ છે જે DOM ફેરફાર પહેલાં અને પછી તમારા એલિમેન્ટના દ્રશ્ય દેખાવને રજૂ કરે છે. અહીં તમારા મોટાભાગના કસ્ટમ એનિમેશનનું કામ થશે. ડિફોલ્ટ રૂપે, બ્રાઉઝર opacity અને mix-blend-mode નો ઉપયોગ કરીને તેમના પર એક સરળ ક્રોસ-ફેડ એનિમેશન ચલાવે છે. કસ્ટમ એનિમેશન બનાવવા માટે, તમારે પહેલા ડિફોલ્ટ એનિમેશનને બંધ કરવું આવશ્યક છે.
::view-transition-old(name),
::view-transition-new(name) {
animation: none;
}
એકવાર ડિફોલ્ટ એનિમેશન અક્ષમ થઈ જાય, પછી તમે તમારું પોતાનું એનિમેશન લાગુ કરવા માટે સ્વતંત્ર છો. ચાલો કેટલાક સામાન્ય પેટર્નનું અન્વેષણ કરીએ.
કસ્ટમ એનિમેશન: સ્લાઇડ
ક્રોસ-ફેડને બદલે, ચાલો કન્ટેનરની સામગ્રીને સ્લાઇડ ઇન કરાવીએ. ઉદાહરણ તરીકે, લેખો વચ્ચે નેવિગેટ કરતી વખતે, અમે ઇચ્છીએ છીએ કે નવા લેખનો ટેક્સ્ટ જમણી બાજુથી સ્લાઇડ ઇન થાય જ્યારે જૂનો ટેક્સ્ટ ડાબી બાજુ સ્લાઇડ આઉટ થાય.
પ્રથમ, કીફ્રેમ્સ વ્યાખ્યાયિત કરો:
@keyframes slide-from-right {
from { transform: translateX(100%); }
to { transform: translateX(0); }
}
@keyframes slide-to-left {
from { transform: translateX(0); }
to { transform: translateX(-100%); }
}
હવે, 'article-content' નામના એલિમેન્ટ માટે જૂના અને નવા સ્યુડો-એલિમેન્ટ્સ પર આ એનિમેશન લાગુ કરો.
::view-transition-old(article-content) {
animation: 300ms ease-out forwards slide-to-left;
}
::view-transition-new(article-content) {
animation: 300ms ease-out forwards slide-from-right;
}
કસ્ટમ એનિમેશન: 3D ફ્લિપ
વધુ નાટકીય અસર માટે, તમે 3D કાર્ડ ફ્લિપ બનાવી શકો છો. આ માટે rotateY સાથે transform પ્રોપર્ટીને એનિમેટ કરવાની અને backface-visibility નું સંચાલન કરવાની જરૂર છે.
/* જૂથને 3D સંદર્ભની જરૂર છે */
::view-transition-group(card-flipper) {
transform-style: preserve-3d;
}
/* ઇમેજ-પેરને પણ 3D સંદર્ભ સાચવવાની જરૂર છે */
::view-transition-image-pair(card-flipper) {
transform-style: preserve-3d;
}
/* જૂનો વ્યૂ 0 થી -180 ડિગ્રી સુધી ફ્લિપ થાય છે */
::view-transition-old(card-flipper) {
animation: 600ms ease-in forwards flip-out;
backface-visibility: hidden;
}
/* નવો વ્યૂ 180 થી 0 ડિગ્રી સુધી ફ્લિપ થાય છે */
::view-transition-new(card-flipper) {
animation: 600ms ease-out forwards flip-in;
backface-visibility: hidden;
}
@keyframes flip-out {
from { transform: rotateY(0deg); }
to { transform: rotateY(-180deg); }
}
@keyframes flip-in {
from { transform: rotateY(180deg); }
to { transform: rotateY(0deg); }
}
વ્યવહારુ ઉદાહરણો અને અદ્યતન તકનીકો
સિદ્ધાંત ઉપયોગી છે, પરંતુ વ્યવહારુ એપ્લિકેશન એ છે જ્યાં આપણે ખરેખર શીખીએ છીએ. ચાલો કેટલાક સામાન્ય દૃશ્યો અને વ્યૂ ટ્રાન્ઝિશન સ્યુડો-એલિમેન્ટ્સ સાથે તેમને કેવી રીતે હલ કરવા તે જોઈએ.
ઉદાહરણ: "મોર્ફિંગ" કાર્ડ થંબનેલ
આ ક્લાસિક શેર્ડ એલિમેન્ટ ટ્રાન્ઝિશન છે. વપરાશકર્તા પ્રોફાઇલ્સની એક ગેલેરીની કલ્પના કરો. દરેક પ્રોફાઇલ અવતાર સાથેનું એક કાર્ડ છે. જ્યારે તમે કાર્ડ પર ક્લિક કરો છો, ત્યારે તમે એક વિગતવાર પૃષ્ઠ પર નેવિગેટ કરો છો જ્યાં તે જ અવતાર ટોચ પર સ્પષ્ટપણે પ્રદર્શિત થાય છે.
પગલું 1: નામ સોંપો
તમારી ગેલેરી પેજમાં, અવતારની છબીને એક નામ મળે છે. નામ દરેક કાર્ડ માટે અનન્ય હોવું જોઈએ, ઉદાહરણ તરીકે, વપરાશકર્તાના ID પર આધારિત.
/* gallery-item.css માં */
.card-avatar { view-transition-name: avatar-user-123; }
પ્રોફાઇલ વિગત પેજ પર, મોટા હેડર અવતારને બરાબર તે જ નામ મળે છે.
/* profile-page.css માં */
.profile-header-avatar { view-transition-name: avatar-user-123; }
પગલું 2: એનિમેશનને કસ્ટમાઇઝ કરો
ડિફોલ્ટ રૂપે, બ્રાઉઝર અવતારને ખસેડશે અને સ્કેલ કરશે, પરંતુ તે સામગ્રીને ક્રોસ-ફેડ પણ કરશે. જો છબી સરખી હોય, તો આ ફેડ બિનજરૂરી છે અને સહેજ ફ્લિકરનું કારણ બની શકે છે. અમે તેને અક્ષમ કરી શકીએ છીએ.
/* અહીં તારો (*) કોઈપણ નામાંકિત જૂથ માટે વાઇલ્ડકાર્ડ છે */
::view-transition-image-pair(*) {
/* ડિફોલ્ટ ફેડને અક્ષમ કરો */
animation-duration: 0s;
}
રાહ જુઓ, જો આપણે ફેડને અક્ષમ કરીએ, તો સામગ્રી કેવી રીતે સ્વિચ થાય છે? શેર્ડ એલિમેન્ટ્સ માટે જ્યાં જૂના અને નવા વ્યૂ સરખા હોય છે, બ્રાઉઝર એટલું સ્માર્ટ છે કે તે સમગ્ર ટ્રાન્ઝિશન માટે ફક્ત એક જ વ્યૂનો ઉપયોગ કરે છે. `image-pair` અનિવાર્યપણે ફક્ત એક જ છબી ધરાવે છે, તેથી ફેડને અક્ષમ કરવાથી ફક્ત આ ઑપ્ટિમાઇઝેશન પ્રગટ થાય છે. એલિમેન્ટ્સ માટે જ્યાં સામગ્રી ખરેખર બદલાય છે, તમારે ડિફોલ્ટ ફેડને બદલે કસ્ટમ એનિમેશનની જરૂર પડશે.
એસ્પેક્ટ રેશિયો ફેરફારોને હેન્ડલ કરવું
એક સામાન્ય પડકાર ત્યારે ઊભો થાય છે જ્યારે ટ્રાન્ઝિશન કરતું એલિમેન્ટ તેનો એસ્પેક્ટ રેશિયો બદલે છે. ઉદાહરણ તરીકે, લિસ્ટ પેજ પર 16:9 લેન્ડસ્કેપ થંબનેલ ડિટેલ પેજ પર 1:1 ચોરસ અવતારમાં સંક્રમણ કરી શકે છે. બ્રાઉઝરનું ડિફોલ્ટ વર્તન પહોળાઈ અને ઊંચાઈને સ્વતંત્ર રીતે એનિમેટ કરવાનું છે, જે ટ્રાન્ઝિશન દરમિયાન છબીને દબાયેલી અથવા ખેંચાયેલી દેખાડે છે.
ઉકેલ ભવ્ય છે. અમે ::view-transition-group ને કદ અને સ્થિતિના ફેરફારને હેન્ડલ કરવા દઈએ છીએ, પરંતુ અમે તેની અંદરની જૂની અને નવી છબીઓની સ્ટાઇલને ઓવરરાઇડ કરીએ છીએ.
ધ્યેય જૂના અને નવા "સ્ક્રીનશોટ" ને વિકૃત કર્યા વિના તેમના કન્ટેનરને ભરવાનો છે. અમે તેમની પહોળાઈ અને ઊંચાઈ 100% પર સેટ કરીને આ કરી શકીએ છીએ અને બ્રાઉઝરની ડિફોલ્ટ object-fit પ્રોપર્ટી (જે મૂળ એલિમેન્ટમાંથી વારસામાં મળે છે) ને સ્કેલિંગને યોગ્ય રીતે હેન્ડલ કરવાની મંજૂરી આપીએ છીએ.
::view-transition-old(hero-image),
::view-transition-new(hero-image) {
/* કન્ટેનર ભરીને વિકૃતિ અટકાવો */
width: 100%;
height: 100%;
/* અસરને સ્પષ્ટપણે જોવા માટે ડિફોલ્ટ ક્રોસ-ફેડને ઓવરરાઇડ કરો */
animation: none;
}
આ CSS સાથે, `image-pair` તેના એસ્પેક્ટ રેશિયોને સરળતાથી એનિમેટ કરશે, અને અંદરની છબીઓ યોગ્ય રીતે ક્રોપ અથવા લેટરબોક્સ થશે (તેમના `object-fit` મૂલ્યના આધારે), જેમ કે તે સામાન્ય કન્ટેનરમાં હશે. તમે પછી આ સુધારેલ ભૂમિતિની ટોચ પર તમારા પોતાના કસ્ટમ એનિમેશન, જેમ કે ક્રોસ-ફેડ, ઉમેરી શકો છો.
ડિબગીંગ અને બ્રાઉઝર સપોર્ટ
એવા એલિમેન્ટ્સને સ્ટાઇલ કરવું જે ફક્ત સેકન્ડના અપૂર્ણાંક માટે અસ્તિત્વમાં હોય તે મુશ્કેલ હોઈ શકે છે. સદભાગ્યે, આધુનિક બ્રાઉઝર્સ આ માટે ઉત્તમ ડેવલપર ટૂલ્સ પ્રદાન કરે છે. Chrome અથવા Edge DevTools માં, તમે "Animations" પેનલ પર જઈ શકો છો, અને જ્યારે તમે વ્યૂ ટ્રાન્ઝિશન શરૂ કરો છો, ત્યારે તમે તેને થોભાવી શકો છો. એનિમેશન થોભાવ્યા પછી, તમે "Elements" પેનલનો ઉપયોગ કરીને સમગ્ર `::view-transition` સ્યુડો-એલિમેન્ટ ટ્રીનું નિરીક્ષણ કરી શકો છો, જેમ કે DOM ના અન્ય કોઈપણ ભાગની જેમ. તમે લાગુ કરવામાં આવી રહેલી શૈલીઓ જોઈ શકો છો અને તમારા એનિમેશનને સંપૂર્ણ બનાવવા માટે તેને વાસ્તવિક સમયમાં સંશોધિત પણ કરી શકો છો.
2023 ના અંત સુધીમાં, વ્યૂ ટ્રાન્ઝિશન્સ API ક્રોમિયમ-આધારિત બ્રાઉઝર્સ (Chrome, Edge, Opera) માં સપોર્ટેડ છે. ફાયરફોક્સ અને સફારી માટે અમલીકરણ પ્રગતિમાં છે. આ તેને પ્રોગ્રેસિવ એન્હાન્સમેન્ટ માટે એક સંપૂર્ણ ઉમેદવાર બનાવે છે. સપોર્ટેડ બ્રાઉઝર્સવાળા વપરાશકર્તાઓને એક આનંદદાયક, ઉન્નત અનુભવ મળે છે, જ્યારે અન્ય બ્રાઉઝર્સ પરના વપરાશકર્તાઓને પ્રમાણભૂત, ત્વરિત નેવિગેશન મળે છે. તમે CSS માં સપોર્ટ માટે ચકાસી શકો છો:
@supports (view-transition: none) {
/* બધી વ્યૂ-ટ્રાન્ઝિશન શૈલીઓ અહીં જાય છે */
::view-transition-old(my-element) { ... }
}
વૈશ્વિક પ્રેક્ષકો માટે શ્રેષ્ઠ પદ્ધતિઓ
એનિમેશનનો અમલ કરતી વખતે, વિશ્વભરના વિવિધ વપરાશકર્તાઓ અને ઉપકરણોને ધ્યાનમાં લેવું મહત્વપૂર્ણ છે.
પર્ફોર્મન્સ: એનિમેશન ઝડપી અને સરળ હોવા જોઈએ. એવી CSS પ્રોપર્ટીઝને એનિમેટ કરવાનું ટાળો જે બ્રાઉઝર માટે પ્રક્રિયા કરવા માટે સસ્તી હોય, મુખ્યત્વે transform અને opacity. width, height, અથવા margin જેવી પ્રોપર્ટીઝને એનિમેટ કરવાથી દરેક ફ્રેમ પર લેઆઉટની પુનઃગણતરી થઈ શકે છે, જે ખાસ કરીને ઓછી શક્તિવાળા ઉપકરણો પર અટકીને અને ખરાબ અનુભવ તરફ દોરી જાય છે.
ઍક્સેસિબિલિટી: કેટલાક વપરાશકર્તાઓ એનિમેશનથી મોશન સિકનેસ અથવા અસ્વસ્થતા અનુભવે છે. બધી મુખ્ય ઓપરેટિંગ સિસ્ટમ્સ ગતિ ઘટાડવા માટે વપરાશકર્તા પસંદગી પ્રદાન કરે છે. આપણે આનો આદર કરવો જ જોઇએ. prefers-reduced-motion મીડિયા ક્વેરી તમને આ વપરાશકર્તાઓ માટે તમારા એનિમેશનને અક્ષમ કરવા અથવા સરળ બનાવવા દે છે.
@media (prefers-reduced-motion: reduce) {
::view-transition-group(*),
::view-transition-old(*),
::view-transition-new(*) {
/* બધા કસ્ટમ એનિમેશનને છોડી દો અને ઝડપી, સરળ ફેડનો ઉપયોગ કરો */
animation: none !important;
}
}
વપરાશકર્તા અનુભવ (UX): સારા ટ્રાન્ઝિશન હેતુપૂર્ણ હોય છે. તેઓએ વપરાશકર્તાનું ધ્યાન દોરવું જોઈએ અને UI માં થઈ રહેલા ફેરફાર વિશે સંદર્ભ પ્રદાન કરવો જોઈએ. જે એનિમેશન ખૂબ ધીમું હોય તે એપ્લિકેશનને સુસ્ત બનાવી શકે છે, જ્યારે જે ખૂબ જ આકર્ષક હોય તે વિચલિત કરી શકે છે. 200ms અને 500ms વચ્ચેના ટ્રાન્ઝિશન અવધિનું લક્ષ્ય રાખો. ધ્યેય એ છે કે એનિમેશનને જોવા કરતાં વધુ અનુભવાય.
નિષ્કર્ષ: ભવિષ્ય પ્રવાહી છે
CSS વ્યૂ ટ્રાન્ઝિશન્સ API, અને ખાસ કરીને તેનું શક્તિશાળી સ્યુડો-એલિમેન્ટ ટ્રી, વેબ વપરાશકર્તા ઇન્ટરફેસ માટે એક મોટો કૂદકો રજૂ કરે છે. તે ડેવલપર્સને એક નેટિવ, પર્ફોર્મન્ટ અને અત્યંત કસ્ટમાઇઝ કરી શકાય તેવું ટૂલસેટ પ્રદાન કરે છે જેથી તે પ્રકારના પ્રવાહી, સ્ટેટફુલ ટ્રાન્ઝિશન બનાવી શકાય જે એક સમયે નેટિવ એપ્લિકેશન્સનું વિશિષ્ટ ડોમેન હતું. ::view-transition, ::view-transition-group, અને old/new ઇમેજ જોડીઓની ભૂમિકાઓને સમજીને, તમે સરળ ફેડ્સથી આગળ વધી શકો છો અને જટિલ, અર્થપૂર્ણ એનિમેશનની કોરિયોગ્રાફી કરી શકો છો જે ઉપયોગીતાને વધારે છે અને વપરાશકર્તાઓને આનંદ આપે છે.
જેમ જેમ બ્રાઉઝર સપોર્ટ વિસ્તરશે, તેમ તેમ આ API આધુનિક ફ્રન્ટ-એન્ડ ડેવલપરના ટૂલકિટનો આવશ્યક ભાગ બની જશે. તેની ક્ષમતાઓને અપનાવીને અને પર્ફોર્મન્સ અને ઍક્સેસિબિલિટી માટે શ્રેષ્ઠ પદ્ધતિઓનું પાલન કરીને, આપણે એક એવું વેબ બનાવી શકીએ છીએ જે ફક્ત વધુ કાર્યાત્મક જ નહીં, પણ દરેક માટે, દરેક જગ્યાએ વધુ સુંદર અને સાહજિક પણ હોય.