Detaylı Rehberler
Animasyonlar

CSS ile uygulamanızı animasyonlama

CSS, uygulamanızda güzel ve ilgi çekici animasyonlar oluşturmanız için güçlü bir araç seti sunar.

Yerel CSS'de animasyonlar nasıl yazılır

Daha önce yerel CSS animasyonları yazmadıysanız, başlangıç için bir dizi mükemmel rehber vardır. Bunlardan birkaçı: MDN CSS Animasyonları rehberi W3Schools CSS3 Animasyonları rehberi Eksiksiz CSS Animasyonları Eğitimi Yeni Başlayanlar İçin CSS Animasyonu

ve birkaç video: 9 Dakikada CSS Animasyonu Öğrenin Net Ninja CSS Animasyon Eğitimi Oynatma Listesi

Bu çeşitli rehber ve eğitimlerin bazılarına göz atın, ardından bu rehbere geri dönün.

Yeniden kullanılabilir animasyonlar oluşturma

@keyframes kullanarak uygulamanız genelinde paylaşabileceğiniz yeniden kullanılabilir animasyonlar oluşturabilirsiniz. Paylaşılmış bir CSS dosyasında anahtar kare animasyonları tanımlayın ve uygulamanızda istediğiniz her yerde bu anahtar kare animasyonlarını yeniden kullanabileceksiniz.

animations.css

@keyframes sharedAnimation {
  to {
    height: 0;
    opacity: 1;
    background-color: 'red';
  }
}

.animated-class {
  animation: sharedAnimation 1s;
}

animated-class sınıfını bir elemana eklemek, o eleman üzerinde animasyonu tetikler.

Bir geçişi animasyonlama

Durum ve stilleri animasyonlama

İki farklı durum arasında animasyon yapmak isteyebilirsiniz, örneğin bir eleman açıldığında veya kapatıldığında. Bunu anahtar kare animasyonu veya geçiş stili kullanarak CSS sınıflarıyla gerçekleştirebilirsiniz.

animations.css

.open {
  height: '200px';
  opacity: 1;
  background-color: 'yellow';
  transition: all 1s;
}

.closed {
  height: '100px';
  opacity: 0.8;
  background-color: 'blue';
  transition: all 1s;
}

open veya closed durumunu tetiklemek, bileşeninizdeki eleman üzerinde sınıfları değiştirerek yapılır. Bunu nasıl yapacağınıza dair örnekleri şablon rehberimizde bulabilirsiniz.

Stilleri doğrudan animasyonlama için şablon rehberinde benzer örnekler görebilirsiniz.

Geçişler, zamanlama ve yumuşatma

Animasyon genellikle zamanlama, gecikme ve yumuşaklık davranışlarını ayarlamayı gerektirir. Bu, birçok CSS özelliği veya kısayol özellikleri kullanılarak yapılabilir.

CSS'de bir anahtar kare animasyonu için animation-duration, animation-delay ve animation-timing-function belirtin veya alternatif olarak animation kısayol özelliğini kullanın.

animations.css

.example-element {
  animation-duration: 1s;
  animation-delay: 500ms;
  animation-timing-function: ease-in-out;
}

.example-shorthand {
  animation: exampleAnimation 1s ease-in-out 500ms;
}

Benzer şekilde, @keyframes kullanmayan animasyonlar için transition-duration, transition-delay, transition-timing-function ve transition kısayolunu kullanabilirsiniz.

animations.css

.example-element {
  transition-duration: 1s;
  transition-delay: 500ms;
  transition-timing-function: ease-in-out;
  transition-property: margin-right;
}

.example-shorthand {
  transition: margin-right 1s ease-in-out 500ms;
}

Bir animasyonu tetikleme

Animasyonlar CSS stilleri veya sınıfları değiştirerek tetiklenebilir. Bir sınıf bir elemanda mevcut olduğunda, animasyon gerçekleşir. Sınıfı kaldırmak, elemanı o eleman için tanımlanmış CSS'e geri döndürecektir. İşte bir örnek:

Geçiş ve tetikleyiciler

Otomatik yüksekliği animasyonlama

Otomatik yüksekliğe animasyon yapmak için CSS Grid kullanabilirsiniz.

Tüm tarayıcıları destekleme konusunda endişelenmeniz gerekmiyorsa, otomatik yüksekliğe animasyon yapmanın gerçek çözümü olan calc-size()'i da inceleyebilirsiniz. Daha fazla bilgi için MDN belgelerine ve bu eğitime bakın.

Görünüme giriş ve çıkış animasyonu

Bir öğe görünüme girdiğinde veya görünümden ayrıldığında animasyonlar oluşturabilirsiniz. Bir elemanın görünüme girişini animasyonlamaya bakalım. Bunu, eleman görünüme girdiğinde animasyon sınıfları uygulayacak olan animate.enter ile yapacağız.

Bir elemanın görünümden ayrılırken animasyonlanması, görünüme girerken animasyonlamaya benzer. Eleman görünümden ayrılırken hangi CSS sınıflarının uygulanacağını belirtmek için animate.leave kullanın.

