linear() yumuşak geçiş işleviyle CSS'de karmaşık animasyon eğrileri oluşturma

linear() ile tanışın. Bu, CSS'de noktaları arasında doğrusal olarak enterpolasyon yapan ve sıçrama ile yay efektlerini yeniden oluşturmanıza olanak tanıyan bir yumuşatma işlevidir.

CSS'de yumuşatma

CSS'de öğeleri animasyonlandırırken veya öğeler arasında geçiş yaparken animation-timing-function ve transition-timing-function özelliklerini kullanarak bir değerin değişme hızını yumuşatma işleviyle kontrol edersiniz.

CSS'de hazır ayar olarak kullanılabilen çeşitli anahtar kelimeler vardır. Bunlar linear, ease, ease-in, ease-out ve ease-in-out'dir. Kendi yumuşak geçiş eğrilerinizi oluşturmak için cubic-bezier() işlevini kullanın veya steps() yumuşak geçiş işlevini kullanarak adım adım ilerleyin.

Uygun şekilde kullanıldığında, yumuşatma işlevleri, animasyonlu bir öğeye hız kazanıyormuş gibi görünürken ağırlık hissi verir.

CSS'de sıçrama veya yay efektleri gibi karmaşık eğriler oluşturmak mümkün değildir ancak linear() sayesinde artık bunları şaşırtıcı derecede iyi bir şekilde yakalayabilirsiniz.

linear() ile ilgili giriş

Browser Support

  • Chrome: 113.
  • Edge: 113.
  • Firefox: 112.
  • Safari: 17.2.

Source

CSS'de yumuşatma tanımlamanın yeni yolu linear() kullanmaktır. Bu işlev, virgülle ayrılmış bir dizi durak kabul eder. Her durak, 0 ile 1 arasında değişen tek bir sayıdır. Her durak arasında doğrusal bir şekilde enterpolasyon yapılır. Bu nedenle işleve bu ad verilmiştir.

animation-timing-function: linear(0, 0.25, 1);

Bu duraklar varsayılan olarak eşit aralıklarla yerleştirilir. Yukarıdaki snippet'te bu, 0.25 çıkış değerinin% 50 işaretinde kullanılacağı anlamına gelir.

linear(0, 0.25, 1) için grafik görselleştirildiğinde şu şekilde görünür:

Doğrusal(0, 0.25, 1) değerinin grafik görselleştirmesi.

Durakların eşit aralıklarla dağıtılmasını istemiyorsanız isteğe bağlı olarak bir durak uzunluğu iletebilirsiniz. Bir değeri durdurma uzunluğu olarak iletirken başlangıç noktasını tanımlarsınız:

animation-timing-function: linear(0, 0.25 75%, 1);

Burada, 0.25 çıkış değeri 50% işaretinde kullanılmaz ancak 75% işaretinde kullanılır.

Doğrusal(0, 0.25 75%, 1) görselleştirmesinin grafik gösterimi.

Durdurma uzunluğu olarak iki değer belirtirken hem başlangıç hem de bitiş noktasını tanımlarsınız:

animation-timing-function: linear(0, 0.25 25% 75%, 1);

Zamanın% 25'inden% 75'ine kadar 0,25 çıkış değeri kullanılır.

Doğrusal(0, 0.25 25% 75%, 1) değerinin grafik görselleştirmesi.

Karmaşık eğriler oluşturma

Önceki örnekler daha basit yumuşatma işlevleri olsa da hassasiyetten ödün verirseniz karmaşık yumuşatma işlevlerini yeniden oluşturmak için linear() kullanabilirsiniz.

JavaScript kullanılarak tanımlanan ve doğrudan CSS'de ifade edilemeyen bir yumuşak geçiş türü olan bu sıçrama yumuşak geçiş eğrisini ele alalım:

