Daha İyi CSS Geçişleri ve Animasyonları İçin İpuçları
(joshcollinsworth.com)Düşündüğünüzden daha kısa tutun
- Tek bir geçiş için 0.15~0.4 saniye
- Fazla hızlı geldiğini düşüneceğiniz noktaya kadar hızlandırın, sonra biraz biraz geri alın
Aksiyonu eğriye uydurun
- Hareket de renk kadar öznel ama en az onun kadar önemli
- Gerçek dünyadaki hareketi düşünün ve onunla karşılaştırın
Hızlanma ve yavaşlama
- Animasyon doğal görünmüyorsa, nedeni aniden başlaması ya da bitmesidir
- Çok hafif olsa bile cubic-bezier eğrisine easing-in/out eklemek iyidir
- Daha gerçekçi görünmesi için "atalet (inertia)" de işe yarar
Az, daha iyidir
- Animasyon sırasında bir elementte ne kadar çok şey değişirse, o kadar abartılı görünme riski artar
- Opaklık 0'dan 1'e gidiyorsa 1 yerine 0.4'ü deneyin. Boyutu değiştiriyorsanız, biraz daha küçük bir boyuttan başlamayı deneyin
- Çoğu durumda bir elementin yerine oturduğu animasyonlar 5~40 piksel aralığında hareket etmelidir
Tarayıcı varsayılanlarından kaçının
- Tarayıcılarda linear, ease, ease-in, ease-out, ease-in-out gibi yerleşik eğriler vardır
- Rahattırlar ve bazı durumlarda kullanışlıdırlar, ama fazla genel oldukları için her şey aynı görünür (tıpkı Bootstrap/Tailwind ile yapılmış sitelerin birbirine benzemesi gibi)
- VS Code içindeki cubic-bezier eğrisi otomatik tamamlama değerlerini deneyin
- Ya da tarayıcı geliştirici araçlarını açıp eğri düzenleyicisini kullanın
Birden fazla özellik, birden fazla easing
- Her zaman gerekli değildir, ama birden fazla özelliği aynı anda değiştirmeniz gerektiğinde (
transformveopacitygibi)- Aynı cubic-bezier eğrisini uygulamak bazen iyi görünebilir, ama pratikte her zaman öyle olmayabilir
transformiçin iyi çalışan bir eğri, fade için o kadar uygun olmayabilir- Böyle durumlarda CSS özelliğine göre farklı easing seçmek daha iyidir
- Özelliklere göre
@keyframesanimasyonlarını ayırabilir ya da birden fazla transition tanımlayabilirsinizopacityiçinlinear,transformiçincubic-bezier(.5, 0, .5, 1)
Kademeli gecikme kullanın
- Birden fazla elementi geçişe sokarken
animation-delayveyatransition-delayetkisini küçümsemeyin
In dışarı çıkar, Out içeri girer
- Easing eğrilerinin üç türü vardır
- ease in (yavaş başlar)
- ease out (yavaş biter)
- in-out (yalnızca ortası hızlıdır, başta ve sonda yavaştır)
- Geçişlerin zor tarafı şu ki, bazen in için ease-out, out için ise ease-in isteyebilirsiniz
- Biri çıkarken diğerinin girdiği animasyonlar kullanıcı açısından tek bir geçiş gibi görünür, ama içeride aslında iki ayrı geçiş vardır
- Çıkan şeyin yavaşça gitmesini istediğiniz için ease-in gerekir, giren şeyin ise ease-out olması gerekir
Donanım hızlandırmasına güvenin
- Tüm CSS özellikleri her cihaz ve tarayıcıda akıcı çalışmaz
- Her zaman donanım hızlandırmalı çalışabilen özellikler
transform(tümtranslate,scale,rotateve 3D sürümleri dahil)opacity
- Bazı durumlarda donanım hızlandırmalı olabilen özellikler
- bazı SVG özellikleri
filter(tarayıcıya ve filtreye bağlı olarak)
- Canvas ve WebGL de donanım hızlandırmalıdır, ama burada ele alınmıyor
- Yani taşıma, yeniden boyutlandırma ve döndürme için her zaman CSS
transformözelliğini kullanın - Ne yaparsanız yapın, elementin boyutunu ya da konumunu doğrudan değiştirmeyin
height,width,border,margin,paddinggibi sayfa yerleşimini etkileyen özellikleri doğrudan değiştirirseniz, sayfa hızının fark edilir biçimde yavaşlama riski vardır
Gerektiğinde will-change kullanın
- Teoride animasyon akıcı ve performanslı olması gerekirken doğal görünmüyorsa
will-changeözelliğini kullanın - Ne değişeceğini önceden bildirdiği için, bazı başka hesaplamalar atlanabilir
Bonus: kullanıcının tercihine saygı gösterin
- Kullanıcılar cihaz ayarlarında "reduced motion" tercih ettiklerini belirtebilir
- Media query kullanarak ya da JavaScript üzerinden bu değeri algılayıp buna uygun davranabilirsiniz
Henüz yorum yok.