The CSS Podcast - 022: Animation
Bazen arayüzde, tıklandığında ilgili bölümle ilgili yararlı bilgiler sağlayan küçük yardımcılar görürsünüz. Bu tür öğelerde, bilginin mevcut olduğunu ve etkileşime geçilmesi gerektiğini size nazikçe bildirmek için genellikle titreşen bir animasyon bulunur. Bu modülde, CSS'yi kullanarak bu yardımcı araçları ve diğer animasyonları nasıl oluşturacağınız gösterilmektedir.
Animasyon kareleri içeren bir animasyon dizisi ayarlamak için CSS'yi kullanabilirsiniz. Bu sekanslar basit, tek durumlu animasyonlar veya karmaşık, zamana dayalı sekanslar olabilir.
Animasyon karesi nedir?
Çoğu animasyon aracında animasyon kareleri, zaman çizelgesindeki zaman damgalarına animasyon durumları atamak için kullandığınız mekanizmadır.
Örneğin, titreşen "yardımcı" noktanın zaman çizelgesi aşağıda verilmiştir. Animasyon 1 saniye boyunca çalışır ve 2 durumu vardır.
Bu animasyon durumlarının her birinin başlangıç ve bitiş noktası vardır. Bunları zaman çizelgesinde animasyon kareleriyle eşleyebilirsiniz.
@keyframes
CSS @keyframes
, animasyon kareleriyle aynı konsepte dayanır.
İki durum içeren bir örnek:
@keyframes my-animation {
from {
transform: translateY(20px);
}
to {
transform: translateY(0px);
}
}
Önemli olan ilk kısım, keyframe kuralının adı olan özel tanımlayıcı (custom-ident
)'dır. Bu örnekteki tanımlayıcı my-animation
'tır.
Özel tanımlayıcı, CSS kodunuzun başka bir yerinde animasyon kareleri kuralına referans vermenize olanak tanıyan bir işlev adı gibi çalışır.
Animasyon kareleri kuralının içinde from
ve to
, animasyonun başlangıcı ve sonu olan 0%
ile 100%
değerlerini temsil eden anahtar kelimelerdir.
Aynı kuralı aşağıdaki gibi yeniden oluşturabilirsiniz:
@keyframes my-animation {
0% {
transform: translateY(20px);
}
100% {
transform: translateY(0px);
}
}
Zaman aralığına istediğiniz kadar pozisyon ekleyebilirsiniz. Titreyen yardımcı örneğinde, iki ana kareyle ilişkilendirilen iki durum vardır. Bu, animasyon karesi kuralınızda bu animasyon karelerinin her birinin değişikliklerini temsil eden iki konumunuz olduğu anlamına gelir.
@keyframes pulse {
0% {
opacity: 0;
}
50% {
transform: scale(1.4);
opacity: 0.4;
}
}
animation
mülkleri
@keyframes
öğenizi bir CSS kuralında kullanmak için çeşitli animasyon özelliklerini tek tek tanımlayabilir veya animation
kısayol özelliğini kullanabilirsiniz.
animation-duration
.my-element {
animation-duration: 10s;
}
animation-duration özelliği, @keyframes
zaman çizelgesinin zaman değeri olarak ne kadar uzun olması gerektiğini tanımlar.
Varsayılan olarak 0 saniyedir. Bu, animasyonun çalışmaya devam ettiği ancak sizin göremeyeceğiniz kadar hızlı olduğu anlamına gelir. Negatif saat değerleri kullanamazsınız.
animation-timing-function
Animasyonda doğal hareketi yeniden oluşturmak için her noktada animasyon hızını hesaplayan zamanlama işlevlerini kullanabilirsiniz. Hesaplanan değerler genellikle eğri olduğundan animasyon, animation-duration
boyunca değişen hızlarda çalışır ve tarayıcı @keyframes
'da tanımlananların dışında bir değer hesaplarsa öğenin sıçradığı görülür.
CSS'de hazır ayar olarak kullanılabilen ve animation-timing-function için değer olarak kullanılan çeşitli anahtar kelimeler vardır:
linear
, ease
, ease-in
, ease-out
, ease-in-out
.
.my-element {
animation-timing-function: ease-in-out;
}
Easing işlevi değerleri, hız modellemek için kullanılan bir işlev türü olan Bézier eğrisi kullanılarak hesaplandığından eğri gibi görünür. ease
gibi zamanlama işlevi anahtar kelimelerinin her biri, önceden tanımlanmış bir Bézier eğrisine referans verir. CSS'de, doğrudan cubic-bezier()
işlevini kullanarak bir Bezier eğrisi tanımlayabilirsiniz. Bu işlev dört sayısal değer kabul eder: x1
, y1
, x2
, y2
.
.my-element {
animation-timing-function: cubic-bezier(.42, 0, .58, 1);
}
Bu değerler, eğrinin her bir bölümünü X ve Y eksenleri boyunca gösterir.
Bézier eğrilerini anlamak karmaşıktır. Lea Verou'nun bu oluşturucusu gibi görsel araçlar çok faydalıdır.
steps
yumuşatma işlevi
Bazen, eğri yerine aralıklarla hareket ederek animasyonunuz üzerinde daha ayrıntılı kontrol sahibi olmak isteyebilirsiniz. steps()
easing işlevi, zaman çizelgesini eşit süre olan belirli aralıklara bölmenize olanak tanır.
.my-element {
animation-timing-function: steps(10, end);
}
İlk bağımsız değişken, adım sayısıdır. Animasyon karesi sayısı adım sayısıyla aynıysa her animasyon karesi, adımının tam süresi boyunca sırayla oynatılır ve durumlar arasında geçiş yapılmaz. Animasyon karesi sayısı adımlardan azsa tarayıcı, ikinci bağımsız değişkene bağlı olarak animasyon kareleri arasına adımlar ekler.
İkinci bağımsız değişken yöndür. Varsayılan olarak end
olarak ayarlanmışsa adımlar, zaman çizelgenizin sonunda sona erer. Bu değer start
olarak ayarlanırsa animasyonunuzun ilk adımı başlar başlamaz tamamlanır. Yani animasyon, end
değerine göre bir adım daha erken sona erer.
animation-iteration-count
.my-element {
animation-iteration-count: 10;
}
animation-iteration-count mülkü, @keyframes
zaman çizelgesinin animasyon sırasında kaç kez çalıştırılacağını tanımlar. Varsayılan olarak bu değer 1'dir. Yani animasyon, zaman çizelgenizin sonuna ulaştığında durur. Bu değer negatif sayı olamaz.
Animasyonunuzu döngüye sokmak için iterasyon sayısını infinite
olarak ayarlayın. Bu dersin başındaki titreşen animasyon bu şekilde çalışır.
animation-direction
.my-element {
animation-direction: reverse;
}
Zaman çizelgesinin animasyon kareleriniz üzerinde hangi yönde ilerleyeceğini animation-direction ile ayarlayabilirsiniz. Bu özellik aşağıdaki değerleri alır:
normal
: Varsayılan değerdir ve ileriyi gösterir.reverse
: Zaman çizelgeniz geriye doğru oynatılır.alternate
: Her animasyon iterasyonunda zaman çizelgesi ileri ve geri oynatılır.alternate-reverse
:alternate
ile aynıdır ancak animasyon, zaman çizelgesinin geriye doğru ilerlemesiyle başlar.
animation-delay
.my-element {
animation-delay: 5s;
}
animation-delay özelliği, tarayıcının animasyonu başlatmadan önce ne kadar bekleyeceğini tanımlar.
animation-duration
mülkü gibi bu da bir zaman değeri kabul eder.
animation-duration
'ün aksine, animation-delay
'ı negatif bir değer olarak tanımlayabilirsiniz. Bu durumda animasyon, zaman çizelgenizdeki ilgili noktada başlar. Örneğin, animasyonunuz 10 saniye uzunluğundaysa ve animation-delay
değerini -5s
olarak ayarlarsanız animasyon, zaman çizelgenizin ortasından başlar.
animation-play-state
.my-element:hover {
animation-play-state: paused;
}
animation-play-state mülkü, animasyonu oynatmanıza ve duraklatmanıza olanak tanır.
Varsayılan değer: running
. paused
olarak ayarlanırsa animasyon duraklatılır.
animation-fill-mode
animation-fill-mode özelliği, @keyframes
zaman çizelgenizdeki hangi değerlerin animasyon başlamadan önce veya bittikten sonra devam edeceğini tanımlar. Varsayılan değer none
'tür. Bu, animasyon tamamlandığında zaman çizelgenizdeki değerlerin silineceği anlamına gelir.
Diğer seçenekler şunlardır:
forwards
: Animasyon yönüne bağlı olarak son animasyon karesi devam eder.backwards
: İlk animasyon karesi, animasyon yönüne bağlı olarak devam eder.both
: Hem ilk hem de son ana kareler korunur.
animation
kısayolu
Her bir özelliği ayrı ayrı tanımlamak yerine, animasyon özelliklerini aşağıdaki sırayla tanımlamanıza olanak tanıyan bir animation
kısaltması ile tanımlayabilirsiniz:
animation-name
animation-duration
animation-timing-function
animation-delay
animation-iteration-count
animation-direction
animation-fill-mode
animation-play-state
.my-element {
animation: my-animation 10s ease-in-out 1s infinite forwards forwards running;
}
Animasyonlarla çalışırken dikkat edilmesi gerekenler
Kullanıcılar, işletim sistemlerini uygulamalar ve web siteleriyle etkileşim kurarken azaltılmış hareketi tercih edecek şekilde ayarlayabilir. Bu tercihi prefers-reduced-motion medya sorgusunu kullanarak algılayabilirsiniz:
@media (prefers-reduced-motion) {
.my-autoplaying-animation {
animation-play-state: paused;
}
}
Bu, animasyon tercihi olmayabilir. Daha az animasyon, özellikle de beklenmedik animasyon tercih edilir. Bu tercih ve genel performans hakkında daha fazla bilgiyi animasyon kılavuzumuzdan edinebilirsiniz.
Öğrendiklerinizi test etme
Animasyonlarla ilgili bilginizi test edin
@keyframes
animasyonunun adı veya özel tanımlayıcısı büyük/küçük harfe duyarlıdır mı?
SWOOP
ve swoop
'in birlikte var olmasına izin verir.from
ve to
anahtar kelimeleri aşağıdakilerle aynıdır:
start
ve end
.0%
ve 100%
.from
, 0%
ile aynıdır ve to
, %100 ile aynıdır.0
ve 1
animation-timing-function
genellikle şu adlarla da bilinir:
@keyframes
animasyonunda gereken minimum anahtar kare sayısı nedir?