NOTE: Alt animate.leave animasyonları yalnızca aynı bileşen şablonu içinde tetiklenir. Bir üst eleman kaldırıldığında iç içe bileşenlerdeki animate.leave animasyonları tetiklenmez.

animate.enter ve animate.leave hakkında daha fazla bilgi için Giriş ve Çıkış animasyonları rehberine bakın.

Artırma ve azaltma animasyonu

Artırma ve azaltmada animasyon uygulamalarda yaygın bir kalıptır. Bu davranışı nasıl gerçekleştirebileceğinize dair bir örnek.

Bir animasyonu veya tüm animasyonları devre dışı bırakma

Belirttiğiniz animasyonları devre dışı bırakmak istiyorsanız, birden fazla seçeneğiniz vardır.

  1. Animasyon ve geçişi none olarak zorlayan özel bir sınıf oluşturun.
.no-animation {
  animation: none !important;
  transition: none !important;
}

Bu sınıfı bir elemana uygulamak, o eleman üzerindeki herhangi bir animasyonun çalışmasını engeller. Alternatif olarak, bu davranışı uygulamak için bunu tüm DOM'unuza veya DOM'unuzun bir bölümüne kapsayabilirsiniz. Ancak bu, animasyon olaylarının çalışmasını engeller. Eleman kaldırma için animasyon olaylarını bekliyorsanız, bu çözüm işe yaramaz. Geçici bir çözüm, süreleri 1 milisaniyeye ayarlamaktır.

  1. Daha az animasyon tercih eden kullanıcılar için hiçbir animasyonun çalışmamasını sağlamak için prefers-reduced-motion medya sorgusunu kullanın.

  2. Programatik olarak animasyon sınıfları eklemeyi engelleyin

Animasyon geri çağırmaları

Animasyonlar sırasında belirli noktalarda yürütmek istediğiniz eylemleriniz varsa, dinleyebileceğiniz bir dizi mevcut olay vardır. Birkaçı:

OnAnimationStart OnAnimationEnd OnAnimationIteration OnAnimationCancel

OnTransitionStart OnTransitionRun OnTransitionEnd OnTransitionCancel

Web Animations API birçok ek işlev sunar. Mevcut tüm animasyon API'lerini görmek için belgelere göz atın.

NOTE: Bu geri çağırmalarla kabarcıklanma sorunlarına dikkat edin. Alt ve üst elemanları animasyonluyorsanız, olaylar alt elemanlardan üst elemanlara doğru kabarcıklanır. Bir alt düğümden kabarcıklanan bir olaya değil, istediğiniz olay hedefine yanıt verdiğinizden emin olmak için yayılımı durdurun veya olay içindeki daha fazla ayrıntı inceleyin. Doğru düğümlere sahip olduğunuzu doğrulamak için animationname özelliğini veya geçişi yapılan özellikleri inceleyebilirsiniz.

Karmaşık diziler

Animasyonlar genellikle basit bir fade in veya fade out'tan daha karmaşıktır. Çalıştırmak isteyeceğiniz birçok karmaşık animasyon dizisi olabilir. Bu olası senaryoların bazılarına göz atalım.

Listede kademeli animasyonlar

Yaygın efektlerden biri, kademeli bir etki oluşturmak için listedeki her öğenin animasyonlarını kademelileştirmektir. Bu, animation-delay veya transition-delay kullanılarak gerçekleştirilebilir. Bu CSS'nin nasıl görünebileceğine dair bir örnek.

Paralel animasyonlar

animation kısayol özelliğini kullanarak bir elemana aynı anda birden fazla animasyon uygulayabilirsiniz. Her birinin kendi süresi ve gecikmesi olabilir. Bu, animasyonları bir araya getirmenize ve karmaşık efektler oluşturmanıza olanak tanır.

.target-element {
  animation:
    rotate 3s,
    fade-in 2s;
}

Bu örnekte, rotate ve fade-in animasyonları aynı anda başlar, ancak farklı sürelere sahiptir.

Yeniden sıralanan listenin öğelerini animasyonlama

Bir @for döngüsündeki öğeler kaldırılıp yeniden eklenecek, bu da giriş animasyonları için @starting-styles kullanılarak animasyonları tetikleyecektir. Alternatif olarak, aynı davranış için animate.enter kullanabilirsiniz. Aşağıdaki örnekte görüldüğü gibi elemanlar kaldırılırken animasyonlamak için animate.leave kullanın.

Animasyonların programatik kontrolü

Element.getAnimations() kullanarak bir elemandaki animasyonları doğrudan alabilirsiniz. Bu, o elemandaki her Animation'ın bir dizisini döndürür. Animasyon paketinin AnimationPlayer'inin sunduğu şeylerden çok daha fazlasını yapmak için Animation API'sini kullanabilirsiniz. Buradan cancel(), play(), pause(), reverse() ve çok daha fazlasını yapabilirsiniz. Bu yerel API, animasyonlarınızı kontrol etmeniz için ihtiyacınız olan her şeyi sağlamalıdır.

Angular animasyonları hakkında daha fazla bilgi

Aşağıdakilerle de ilgilenebilirsiniz: