Yüksek performanslı CSS animasyonlarına örnekler

Bu gönderide, CodePen'de bulunan bazı popüler animasyonların nasıl oluşturulduğunu öğrenebilirsiniz. Bu animasyonların tümü, bu bölümdeki diğer makalelerde ele alınan etkili teknikleri kullanır.

Bu önerilerin arkasındaki teoriyi öğrenmek için Bazı animasyonlar neden yavaş? bölümüne bakın ve pratik ipuçları için Animasyonlar Kılavuzu'na bakın.

Sihirbaz yükleme animasyonu

CodePen'de yükleme animasyonunu görüntüleme

Bu yükleme animasyonu tamamen CSS ile oluşturulmuştur. Resim ve animasyonun tamamı CSS ve HTML kullanılarak oluşturulmuştur, resim veya JavaScript kullanılmamıştır. Nasıl oluşturulduğunu ve ne kadar iyi performans gösterdiğini anlamak için Chrome Geliştirici Araçları'nı kullanabilirsiniz.

Animasyonu Chrome Geliştirici Araçları ile inceleme

Animasyon çalışırken Chrome Geliştirici Araçları'nda Performans sekmesini açın ve animasyonun birkaç saniyesini kaydedin. Özet bölümünde tarayıcının bu animasyonu çalıştırırken herhangi bir Düzen veya Boyama işlemi yapmadığını görmeniz gerekir.

Geliştirici Araçları'nda özet
Sihirbaz animasyonunun profilini oluşturduktan sonraki özet.

Bu animasyonun düzen ve boyaya neden olmadan nasıl yapıldığını öğrenmek için Chrome Geliştirici Araçları'nda hareketli öğeleri inceleyin. Çeşitli animasyonlu öğeleri bulmak için Animasyonlar Paneli'ni kullanabilirsiniz. Herhangi bir öğeyi tıkladığınızda öğe DOM'de vurgulanır.

Animasyonumuzun çeşitli bölümlerini gösteren Animasyonlar Paneli.
Chrome Geliştirici Araçları Animasyon Paneli'ndeki öğeleri görüntüleme ve seçme.

Örneğin, üçgeni seçin ve öğe kutusunun havaya yolculuğu sırasında nasıl dönüştüğünü ve ardından başlangıç konumuna nasıl döndüğünü izleyin.

Chrome Geliştirici Araçları'nda üçgenin yolunu nasıl izleyebileceğimizi gösteren video.

Öğe hâlâ seçiliyken Stiller Paneli'ne bakın. Burada, üçgenin şeklini çizen CSS'yi ve kullanılan animasyonu görebilirsiniz.

İşleyiş şekli

Üçgen, oluşturulan içeriği eklemek için ::after sözde öğesi ve şekli oluşturmak için kenarlıklar kullanılarak oluşturulur.

.triangle {
    position: absolute;
    bottom: -62px;
    left: -10px;
    width: 110px;
    height: 110px;
    border-radius: 50%;
}

.triangle::after {
    content: "";
    position: absolute;
    top: 0;
    right: -10px;
    width: 0;
    height: 0;
    border-style: solid;
    border-width: 0 28px 48px 28px;
    border-color: transparent transparent #89beb3 transparent;
}

Animasyon aşağıdaki CSS satırıyla eklenir:

animation: path_triangle 10s ease-in-out infinite;

Chrome Geliştirici Araçları'nda kalırsanız Stil Paneli'ni aşağı kaydırarak animasyon karelerini bulabilirsiniz. Burada, öğenin konumunu değiştirmek ve döndürmek için transform işlevi kullanılarak animasyon oluşturulduğunu görürsünüz. transform özelliği, Animasyon Kılavuzu'nda açıklanan özelliklerden biridir. Bu özellik, tarayıcının düzen veya boyama işlemleri yapmasına (yavaş animasyonların ana nedenleridir) neden olmaz.

@keyframes path_triangle {
  0% {
    transform: translateY(0);
  }
  10% {
    transform: translateY(-172px) translatex(10px) rotate(-10deg);
  }
  55% {
    transform: translateY(-172px) translatex(10px) rotate(-365deg);
  }
  58% {
    transform: translateY(-172px) translatex(10px) rotate(-365deg);
  }
  63% {
    transform: rotate(-360deg);
  }
}

Bu animasyonun farklı hareketli parçalarının her birinde benzer teknikler kullanılıyor. Sonuç, sorunsuz çalışan karmaşık bir animasyondur.

Parlayan Daire

CodePen'de Yanıp Sönen Daireyi Görüntüleme

Bu tür animasyonlar bazen sayfadaki bir şeye dikkat çekmek için kullanılır. Animasyonu anlamak için Firefox Geliştirici Araçları'nı kullanabilirsiniz.

Animasyonu Firefox Geliştirici Araçları ile inceleme

Animasyon çalışırken Firefox Geliştirici Araçları'nda Performans sekmesini açın ve animasyonun birkaç saniyesini kaydedin. Kaydı durdurun. Şelalede Stili Yeniden Hesapla girişi olmadığını göreceksiniz. Artık bu animasyonun stilde yeniden hesaplamaya neden olmadığını, dolayısıyla düzen ve boyama işlemlerine yol açmadığını biliyorsunuz.

animasyonuna ilişkin ayrıntıları
Firefox Geliştirici Araçları Şelalesi.