function easing(pos) {
  const t = 7.5625;
  const e = 2.75;
  return pos < 1 / e
    ? t * pos * pos
    : pos < 2 / e
    ? t * (pos -= 1.5 / e) * pos + 0.75
    : pos < 2.5 / e
    ? t * (pos -= 2.25 / e) * pos + 0.9375
    : t * (pos -= 2.625 / e) * pos + 0.984375;
}

Kod size çok fazla bilgi vermeyebilir ancak görselleştirme verebilir. Çıkış, mavi bir eğri olarak görselleştirilmiştir:

Mavi renkte çizilmiş düzgün bir sıçrama eğrisi.

Eğriye bir dizi durak eklenerek basitleştirilebilir. Burada her yeşil nokta bir durağı gösterir:

Üzerinde yeşil noktalar bulunan mavi renkli, yumuşak bir sıçrama eğrisi.

linear() işlevine aktarıldığında sonuç, orijinal eğriye benzeyen ancak kenarları biraz daha pürüzlü olan bir eğri olur.

Mavi renkteki orijinal pürüzsüz eğrinin üzerine yeşil renkte basitleştirilmiş bir eğri yerleştirilmiş.

Yeşil animasyonlu kutuyu mavi kutuyla karşılaştırdığınızda, yeşil kutunun o kadar akıcı olmadığını görebilirsiniz.

Ancak yeterli sayıda durak eklerseniz orijinal eğriyi oldukça iyi bir şekilde yakalayabilirsiniz. Güncellenmiş versiyonu aşağıda bulabilirsiniz:

Durak sayısının iki katı olduğu güncellenmiş bir eğri.

Durak sayısını ikiye katlayarak bile sorunsuz bir sonuç elde edebilirsiniz.

Animasyon için kullanılan kod şu şekilde görünür:

animation-timing-function: linear(
  /* Start to 1st bounce */
  0, 0.004, 0.016, 0.035, 0.063 9.1%, 0.141, 0.25, 0.391, 0.563, 0.765, 1,
  /* 1st to 2nd bounce */
  0.891, 0.813 45.5%, 0.785, 0.766, 0.754, 0.75, 0.754, 0.766, 0.785, 0.813 63.6%, 0.891, 1 72.7%,
  /* 2nd to 3rd bounce */
  0.973, 0.953, 0.941, 0.938, 0.941, 0.953, 0.973, 1,
  /* 3rd bounce to end */
  0.988, 0.984, 0.988, 1
);

Yardımcı bir araç

Bu durak listesini manuel olarak oluşturmak çok zahmetli olurdu. Neyse ki Jake ve Adam, bir yumuşatma eğrisini linear() karşılığına dönüştürmenize yardımcı olacak bir araç oluşturdu.

Doğrusal yumuşak geçiş oluşturma aracı.
https://linear-easing-generator.netlify.app/ adresinin kullanımda olduğu ekran görüntüsü.

Araç, giriş olarak bir JavaScript yumuşak geçiş işlevi veya SVG eğrisi alır ve linear() kullanarak basitleştirilmiş eğriyi çıkarır. İstediğiniz durak sayısını ve bunların hassasiyetini kontrol etmek için kaydırma çubuklarını kullanın.

Sağ üstte hazır ayarlardan birini de seçebilirsiniz: Spring (Yay), Bounce (Sıçrama), Simple elastic (Basit esneklik) veya Materyal Tasarım vurgulu yumuşak geçiş seçenekleri mevcuttur.

Geliştirici Araçları desteği

Geliştirici Araçları'nda linear() sonucunu görselleştirme ve düzenleme desteği sunulur. Durakları sürüklemenize olanak tanıyan etkileşimli bir ipucu göstermek için simgeyi tıklayın.

Chrome Geliştirici Araçları doğrusal düzenleyicisi.
Chrome Geliştirici Araçları'nın `linear()` düzenleyicisinin ekran görüntüsü.

Bu DevTools özelliği, Chrome 114'ten itibaren DevTools'da kullanılabilir.