Tek örnekte bir CSS animasyonu
Bir animasyonun iki parçası vardır: adımları tarif eden @keyframes ve onları bir süreyle bir elemente uygulayan animation özelliği. Bu kart sayfa yüklendiğinde kayarak ve belirerek geliyor:
Kodu düzenle (ya da süreyi 2s yap), önizleme yeniden yüklenir ve kartın tekrar gelişini izleyebilirsin. @media (prefers-reduced-motion: reduce) bloğu, keyframe'leri yalnızca sistemi hareketi azaltacak şekilde ayarlı okuyucular için bir solmayla değiştirir.
@keyframes söz dizimi
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.08); }
100% { transform: scale(1); }
}
from,0%ile,toise100%ile aynıdır.- İhtiyacın kadar yüzde adımı ekle. Aynı stillere sahip adımlar tek satırı paylaşabilir:
0%, 100% { ... }. - İlk ya da son keyframe'de eksik olan bir özellik, elementin kendi değerinden ya da ona doğru canlandırılır.
- Ad (
pulse),animation-name'e verdiğin şeydir. Büyük küçük harfe duyarlıdır venonegibi bir anahtar kelime olmamalıdır.
animation özellikleri
| Özellik | Ne ayarlar | Varsayılan |
|---|---|---|
animation-name | hangi @keyframes'in çalışacağı | none |
animation-duration | bir döngünün uzunluğu | 0s |
animation-timing-function | keyframe'ler arasındaki hız eğrisi | ease |
animation-delay | ilk döngüden önceki bekleme (negatif değer ortasından başlatır) | 0s |
animation-iteration-count | döngü sayısı ya da infinite | 1 |
animation-direction | normal, reverse, alternate, alternate-reverse | normal |
animation-fill-mode | öncesi ve sonrası için stiller: none, forwards, backwards, both | none |
animation-play-state | running ya da paused | running |
Kısa yazım onları neredeyse her sırada alır. Tek kural, ilk süre değerinin duration, ikincisinin delay olmasıdır:
.loader {
animation: pulse 1.2s ease-in-out 0.2s infinite alternate both;
/* name duration timing delay count direction fill */
}
direction ve fill-mode, canlı
Bir direction, bir fill mode ve bir sayı seç, sonra Play'e bas. Kutu yolun sonuna doğru 200px ilerler. Gösterge, animasyon bittikten sonra kutunun nerede durduğunu söyler:
Nelere bakmalı:
fill-mode: none(varsayılan): son kareden sonra kutu x = 0'a geri atlar ve tekrar kehribar rengine döner.forwards: son keyframe'de kalır.normalile bu x = 200 ve yeşildir;reverseile x = 0 ve mavide biter, çünkü oynatılan son keyframefrom'dur.- 2 sayısıyla
alternategidip geri gelir, bu yüzdenforwardsbile x = 0'da biter.
Sonsuz döngüler: bir yükleme göstergesi
infinite sonsuza kadar tekrar eder ve her çocuktaki animation-delay onları sırayla hareket edecek şekilde kaydırır. Döngüleri sakin tut: yavaş, küçük, yanıp sönmeyen.
aria-label ile birlikte role="status", ekran okuyucu kullanıcılarına bir şeyin yüklendiğini söyler; noktalar tek başına bunu söylemez. Dönen bir daire için döndürme sayfasına bak.
Animasyonları duraklatmak ve kontrol etmek
animation-play-state: paused bir animasyonu olduğu yerde dondurur, running ise oradan devam ettirir. Duraklatmak için aşağıdaki çubuğun üzerine gel:
JavaScript'ten element.getAnimations() çalışan CSS animasyonlarını döndürür; her birinde pause(), play(), cancel() ve okuyup ayarlayabileceğin bir currentTime vardır. animationend olayı sonsuz olmayan bir animasyon bittiğinde, animationiteration ise her döngünün sonunda tetiklenir.
Azaltılmış harekete saygı göster ve asla yanıp sönme
Her animasyona iki erişilebilirlik kuralı uygulanır:
- Azaltılmış hareket. İnsanlar hareket onları rahatsız ettiği için sistemlerinden daha az hareket isteyebilir. En güvenli kalıp, hareketi yalnızca daha azını istemedikleri durumda eklemektir:
@media (prefers-reduced-motion: no-preference) {
.hero-title { animation: slide-in 0.8s ease-out both; }
}
- Yanıp sönme yok. Bir saniyede üç kereden fazla yanıp sönen içerik nöbetleri tetikleyebilir. Hızlı, yüksek kontrastlı yanıp sönmeden tamamen kaçın.
Animasyonları akıcı tut
Mümkün olduğunda transform ve opacity canlandır. Tarayıcı onları sayfayı yeniden yerleştirmeden uygulayabilir, bu yüzden yavaş telefonlarda bile akıcı kalırlar. width, height, top, left ya da margin canlandırmak her karede düzeni yeniden hesaplar. Bir elementi taşımak için transform sayfasındaki translate()'i kullan.
Sık yapılan hatalar
- Süre yok.
animation: fade;hiçbir şey yapmaz, çünkü varsayılan süre0s'dir. - Eşleşmeyen bir ad.
animation-name, büyük küçük harf dahil@keyframesadıyla tam olarak eşleşmelidir. - Sonda geri atlamak. Son keyframe'i korumak için
forwards(ya daboth) ekle. - Gecikmeli bir animasyon başlamadan önce titreme.
animation-delaysırasında element normal stillerini gösterir.backwards(ya daboth) gecikme sırasında ilk keyframe'i uygular. - Aynı değeri ayarlayarak bir animasyonu yeniden başlatmak. Aynı
animation'ı tekrar ayarlamak hiçbir şey yapmaz. Yukarıdaki Play butonunun yaptığı gibi onu kaldır, yeniden yerleşimi zorla (el.offsetWidth) ve tekrar ayarla. display'i canlandırmak. Anında geçer. Bunun yerineopacityvetransformcanlandır.
Sıkça Sorulan Sorular
CSS'te animasyon nasıl yapılır?
Adımları @keyframes name { from { ... } to { ... } } ile tanımla, sonra onu animation özelliği ve bir süreyle bir elemente uygula: animation: name 1s ease-out;. Süre zorunludur, çünkü varsayılanı 0s'dir.
animation-fill-mode: forwards ne işe yarar?
Animasyon bittikten sonra son keyframe'in stillerini korur. O olmadan element normal stillerine geri atlar. backwards gecikme sırasında ilk keyframe'i uygular, both ise ikisini de yapar.
Bir CSS animasyonu sonsuz döngüye nasıl sokulur?
animation-iteration-count: infinite ayarla ya da kısa yazıma infinite ekle: animation: spin 1s linear infinite;. Her döngüde ileri sonra geri oynatmak için alternate ekle.
CSS animation ile transition arasındaki fark nedir?
Bir transition, bir özellik değiştiğinde, genellikle hover'da ya da bir class değişiminde onu iki değer arasında canlandırır. Bir animation ise uygulandığı anda kendiliğinden çalışır, istenen sayıda keyframe'i olabilir ve tekrar edebilir, ters dönebilir ve duraklatılabilir.
Bir CSS animasyonu nasıl duraklatılır?
Elemente animation-play-state: paused ver, örneğin :hover'da ya da JavaScript'in eklediği bir class ile. Onu tekrar running yapmak durduğu yerden devam ettirir.
Azaltılmış hareket tercih eden kullanıcılar için animasyonlar nasıl kapatılır?
Animasyonu @media (prefers-reduced-motion: no-preference) { ... } ile sar ya da @media (prefers-reduced-motion: reduce) { ... } içinde kaldır. Sorgu, kullanıcının işletim sistemindeki hareketi azaltma ayarını takip eder.