Gambar iki: sampeyan gabung karo proyek anyar, nyilem menyang basis kode, lan ing sawetara jam pisanan, sampeyan nemokake sing ora ngerti. Kasebar ing lembar gaya, sampeyan nemokake macem-macem definisi @keyframes kanggo animasi dhasar sing padha. Telung efek fade-in sing beda, loro utawa telung variasi geser, sawetara animasi zoom, lan paling ora rong animasi spin sing beda-beda amarga, kenapa ora? @keyframes pulsa { saka { skala: 1; } kanggo { skala: 1.1; } }
@keyframes bigger-pulse { 0%, 20%, 100% { skala: 1; } 10%, 40% { skala: 1.2; } }
Yen skenario iki muni menowo, sampeyan ora piyambak. Ing pengalaman ing macem-macem proyek, salah siji saka menang cepet paling konsisten aku bisa ngirim consolidating lan standarisasi keyframes. Wis dadi pola sing bisa dipercaya sing saiki dakkarepake kanggo ngresiki iki minangka salah sawijining tugas pisanan ing basis kode anyar. Logika Dibalik Kekacauan Redundansi iki ndadekake pangertèn sampurna nalika sampeyan mikir babagan. Kita kabeh nggunakake animasi dhasar sing padha ing karya saben dina: fades, slides, zooms, spins, lan efek umum liyane. Animasi iki cukup prasaja, lan gampang kanggo nggawe definisi @keyframes kanthi cepet kanggo ngrampungake tugas kasebut. Tanpa sistem animasi terpusat, pangembang kanthi alami nulis keyframes iki saka awal, ora ngerti yen animasi sing padha wis ana ing papan liya ing basis kode. Iki umume umum nalika nggarap arsitektur berbasis komponen (sing umume ditindakake saiki), amarga tim asring kerja podo karo ing macem-macem bagean aplikasi. Hasile? Kekacauan animasi. Masalah Cilik Masalah sing paling jelas karo duplikasi keyframes yaiku wektu pangembangan boroske lan kembung kode sing ora perlu. Multiple keyframe definisi tegese sawetara panggonan kanggo nganyari nalika syarat diganti. Apa sampeyan kudu nyetel wektu animasi fade sampeyan? Sampeyan kudu mburu saben conto ing basis kode sampeyan. Pengin standarisasi fungsi easing? Good luck nemokake kabeh variasi. Iki multiplikasi titik pangopènan ndadekake malah animasi prasaja nganyari tugas wektu-akeh. Masalah sing luwih gedhe Duplikasi keyframes iki nggawe masalah sing luwih insidious sing ana ing ngisor permukaan: jebakan lingkup global. Malah nalika nggarap arsitektur basis komponen, keyframes CSS tansah ditetepake ing lingkup global. Iki tegese kabeh keyframes ditrapake kanggo kabeh komponen. tansah. Ya, animasi sampeyan ora kudu nggunakake keyframes sing ditetepake ing komponen sampeyan. Iki nggunakake keyframes pungkasan sing cocog karo jeneng sing padha sing dimuat ing lingkup global. Anggere kabeh keyframes sampeyan identik, iki bisa uga katon kaya masalah cilik. Nanging nalika sampeyan pengin ngatur animasi kanggo kasus panggunaan tartamtu, sampeyan ana ing alangan, utawa luwih elek, sampeyan bakal nyebabake. Animasi sampeyan ora bisa digunakake amarga komponen liyane dimuat sawise sampeyan, nimpa keyframes, utawa komponèn mbukak pungkasan lan ora sengaja ngganti prilaku animasi kanggo saben komponen liyane nggunakake jeneng keyframe, lan sampeyan bisa uga ora éling. Mangkene conto prasaja sing nuduhake masalah: .komponen-siji { /* gaya komponen */ animasi: pulsa 1s ease-in-metu sulih tanpa wates; }
/* definisi @keyframes iki ora bakal bisa */ @keyframes pulsa { saka { skala: 1; } kanggo { skala: 1.1; } }
/* mengko ing kode... */
.komponen-loro { /* gaya komponen */ animasi: pulsa 1s ease-in-metu tanpa wates; }
/* keyframes iki bakal ditrapake kanggo loro komponen */ @keyframes pulsa { 0%, 20%, 100% { skala: 1; } 10%, 40% { skala: 1.2; } }
Loro-lorone komponen nggunakake jeneng animasi sing padha, nanging definisi @keyframes kaloro nimpa sing pisanan. Saiki komponen-siji lan komponen-loro bakal nggunakake keyframes kapindho, preduli saka komponen kang ditetepake keyframes. Deleng Token Pen Keyframes - Demo 1 [forked] dening Amit Sheen. Sisih paling awon? Iki asring dianggo kanthi sampurna ing pangembangan lokal nanging rusak kanthi misterius nalika produksi nalika proses mbangun ngganti urutan loading stylesheet sampeyan. Sampeyan mungkasi karo animasi sing tumindak beda-beda gumantung komponen sing dimuat lan ing urutan apa. Solusi: Unified Keyframes Jawaban kanggo kekacauan iki pancen prasaja: keyframes dinamis sing wis ditemtokake disimpen ing lembar gaya sing dienggo bareng. Tinimbang ngidini saben komponen nemtokake animasi dhewe, kita nggawe keyframes terpusat sing didokumentasikake kanthi apik, gampangnggunakake, maintainable, lan cocog kanggo kabutuhan tartamtu saka project. Mikir minangka token keyframes. Kaya kita nggunakake token kanggo werna lan spasi, lan akeh kita wis nggunakake token kanggo sifat animasi, kaya durasi lan easing fungsi, kok ora nggunakake token kanggo keyframes uga? Pendekatan iki bisa nggabungake kanthi alami karo alur kerja token desain saiki sing sampeyan gunakake, nalika ngrampungake masalah cilik (duplikasi kode) lan masalah sing luwih gedhe (konflik ruang lingkup global) bebarengan. Ide kasebut langsung: nggawe siji sumber bebener kanggo kabeh animasi umum kita. Stylesheet sing dienggo bareng iki ngemot keyframes sing digawe kanthi ati-ati sing nutupi pola animasi sing bener digunakake proyek kita. Ora ana maneh ngira apa animasi fade wis ana nang endi wae ing basis kode kita. Ora sengaja nimpa animasi saka komponen liyane. Nanging iki kuncine: iki ora mung animasi salinan-tempel statis. Dheweke dirancang kanthi dinamis lan bisa disesuaikan liwat properti khusus CSS, ngidini kita njaga konsistensi nalika isih duwe keluwesan kanggo adaptasi animasi menyang kasus panggunaan tartamtu, kayata yen sampeyan butuh animasi "pulsa" sing rada gedhe ing sak panggonan. Nggawe Token Keyframes Pisanan Salah siji saka woh-wohan sing paling sithik sing kudu ditindakake yaiku animasi "fade-in". Ing salah sawijining proyek anyar, aku nemokake luwih saka sepuluh definisi fade-in sing kapisah, lan ya, kabeh mau mung nggawe opacity saka 0 nganti 1. Dadi, ayo nggawe stylesheet anyar, sebutna kf-tokens.css, ngimpor menyang proyek kita, lan pasang keyframes kita kanthi komentar sing tepat ing njero. /* keyframes-tokens.css */
/* * Fade In - animasi mlebu fade * Dianggo: animasi: kf-fade-in 0.3s ease-metu; */ @keyframes kf-fade-in { saka { opacity: 0; } kanggo { opacity: 1; } }
Pranyatan @keyframes siji iki ngganti kabeh animasi fade-in sing kasebar ing basis kode kita. Resik, prasaja, lan ditrapake sacara global. Lan saiki wis ditetepake token iki, kita bisa nggunakake saka komponen apa wae ing proyek kita: .modal { animasi: kf-fade-in 0.3s ease-metu; }
.tooltip { animasi: kf-fade-in 0.2s ease-in-metu; }
.kabar { animasi: kf-fade-in 0,5s ease-metu; }
Deleng Token Pen Keyframes - Demo 2 [forked] dening Amit Sheen. Cathetan: Kita nggunakake awalan kf ing kabeh jeneng @keyframes. Ater-ater iki minangka papan jeneng sing ngalangi konflik jeneng karo animasi sing ana ing proyek kasebut lan nggawe cetha yen keyframes iki asale saka file token keyframes. Nggawe Slide Dinamis The kf-fade-in keyframes bisa gedhe amarga iku prasaja lan ana sethitik kamar kanggo kekacoan iku munggah. Nanging, ing animasi liyane, kita kudu luwih dinamis, lan ing kene kita bisa nggunakake kekuwatan properti khusus CSS. Iki ngendi token keyframes tenan cemlorot dibandhingake animasi statis kasebar. Ayo dadi njupuk skenario umum: "slide-in" animasi. Nanging geser saka ngendi? 100px saka tengen? 50% saka kiwa? Apa kudu mlebu saka ndhuwur layar? Utawa mungkin ngambang saka ngisor? Dadi akeh kemungkinan, nanging tinimbang nggawe keyframes sing kapisah kanggo saben arah lan saben variasi, kita bisa mbangun siji token fleksibel sing cocog karo kabeh skenario: /* * Slide In - animasi geser arah * Gunakake --kf-slide-from kanggo ngontrol arah * Default: geser saka kiwa (-100%) * Panganggone: * animasi: kf-slide-in 0.3s ease-metu; * --kf-geser-saka: -100px 0; // geser saka kiwa * --kf-geser-saka: 100px 0; // geser saka tengen * --kf-geser-saka: 0 -50px; // geser saka ndhuwur */
@keyframes kf-slide-in { saka { nerjemahake: var(--kf-geser-saka, -100% 0); } kanggo { nerjemahake: 0 0; } }
Saiki kita bisa nggunakake token @keyframes siji iki kanggo arah geser mung kanthi ngganti --kf-slide-from properti khusus: .sidebar { animasi: kf-slide-in 0.3s ease-metu; /* Migunakake nilai standar: geser saka kiwa */ }
.kabar { animasi: kf-slide-in 0.4s ease-metu; --kf-geser-saka: 0 -50px; /* geser saka ndhuwur */ }
.modal { animasi: kf-fade-in 0,5 detik, kf-geser-ing 0,5s kubik-bezier (0,34, 1,56, 0,64, 1); --kf-geser-saka: 50px 50px; /* geser saka ngisor-tengen */ }
Pendekatan iki menehi kita keluwesan luar biasa nalika njaga konsistensi. Siji deklarasi keyframe, kemungkinan tanpa wates. Deleng Token Pen Keyframes - Demo 3 [forked] dening Amit Sheen. Lan yen kita pengin nggawe animasi kita luwih fleksibel, ngidini kanggo efek "geser-metu" uga, kita bisamung nambah --kf-slide-to properti adat, padha karo apa sing bakal kita deleng ing bagean sabanjure. Bidirectional Zoom Keyframes Animasi umum liyane sing diduplikasi ing proyek yaiku efek "zoom". Apa iku ukuran subtle kanggo pesen roti panggang, zoom-in dramatis kanggo modal, utawa efek skala-mudhun alus kanggo judhul, animasi zoom ana ing endi wae. Tinimbang nggawe keyframes sing kapisah kanggo saben nilai skala, ayo mbangun siji set fleksibel keyframes kf-zoom:
/* * Zoom - animasi skala * Gunakake --kf-zoom-from lan --kf-zoom-to kanggo ngontrol nilai skala * Default: nggedhekake saka 80% dadi 100% (0.8 dadi 1) * Panganggone: * animasi: kf-zoom 0.2s ease-metu; * --kf-zoom-saka: 0,5; --kf-zoom-kanggo: 1; // zoom saka 50% nganti 100% * --kf-zoom-saka: 1; --kf-zoom-kanggo: 0; // zoom saka 100% nganti 0% * --kf-zoom-saka: 1; --kf-zoom-kanggo: 1.1; // zoom saka 100% nganti 110% */
@keyframes kf-zoom { saka { skala: var(--kf-zoom-saka, 0.8); } kanggo { skala: var(--kf-zoom-to, 1); } }
Kanthi siji definisi, kita bisa entuk variasi zoom sing dibutuhake: .toast { animasi: kf-slide-in 0.2s, kf-zoom 0.4s ease-metu; --kf-geser-saka: 0 100%; /* geser saka ndhuwur */ /* Migunakake zoom standar: timbangan saka 80% nganti 100% */ }
.modal { animasi: kf-zoom 0,3s kubik-bezier (0,34, 1,56, 0,64, 1); --kf-zoom-saka: 0; /* zoom dramatis saka 0% nganti 100% */ }
.heading { animasi: kf-fade-in 2s, kf-zoom 2s ease-in; --kf-zoom-saka: 1.2; --kf-zoom-kanggo: 0.8; /* Skala lembut mudhun */ }
Standar 0.8 (80%) bisa digunakake kanthi becik kanggo umume unsur UI, kayata pesen roti panggang lan kertu, nalika isih gampang diatur kanggo kasus khusus. Deleng Token Pen Keyframes - Demo 4 [forked] dening Amit Sheen. Sampeyan bisa uga wis weruh soko menarik ing conto anyar: kita wis nggabungake animasi. Salah sawijining kaluwihan utama kanggo nggarap token @keyframes yaiku dirancang kanggo nggabungake kanthi lancar. Komposisi alus iki sengaja, ora sengaja. Kita bakal ngrembug komposisi animasi kanthi luwih rinci mengko, kalebu ing ngendi bisa dadi masalah, nanging paling kombinasi langsung lan gampang dileksanakake. Cathetan: Nalika nulis artikel iki, lan bisa uga amarga nulis, aku mikir maneh kabeh gagasan animasi mlebu. Kanthi kabeh kemajuan anyar ing CSS, apa kita isih butuh kabeh? Untunge, Adam Argyle njelajah pitakonan sing padha lan nyatakake kanthi apik ing bloge. Iki ora mbantah apa sing ditulis ing kene, nanging menehi pendekatan sing kudu dipikirake, utamane yen proyek sampeyan gumantung banget karo animasi mlebu. Animasi Terus-terusan Nalika animasi mlebu, kaya "fade", "slide", lan "zoom" kedadeyan sepisan banjur mandheg, animasi terus-terusan muter tanpa wates kanggo narik kawigaten utawa nuduhake kegiatan sing lagi aktif. Loro animasi terus-terusan sing paling umum sing daktemu yaiku "spin" (kanggo indikator loading) lan "pulsa" (kanggo nyorot unsur penting). Animasi iki menehi tantangan unik nalika nggawe token keyframes. Ora kaya animasi mlebu sing biasane pindhah saka siji negara menyang negara liyane, animasi terus-terusan kudu bisa disesuaikan kanthi pola prilaku. Dokter Spin Saben proyek misale jek nggunakake macem-macem animasi muter. Sawetara muter searah jarum jam, liyane counterclockwise. Sawetara nindakake rotasi 360 derajat siji, liyane nindakake pirang-pirang giliran kanggo efek sing luwih cepet. Tinimbang nggawe keyframes sing kapisah kanggo saben variasi, ayo mbangun siji spin fleksibel sing nangani kabeh skenario:
/* * Spin - animasi rotasi * Gunakake --kf-spin-from lan --kf-spin-to kanggo ngontrol sawetara rotasi * Gunakake --kf-spin-giliran kanggo ngontrol jumlah rotasi * Default: muter saka 0deg nganti 360deg (1 rotasi lengkap) * Panganggone: * animasi: kf-spin 1s linear tanpa wates; * --kf-spin-giliran: 2; // 2 rotasi lengkap * --kf-spin-saka: 0deg; --kf-muter-kanggo: 180deg; // setengah rotasi * --kf-spin-saka: 0deg; --kf-muter-kanggo: -360deg; // nglawan arah jarum jam */
@keyframes kf-spin { saka { muter: var(--kf-spin-saka, 0deg); } kanggo { muter: calc(var(--kf-spin-saka, 0deg) + var(--kf-spin-kanggo, 360deg) * var(--kf-spin-giliran, 1)); } }
Saiki kita bisa nggawe variasi spin sing disenengi:
.loading-spinner { animasi: kf-spin 1s linear tanpa wates; /* Migunakake standar: muter saka 0deg nganti 360deg */ }
.pemuat cepet { animasi: kf-giliran 1.2s ease-in-metu sulih tanpa wates; --kf-giliran-giliran: 3; /* 3 rotasi lengkap kanggo saben arah saben siklus*/ }
.mundur-mundur { animasi: kf-giliran 1,5s langkah (8) tanpa wates; --kf-muter-kanggo: -360deg; /* nglawan arah jarum jam */ }
.alus-goyang { animasi: kf-giliran 2s ease-in-metu sulih tanpa wates; --kf-spin-saka: -16deg; --kf-spin-kanggo: 32deg; /* goyangake 36 deg: antarane -18deg lan +18deg */ }
Waca Pen Keyframes Token - Demo 5 [forked] dening Amit Sheen. Kaendahan saka pendekatan iki yaiku keyframes sing padha bisa digunakake kanggo ngunggahake spinner, muter lambang, efek goyang, lan malah animasi multi-turn rumit. Paradoks Pulsa Animasi pulsa luwih trickier amarga bisa "pulsa" sifat sing beda. Sawetara pulsa skala, liyane pulsa opacity, lan sawetara sifat werna pulsa kayata padhang utawa jenuh. Tinimbang nggawe keyframes kapisah kanggo saben properti, kita bisa nggawe keyframes sing bisa karo sembarang properti CSS. Punika conto keyframe pulsa kanthi opsi ukuran lan opacity:
/* * Pulse - animasi pulsing * Gunakake --kf-pulse-scale-from lan --kf-pulse-scale-to kanggo ngontrol rentang skala * Gunakake --kf-pulse-opacity-from lan --kf-pulse-opacity-to kanggo ngontrol sawetara opacity * Default: ora ana pulsa (kabeh nilai 1) * Panganggone: * animasi: kf-pulsa 2s ease-in-out sulih tanpa wates; * --kf-pulsa-skala-saka: 0.95; --kf-pulsa-skala-kanggo: 1.05; // skala pulsa * --kf-pulse-opacity-saka: 0.7; --kf-pulse-opacity-kanggo: 1; // pulsa opacity */
@keyframes kf-pulsa { saka { skala: var(--kf-pulse-scale-saka, 1); opacity: var(--kf-pulse-opacity-saka, 1); } kanggo { skala: var(--kf-pulse-scale-to, 1); opacity: var(--kf-pulse-opacity-to, 1); } }
Iki nggawe pulsa fleksibel sing bisa nguripake macem-macem properti: .call-to-action { animasi: kf-pulsa 0,6s sulih tanpa wates; --kf-pulse-opacity-saka: 0,5; /* pulsa opacity */ }
.kabar-titik { animasi: kf-pulsa 0,6s ease-in-metu sulih tanpa wates; --kf-pulsa-skala-saka: 0.9; --kf-pulsa-skala-kanggo: 1.1; /* pulsa skala */ }
.text-highlight { animasi: kf-pulsa 1,5s ease-metu tanpa wates; --kf-pulsa-skala-saka: 0.8; --kf-pulse-opacity-saka: 0.2; /* skala lan pulsa opacity */ }
Deleng Token Pen Keyframes - Demo 6 [forked] dening Amit Sheen. Keyframe kf-pulsa siji iki bisa nangani kabeh saka manungsa waé subtle kanggo highlights serem, kabeh nalika gampang kanggo ngatur. Easing Lanjut Salah sawijining perkara sing apik babagan nggunakake token keyframes yaiku gampang banget kanggo nggedhekake perpustakaan animasi lan menehi efek sing umume pangembang ora bakal keganggu nulis saka awal, kayata elastis utawa mumbul. Punika conto token keyframes "mumbul" prasaja sing nggunakake properti khusus --kf-bounce-from kanggo ngontrol dhuwur mlumpat. /* * Animasi mlebu mumbul - mumbul * Gunakake --kf-bounce-from kanggo ngontrol dhuwur mlumpat * Default: mlumpat saka 100vh (mati layar) * Panganggone: * animasi: kf-mumbul 3s ease-in; * --kf-mumbul-saka: 200px; // mlumpat saka dhuwur 200px */
@keyframes kf-bounce { 0% { nerjemahake: 0 calc(var(--kf-mumbul-saka, 100vh) * -1); }
34% { nerjemahake: 0 calc(var(--kf-mumbul-saka, 100vh) * -0.4); }
55% { nerjemahake: 0 calc(var(--kf-mumbul-saka, 100vh) * -0.2); }
72% { nerjemahake: 0 calc(var(--kf-mumbul-saka, 100vh) * -0.1); }
85% { nerjemahake: 0 calc(var(--kf-mumbul-saka, 100vh) * -0,05); }
94% { nerjemahake: 0 calc(var(--kf-mumbul-saka, 100vh) * -0,025); }
99% { nerjemahake: 0 calc(var(--kf-mumbul-saka, 100vh) * -0,0125); }
22%, 45%, 64%, 79%, 90%, 97%, 100% { nerjemahake: 0 0; animasi-timing-fungsi: ease-metu; } }
Animasi kaya "elastis" rada angel amarga petungan ing keyframes. Kita kudu nemtokake --kf-elastis-saka-X lan --kf-elastis-saka-Y kanthi kapisah (loro-lorone opsional), lan bebarengan supaya kita nggawe lawang elastis saka sembarang titik ing layar.
/* * Elastis In - animasi mlebu elastis * Gunakake --kf-elastic-from-X lan --kf-elastic-from-Y kanggo ngontrol posisi wiwitan * Default: mlebu saka tengah ndhuwur (0, -100vh) * Panganggone: * animasi: kf-elastis-in 2s ease-in-metu loro; * --kf-elastis-saka-X: -50px; * --kf-elastis-saka-Y: -200px; // ketik saka (-50px, -200px) */
@keyframes kf-elastic-in { 0% { nerjemahake: calc(var(--kf-elastis-saka-X, -50vw) * 1) calc(var(--kf-elastis-saka-Y, 0px) * 1); }
16% { nerjemahake: calc(var(--kf-elastis-saka-X, -50vw) * -0.3227) calc(var(--kf-elastis-saka-Y, 0px) * -0.3227); }
28% { nerjemahake: calc(var(--kf-elastis-saka-X, -50vw) * 0,1312)calc(var(--kf-elastis-saka-Y, 0px) * 0.1312); }
44% { nerjemahake: calc(var(--kf-elastis-saka-X, -50vw) * -0.0463) calc(var(--kf-elastis-saka-Y, 0px) * -0.0463); }
59% { nerjemahake: calc(var(--kf-elastis-saka-X, -50vw) * 0.0164) calc(var(--kf-elastis-saka-Y, 0px) * 0.0164); }
73% { nerjemahake: calc(var(--kf-elastis-saka-X, -50vw) * -0.0058) calc(var(--kf-elastis-saka-Y, 0px) * -0.0058); }
88% { nerjemahake: calc(var(--kf-elastis-saka-X, -50vw) * 0,0020) calc(var(--kf-elastis-saka-Y, 0px) * 0,0020); }
100% { nerjemahake: 0 0; } }
Pendekatan iki nggampangake nggunakake maneh lan ngatur keyframes canggih ing proyek kita, mung kanthi ngganti properti khusus siji.
.mumbul-lan-zoom { animasi: kf-bounce 3s gampang mlebu, kf-zoom 3s linear; --kf-zoom-saka: 0; }
.mumbul-lan-geser { animasi-komposisi: nambah; /* Loro-lorone animasi nggunakake terjemahan */ animasi: kf-bounce 3s gampang mlebu, kf-slide-in 3s ease-metu; --kf-geser-saka: -200px; }
.elastis-in { animasi: kf-elastis-in 2s ease-in-metu loro; }
Deleng Token Pen Keyframes - Demo 7 [forked] dening Amit Sheen. Nganti titik iki, kita wis weruh carane kita bisa nggabungake keyframes kanthi cara sing cerdas lan efisien. Mesthi wae, sampeyan bisa uga pengin ngapiki supaya luwih cocog karo kabutuhan proyek sampeyan, nanging kita wis nyakup conto sawetara animasi umum lan kasus panggunaan saben dina. Lan kanthi token keyframes iki, kita saiki duwe blok bangunan sing kuat kanggo nggawe animasi sing konsisten lan bisa dipertahankan ing kabeh proyek. Ora ana maneh keyframe duplikat, ora ana konflik lingkup global. Mung cara sing resik lan trep kanggo nangani kabeh kabutuhan animasi. Nanging pitakonan sing nyata yaiku: Kepiye carane nggawe blok bangunan kasebut bebarengan? Sijine Kabeh Kita wis weruh sing nggabungake token keyframes dhasar iku prasaja. Kita ora butuh apa-apa khusus nanging kanggo nemtokake animasi pisanan, nemtokake sing kapindho, nyetel variabel sing dibutuhake, lan mung. /* Fade in + slide in */ .toast { animasi: kf-fade-in 0.4s, kf-geser-ing 0,4s kubik-bezier (0,34, 1,56, 0,64, 1); --kf-geser-saka: 0 40px; }
/* Zoom in + fade in */ .modal { animasi: kf-fade-in 0.3s, kf-zoom 0,3s kubik-bezier(0,34, 1,56, 0,64, 1); --kf-zoom-saka: 0.7; --kf-zoom-kanggo: 1; }
/* Geser + pulsa */ .kabar { animasi: kf-slide-in 0.5s, kf-pulsa 1.2s ease-in-metu sulih tanpa wates; --kf-geser-saka: -100px 0; --kf-pulsa-skala-saka: 0.95; --kf-pulsa-skala-kanggo: 1.05; }
Kombinasi iki bisa digunakake kanthi apik amarga saben animasi ngarahake properti sing beda: opacity, transform (terjemahake / skala), lsp. Nanging kadhangkala ana konflik, lan kita kudu ngerti sebabe lan carane ngatasi. Nalika loro animasi nyoba kanggo animate properti sing padha - contone, loro ukuran animasi utawa loro-lorone animasi opacity - asil ora bakal dikarepake. Kanthi gawan, mung siji animasi sing ditrapake kanggo properti kasebut, yaiku sing pungkasan ing dhaptar animasi. Iki minangka watesan babagan carane CSS nangani pirang-pirang animasi ing properti sing padha. Contone, iki ora bakal bisa digunakake amarga mung animasi kf-pulsa sing bakal ditrapake. .bad-combo { animasi: kf-zoom 0.5s maju, kf-pulsa 1.2s sulih tanpa wates; --kf-zoom-saka: 0.5; --kf-zoom-kanggo: 1.2; --kf-pulsa-skala-saka: 0.8; --kf-pulsa-skala-kanggo: 1.1; }
Tambahan Animasi Cara sing paling gampang lan langsung kanggo nangani pirang-pirang animasi sing mengaruhi properti sing padha yaiku nggunakake properti komposisi animasi. Ing conto pungkasan ndhuwur, animasi kf-pulsa nggantèkaké animasi kf-zoom, supaya kita ora bakal weruh zoom dhisikan lan ora njaluk ukuran samesthine kanggo 1.2. Kanthi nyetel animasi-komposisi kanggo nambah, kita marang browser kanggo gabungke loro animasi. Iki menehi asil sing dikarepake. .komponen-loro { animasi-komposisi: nambah; }
Deleng Token Pen Keyframes - Demo 8 [forked] dening Amit Sheen. Pendekatan iki bisa digunakake kanggo umume kasus nalika kita pengin nggabungake efek ing properti sing padha. Iku uga migunani nalika kita kudu nggabungake animasi karo nilai properti statis. Contone, yen kita duwe unsur sing nggunakake properti nerjemahake kanggo posisi persis ing ngendi kita arep, lan banjur kita arep kanggo animate ing karo kf-slide-in keyframes, kita njaluk lompat katon ora becik tanpa animasi-komposisi. Deleng Token Pen Keyframes - Demo 9 [forked] dening Amit Sheen. Kanthi animasi-komposisi disetel kanggo nambah, animasi lancar digabungake karo anangowahi, supaya unsur tetep ing panggonan lan animates kaya samesthine. Animasi Stagger Cara liya kanggo nangani macem-macem animasi yaiku "stagger" - yaiku, miwiti animasi kapindho rada sawise sing pisanan rampung. Iku ora solusi sing bisa kanggo saben cilik, nanging migunani nalika kita duwe animasi ngleboke ngiring dening animasi terus. /* fade in + pulsa opacity */ .kabar { animasi: kf-fade-in 2s ease-out, kf-pulsa 0,5s 2s ease-in-metu sulih tanpa wates; --kf-pulse-opacity-kanggo: 0,5; }
Deleng Token Pen Keyframes - Demo 10 [forked] dening Amit Sheen. Urusan pesenan Sebagean gedhe saka animasi sing kita gunakake nggunakake properti transformasi. Ing sawetara kasus, iki mung luwih trep. Uga nduweni kaluwihan kinerja amarga animasi transformasi bisa dipercepat GPU. Nanging yen kita nggunakake transformasi, kita kudu nampa yen urutan sing ditindakake transformasi penting. akeh. Ing keyframes kita nganti saiki, kita wis nggunakake transformasi individu. Miturut spek, iki tansah ditrapake ing urutan tetep: pisanan, unsur bakal nerjemahake, banjur muter, banjur skala. Iki ndadekake pangertèn lan apa sing paling kita ngarepake. Nanging, yen nggunakake properti transformasi, urutan fungsi kasebut ditulis minangka urutan sing ditrapake. Ing kasus iki, yen kita mindhah soko 100 piksel ing sumbu X lan banjur muter ing 45 derajat, iku ora padha pisanan muter 45 derajat lan banjur obah 100 piksel. /* Kotak pink: Terjemahake dhisik, banjur puter */ .conto-siji { ngowahi: translateX (100px) muter (45deg); }
/* Kotak ijo: Puter dhisik, banjur terjemahake */ .conto-loro { ngowahi: muter (45deg) translateX (100px); }
Deleng Token Pen Keyframes - Demo 11 [forked] dening Amit Sheen. Nanging miturut urutan transformasi, kabeh transformasi individu - kabeh sing wis digunakake kanggo token keyframes - kedadeyan sadurunge fungsi transformasi. Tegese apa wae sing disetel ing properti transformasi bakal kelakon sawise animasi. Nanging yen sampeyan nyetel, contone, nerjemahake bebarengan karo kf-spin keyframes, nerjemahake bakal kelakon sadurunge animasi. Bingung durung?! Iki ndadékaké kanggo kahanan sing nilai statis bisa nimbulaké asil beda kanggo animasi padha, kaya ing kasus ing ngisor iki:
/* Animasi umum kanggo loro spinner */ .pemutar { animasi: kf-spin 1s linear tanpa wates; }
/* Spinner pink: terjemahake sadurunge muter (transformasi individu) */ .spinner-pink { nerjemahake: 100% 50%; }
/* Spinner ijo: muter banjur terjemahake (urutan fungsi) */ .spinner-green { ngowahi: nerjemahake (100%, 50%); }
Deleng Token Pen Keyframes - Demo 12 [forked] dening Amit Sheen. Sampeyan bisa ndeleng sing spinner pisanan (pink) nemu translate sing mengkono sadurunge muter kf-giliran, supaya pisanan pindhah menyang panggonan lan banjur muter. Spinner kapindho (ijo) entuk fungsi nerjemahake () sing kedadeyan sawise owah-owahan individu, supaya unsur kasebut pisanan muter, banjur pindhah menyang sudut saiki, lan entuk efek orbit sing amba. Ora, iki dudu bug. Iku mung salah siji saka iku kita kudu ngerti bab CSS lan mbudidaya nalika nggarap macem-macem animasi utawa macem-macem transformasi. Yen perlu, sampeyan uga bisa nggawe pesawat tambahan kf-giliran-alt keyframes sing muter unsur nggunakake rotate () fungsi. Ngurangi Gerak Lan nalika kita ngomong babagan keyframes alternatif, kita ora bisa nglirwakake pilihan "ora ana animasi". Salah siji saka kaluwihan paling gedhe nggunakake keyframes token iku aksesibilitas bisa panggang ing, lan iku bener cukup gampang kanggo nindakake. Kanthi ngrancang keyframes kita kanthi nimbang aksesibilitas, kita bisa mesthekake yen pangguna sing seneng gerakan suda entuk pengalaman sing luwih lancar lan ora ngganggu, tanpa gaweyan ekstra utawa duplikasi kode. Makna sing tepat saka "Gerakan Suda" bisa diganti rada saka siji animasi menyang liyane, lan saka proyek menyang proyek, nanging ana sawetara poin penting sing kudu dielingi: Muting Keyframes Nalika sawetara animasi bisa softened utawa kalem mudhun, ana liyane sing kudu ilang rampung nalika suda gerakan dijaluk. Animasi pulsa minangka conto sing apik. Kanggo mesthekake animasi iki ora mlaku ing mode gerakan suda, kita mung bisa mbungkus ing pitakonan media cocok.
@media (prefers-reduced-motion: no-preference) { @keyfrmaes kf-pulse { saka { skala: var(--kf-pulse-scale-saka, 1); opacity: var(--kf-pulse-opacity-saka, 1); } kanggo { skala: var(--kf-pulse-scale-to, 1); opacity:var(--kf-pulse-opacity-to, 1); } } }
Iki mesthekake yen pangguna sing nyetel preferensi-reduced-motion kanggo nyuda ora bakal weruh animasi lan bakal entuk pengalaman sing cocog karo pilihane. Langsung In Ana sawetara keyframes kita ora bisa mung mbusak, kayata animasi mlebu. Nilai kudu diganti, kudu animasi; yen ora, unsur ora bakal duwe nilai bener. Nanging ing gerakan suda, transisi iki saka nilai awal kudu cepet. Kanggo entuk iki, kita bakal nemtokake set ekstra keyframes ngendi Nilai mundhak langsung menyang negara pungkasan. Iki dadi keyframes standar kita. Banjur, kita bakal nambah keyframes biasa ing query media kanggo prefers-reduced-motion disetel kanggo ora-preferensi, kaya ing conto sadurunge. /* pop in enggal kanggo nyuda gerakan */ @keyframes kf-zoom { saka, kanggo { skala: var(--kf-zoom-to, 1); } }
@media (prefers-reduced-motion: no-preference) { /* Keyframe zoom asli */ @keyframes kf-zoom { saka { skala: var(--kf-zoom-saka, 0.8); } kanggo { skala: var(--kf-zoom-to, 1); } } }
Kanthi cara iki, pangguna sing luwih seneng gerakan suda bakal weruh unsur kasebut katon langsung ing kahanan pungkasan, dene wong liya entuk transisi animasi. Pendekatan Lembut Ana kasus nalika kita pengin tetep gerakan, nanging luwih alus lan luwih tenang tinimbang animasi asli. Contone, kita bisa ngganti ngleboke mumbul karo fade-in alus.
@keyframes kf-bounce { /* Fade-in alus kanggo gerakan suda */ }
@media (prefers-reduced-motion: no-preference) { @keyframes kf-bounce { /* Keyframes bouncing asli */ } }
Saiki, pangguna kanthi gerakan sing dikurangi isih bisa katon, nanging tanpa gerakan sing kuat saka animasi bouncing utawa elastis. Kanthi pamblokiran bangunan, pitakonan sabanjure yaiku carane nggawe bagean saka alur kerja sing nyata. Nulis keyframes fleksibel iku salah siji bab, nanging nggawe wong dipercaya ing project gedhe mbutuhake sawetara Sastranegara sing aku kudu sinau cara hard. Strategi Implementasi & Praktik Paling Apik Sawise kita duwe perpustakaan padhet keyframes token, tantangan nyata carane nggawa menyang karya saben dinten.
Godaan iku kanggo nyelehake kabeh keyframes ing bebarengan lan wara-wara masalah ditanggulangi, nanging ing laku aku wis ketemu sing asil paling apik teka saka Adoption bertahap. Mulai karo animasi sing paling umum, kayata fade utawa slide. Iki minangka kamenangan gampang sing nuduhake nilai langsung tanpa mbutuhake nulis ulang gedhe. Penamaan minangka titik liyane sing kudu digatekake. Ater-ater utawa ruang jeneng sing konsisten ndadekake jelas animasi sing dadi token lan sing lokal siji-off. Iki uga nyegah tabrakan sing ora disengaja lan mbantu anggota tim anyar ngenali sistem sing dienggo bareng kanthi cepet. Dokumentasi penting kaya kode kasebut. Malah komentar singkat ing ndhuwur saben token keyframes bisa ngirit jam kanggo ngiro-iro mengko. Pangembang kudu bisa mbukak file token, mindai efek sing dibutuhake, lan nyalin pola panggunaan langsung menyang komponen kasebut. Fleksibilitas sing ndadekake pendekatan iki worth gaweyan. Kanthi mbabarake properti khusus sing wicaksana, kita menehi ruang kanggo tim kanggo adaptasi animasi tanpa ngrusak sistem. Ing wektu sing padha, nyoba ora overcomplicate. Nyedhiyani knobs sing penting lan supaya liyane opinionated. Pungkasan, elinga aksesibilitas. Ora saben animasi mbutuhake alternatif gerakan suda, nanging akeh. Baking ing pangaturan iki awal tegese kita ora kudu retrofit mau mengko, lan nuduhake tingkat care sing kedhaftar kita bakal sok dong mirsani sanajan padha tau sebutno iku.
Ing pengalamanku, nambani token keyframes minangka bagéan saka alur kerja token desain kita sing ndadekake token kasebut tetep. Yen wis ana, dheweke mandheg ngrasa kaya efek khusus lan dadi bagean saka basa desain, extension alami babagan gerakan lan respon produk. Bungkus Animasi bisa dadi salah sawijining bagéan sing paling nyenengake ing antarmuka bangunan, nanging tanpa struktur, bisa uga dadi salah sawijining sumber frustasi sing paling gedhe. Kanthi nambani keyframes minangka token, sampeyan njupuk soko sing biasane tumoto lan hard kanggo ngatur lan nguripake menyang cetha, sistem katebak. Nilai nyata ora mung nyimpen sawetara baris kode. Kanthi kapercayan yen sampeyan nggunakake fade, slide, zoom, utawa spin, sampeyan ngerti persis kepiye tumindak ing proyek kasebut. Ana ing keluwesan sing asale saka sifat khusus tanpa kekacauan variasi tanpa wates. Lan iku ing aksesibilitas dibangun menyang madegé tinimbang ditambahaké minangkasawijining afterthought. Aku wis weruh gagasan iki dianggo ing tim beda lan codebases beda, lan pola tansah padha. Sawise token wis ana, keyframes mandheg dadi koleksi trik sing kasebar lan dadi bagian saka basa desain. Padha nggawe produk aran luwih disengojo, luwih konsisten, lan luwih urip. Yen sampeyan njupuk siji bab saka artikel iki, supaya iki: animasi pantes care lan struktur padha kita wis menehi kanggo werna, tipografi, lan spasi. Investasi cilik ing token keyframes mbayar saben antarmuka sampeyan pindhah.