Firefox Geliştirici Araçları'nda kalmak için daireyi inceleyerek bu animasyonun nasıl çalıştığını görebilirsiniz. pulsating-circle sınıfına sahip <div>, çemberin konumunu işaretler ancak kendisi daire çizmez.

.pulsating-circle {
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translateX(-50%) translateY(-50%);
    width: 30px;
    height: 30px;
}

Görünür daire ve animasyonlar, ::before ve ::after sözde öğeler kullanılarak oluşturulur.

::before öğesi, transform: scale ve opacity animasyonlarını canlandıran pulse-ring adlı animasyon kullanarak beyaz dairenin dışına çıkan opak halkayı oluşturur.

.pulsating-circle::before {
    content: '';
    position: relative;
    display: block;
    width: 300%;
    height: 300%;
    box-sizing: border-box;
    margin-left: -100%;
    margin-top: -100%;
    border-radius: 45px;
    background-color: #01a4e9;
    animation: pulse-ring 1.25s cubic-bezier(0.215, 0.61, 0.355, 1) infinite;
}

@keyframes pulse-ring {
  0% {
    transform: scale(0.33);
  }
  80%, 100% {
    opacity: 0;
  }
}

Hangi özelliklerin canlandırıldığını görmenin bir başka yolu da Firefox Geliştirici Araçları'nda Animasyonlar panelini seçmektir. Daha sonra, kullanılan animasyonların ve animasyon uygulanmakta olan özelliklerin bir görselini görürsünüz.

::before sözde öğesi seçildiğinde hangi özelliklerin animasyon oluşturduğunu görebiliriz.

Beyaz dairenin kendisi ::after sözde öğesi kullanılarak oluşturulur ve canlandırılır. pulse-dot animasyonu, animasyon sırasında noktayı büyütmek ve küçültmek için transform: scale kullanıyor.

.pulsating-circle::after {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  display: block;
  width: 100%;
  height: 100%;
  background-color: white;
  border-radius: 15px;
  box-shadow: 0 0 8px rgba(0, 0, 0, 0.3);
  animation: pulse-dot 1.25s cubic-bezier(0.455, 0.03, 0.515, 0.955) -0.4s infinite;
}

@keyframes pulse-dot {
  0% {
    transform: scale(0.8);
  }
  50% {
    transform: scale(1);
  }
  100% {
    transform: scale(0.8);
  }
}

Bu tür bir animasyon, uygulamanızın çeşitli bölümlerinde kullanılabilir. Bu küçük dokunuşların, uygulamanızın genel performansını etkilememesi önemlidir.

Sadece CSS 3D Küresi

CodePen'de Saf CSS 3D Küresini görüntüleme

Bu animasyon son derece karmaşık görünse de önceki örneklerde gördüğümüz teknikleri kullanıyor. Karmaşıklık, çok sayıda öğenin canlandırılmasından kaynaklanır.

Chrome Geliştirici Araçları'nı açın ve plane sınıfına sahip öğelerden birini seçin. Küre, bir dizi dönen düzlemden ve parmak ucundan oluşur.

Uçak dönüyor gibi görünüyor.

Bu düzlemler ve uçlar, bir <div> sarmalayıcının içindedir ve transform: rotate3d kullanılarak dönen bu öğedir.

.sphere-wrapper {
  transform-style: preserve-3d;
  width: 300px;
  height: 300px;
  position: relative;
  animation: rotate3d 10s linear infinite;
}

@keyframes rotate3d {
  0% {
    transform: rotate3d(1, 1, 1, 0deg);
  }
  25% {
    transform: rotate3d(1, 1, 1, 90deg);
  }
  50% {
    transform: rotate3d(1, 1, 1, 180deg);
  }
  75% {
    transform: rotate3d(1, 1, 1, 270deg);
  }
  100% {
    transform: rotate3d(1, 1, 1, 360deg);
  }
}

Noktalar, plane ve spoke öğelerinin içine yerleştirilmiştir. Bunları ölçeklendirmek ve çevirmek için dönüştürme tekniğini kullanan bir animasyon kullanılır. Bu şekilde yanıp sönen efekt oluşturulur.

Nokta, küreyle ve atımlarla döner.
.spoke-15 .dot,
.spoke-21 .dot {
  animation: pulsate 0.5s infinite 0.83333333s alternate both;
  background-color: #55ffee;
}

@-webkit-keyframes pulsate {
  0% {
    transform: rotateX(90deg) scale(0.3) translateZ(20px);
  }
  100% {
    transform: rotateX(90deg) scale(1) translateZ(0px);
  }
}

Bu animasyonun oluşturulmasıyla ilgili çalışma, zamanlamayı doğru ayarlamak, döndürme ve yanıp sönme efektini oluşturmak oldu. Animasyonların kendisi oldukça basit ve çok iyi performans gösteren yöntemler kullanıyor.

Chrome Geliştirici Araçları'nı açıp çalışırken Performans'ı kaydederek bu animasyonun nasıl performans gösterdiğini görebilirsiniz. İlk yükleme işleminden sonra animasyon, Layout'u veya Paint'i tetiklemez ve sorunsuz çalışır.

Sonuç

Bu örneklerden, etkili yöntemler kullanarak birkaç özellikte animasyon yapmanın nasıl harika animasyonlar oluşturabileceğini görebilirsiniz. Animasyonlar kılavuzunda açıklanan etkili yöntemleri varsayılan olarak uygulayarak zamanınızı, sayfayı yavaşlatma konusunda daha az endişeyle istediğiniz efekti oluşturmaya ayırabilirsiniz.