Türkçe

CSS Kaydırma Zaman Çizelgeleri'ne kapsamlı bir kılavuz: animasyonları doğrudan kaydırma konumuna bağlayan güçlü yeni bir web animasyon tekniği. İlgi çekici ve interaktif kullanıcı deneyimleri oluşturmayı öğrenin.

CSS Kaydırma Zaman Çizelgesi: Kaydırma Konumuna Göre Animasyon Oluşturma

Kaydırma odaklı animasyonlar, geleneksel statik düzenlerin ötesine geçen, ilgi çekici ve interaktif kullanıcı deneyimleri sunarak web tasarımında devrim yaratıyor. CSS Kaydırma Zaman Çizelgeleri, animasyon ilerlemesini doğrudan bir öğenin kaydırma konumuna bağlayarak bu animasyonları oluşturmak için yerel bir tarayıcı çözümü sağlar. Bu, web'de kullanıcı katılımını ve hikaye anlatımını geliştirmek için yaratıcı olasılıklarla dolu bir dünyanın kapılarını açar.

CSS Kaydırma Zaman Çizelgeleri Nelerdir?

CSS Kaydırma Zaman Çizelgeleri, belirtilen bir kaydırma konteynerinin kaydırma konumuna bağlı olarak bir CSS animasyonunun veya geçişinin ilerlemesini kontrol etmenizi sağlar. Animasyon süresinin sabit olduğu geleneksel zaman tabanlı animasyonlara güvenmek yerine, animasyon ilerlemesi doğrudan bir kullanıcının ne kadar kaydırdığına bağlıdır. Bu, animasyonun kullanıcının kaydırma davranışına doğrudan yanıt olarak duraklayacağı, oynayacağı, geri saracağı veya ileri saracağı anlamına gelir ve daha doğal ve interaktif bir deneyim yaratır. Bir sayfayı aşağı kaydırırken dolan bir ilerleme çubuğu veya görüntü alanına girdikçe beliren ve kaybolan öğeler hayal edin - bunlar CSS Kaydırma Zaman Çizelgeleri ile kolayca elde edilebilen efekt türleridir.

Neden CSS Kaydırma Zaman Çizelgelerini Kullanmalısınız?

Temel Kavramlar ve Özellikler

Temel kavramları ve CSS özelliklerini anlamak, Kaydırma Zaman Çizelgelerini etkili bir şekilde kullanmak için çok önemlidir:

1. Kaydırma Zaman Çizelgesi

scroll-timeline özelliği, animasyon için zaman çizelgesi olarak kullanılacak kaydırma konteynerini tanımlar. Adlandırılmış bir zaman çizelgesi (örneğin, --my-scroll-timeline) belirtebilir veya auto (en yakın ata kaydırma konteyneri), none (kaydırma zaman çizelgesi yok) veya root (belgenin görüntü alanı) gibi önceden tanımlanmış değerler kullanabilirsiniz.

/* Adlandırılmış bir kaydırma zaman çizelgesi tanımlayın */
.scroll-container {
  scroll-timeline: --my-scroll-timeline;
}

/* Animasyonda adlandırılmış zaman çizelgesini kullanın */
.animated-element {
  animation-timeline: --my-scroll-timeline;
}

2. Animasyon Zaman Çizelgesi

animation-timeline özelliği, bir animasyona bir kaydırma zaman çizelgesi atar. Bu özellik, animasyonun ilerlemesini belirtilen kaydırma konteynerinin kaydırma konumuna bağlar. Ayrıca, bir öğenin görüntü alanıyla kesişmesine dayalı bir zaman çizelgesi oluşturan view() işlevini de kullanabilirsiniz.

/* Animasyonu kaydırma zaman çizelgesine bağlayın */
.animated-element {
  animation-timeline: --my-scroll-timeline;
}

/* Görüntü alanı tabanlı animasyonlar için view() kullanın */
.animated-element {
  animation-timeline: view();
}

3. Kaydırma Ofsetleri

Kaydırma ofsetleri, animasyonun başlangıcı ve sonuyla eşleşen kaydırma zaman çizelgesinin başlangıç ve bitiş noktalarını tanımlar. Bu ofsetler, animasyonun kaydırma konumuna göre tam olarak ne zaman başlayıp duracağını kontrol etmenizi sağlar. Bu ofsetleri tanımlamak için cover, contain, entry, exit gibi anahtar kelimeler ve sayısal değerler (örneğin, 100px, 50%) kullanabilirsiniz.

/* Öğe tamamen görünür olduğunda animasyon yapın */
.animated-element {
  scroll-timeline-axis: block;
  animation-timeline: view(block);
  animation-range: entry 0% cover 100%;
}

/* Animasyonu üstten 100 piksel uzakta başlatın, alt kısım görüntü alanı altından 200 piksel uzakta olduğunda bitirin */
.animated-element {
  scroll-timeline-axis: block;
  animation-timeline: view(block);
  animation-range: 100px exit 200px;
}

4. Kaydırma Zaman Çizelgesi Ekseni

scroll-timeline-axis özelliği, kaydırma zaman çizelgesinin ilerlediği ekseni belirtir. block (dikey kaydırma), inline (yatay kaydırma), both (her iki eksen) veya auto (tarayıcı tarafından belirlenir) olarak ayarlanabilir. view() kullanırken, ekseni açıkça belirtmeniz önerilir.

/* Kaydırma zaman çizelgesi eksenini tanımlayın */
.scroll-container {
  scroll-timeline-axis: y;
}

/* view ile */
.animated-element {
  scroll-timeline-axis: block;
}

5. Animasyon Aralığı

animation-range özelliği, animasyonun başlangıcı (%0) ve sonu (%100) ile eşleşen kaydırma ofsetlerini (başlangıç ve bitiş noktaları) tanımlar. Bu, belirli kaydırma konumlarını animasyonun ilerlemesine eşlemenizi sağlar.

/* Tüm kaydırma aralığını animasyona eşleyin */
.animated-element {
  animation-range: entry 0% cover 100%;
}

/* Animasyonu kaydırma aralığının ortasında başlatın */
.animated-element {
  animation-range: 50% 100%;
}

/* Piksel değerlerini kullanın */
.animated-element {
  animation-range: 100px 500px;
}

Pratik Örnekler ve Kullanım Alanları

CSS Kaydırma Zaman Çizelgelerini kullanarak ilgi çekici animasyonlar oluşturmanın bazı pratik örneklerini keşfedelim:

1. İlerleme Çubuğu

Kaydırma odaklı animasyonlar için klasik bir kullanım örneği, kullanıcının sayfayı aşağı kaydırırken dolan bir ilerleme çubuğudur. Bu, kullanıcının içerikte ne kadar ilerlediğine dair görsel geri bildirim sağlar.

/* CSS */
.progress-container {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 5px;
  background-color: #eee;
  z-index: 1000;
}

.progress-bar {
  height: 5px;
  background-color: #4CAF50;
  width: 0%;
  animation: fillProgressBar linear;
  animation-timeline: view();
  animation-range: entry 0% cover 100%;
  transform-origin: 0%;
  animation-fill-mode: forwards;
}

@keyframes fillProgressBar {
  to {
    width: 100%;
  }
}

/* HTML */
<div class="progress-container">
  <div class="progress-bar"></div>
</div>
<div class="content">
  <p>... içeriğiniz burada ...</p>
</div>

Bu kod, sayfanın üst kısmında sabit bir ilerleme çubuğu oluşturur. fillProgressBar animasyonu, kullanıcı sayfayı aşağı kaydırırken ilerleme çubuğunun genişliğini kademeli olarak %0'dan %100'e çıkarır. animation-timeline: view() animasyonu görüntü alanının kaydırma ilerlemesine bağlar ve animation-range kaydırmayı görsel ilerlemeye bağlar.

2. Görüntü Soldurma

Görüntülerin içeriğinizin görsel çekiciliğini artırarak görüntü alanına girerken ince bir soldurma efekti oluşturmak için Kaydırma Zaman Çizelgelerini kullanabilirsiniz.

/* CSS */
.fade-in-image {
  opacity: 0;
  transform: translateY(20px);
  animation: fadeIn linear;
  animation-timeline: view();
  animation-range: entry 25% cover 75%;
  animation-fill-mode: both;
}

@keyframes fadeIn {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

/* HTML */
<img src="image.jpg" class="fade-in-image" alt="Image">

Bu kod başlangıçta görüntüyü gizler ve son konumunun biraz altına konumlandırır. Görüntü görüntü alanına kaydırıldıkça, fadeIn animasyonu kademeli olarak opaklığı artırır ve görüntüyü orijinal konumuna taşıyarak pürüzsüz bir soldurma efekti oluşturur. animation-range, animasyonun görüntünün üst kenarı görüntü alanının %25'i içinde olduğunda başlayacağını ve alt kenarı görüntü alanının %75'i içinde olduğunda tamamlanacağını belirtir.

3. Yapışkan Öğeler

Kaydırma sırasında öğelerin görüntü alanının üst kısmına yapıştığı "yapışkan" efektler elde edin - ancak gelişmiş kontrol ve geçişlerle. Kullanıcı aşağı kaydırdıkça sorunsuz bir şekilde yoğunlaştırılmış bir sürüme dönüşen bir navigasyon çubuğu hayal edin.

/*CSS*/
.sticky-container {
  height: 200px; /* İhtiyaçlarınıza göre ayarlayın */
  position: relative;
}

.sticky-element {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  background-color: #f0f0f0;
  padding: 20px;
  box-sizing: border-box;
  animation: stickyAnimation linear;
  animation-timeline: view();
  animation-range: entry 0% cover 20%; /* Aralığı gerektiği gibi ayarlayın */
  animation-fill-mode: both;
  z-index: 10;
}

@keyframes stickyAnimation {
  0% {
    position: absolute;
    top: 0;
  }
  100% {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    background-color: #ddd; /* Yapışkanlığı belirtmek için rengi değiştirin */
  }
}

/* HTML */
<div class="sticky-container">
  <div class="sticky-element">Yapışkan Öğem</div>
</div>

Bu örnekte, öğe görüntü alanının üst %20'sine girerken position: absolute konumundan position: fixed konumuna geçerek pürüzsüz bir "yapışma" efekti oluşturur. Davranışı özelleştirmek için animation-range ve anahtar kareler içindeki CSS özelliklerini ayarlayın.

4. Paralaks Kaydırma Efekti

Kullanıcı kaydırdıkça farklı içerik katmanlarının farklı hızlarda hareket ettiği, sayfaya derinlik ve görsel ilgi katan bir paralaks kaydırma efekti oluşturun.

/* CSS */
.parallax-container {
  position: relative;
  height: 500px; /* İhtiyaçlarınıza göre ayarlayın */
  overflow: hidden;
}

.parallax-layer {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-size: cover;
  background-position: center;
}

.parallax-layer--bg {
  background-image: url("background.jpg");
  animation: parallaxBg linear;
  animation-timeline: view();
  animation-range: entry 0% cover 100%;
  transform-origin: 50% 0%;
  animation-fill-mode: both;
}

.parallax-layer--fg {
 background-image: url("foreground.png");
  animation: parallaxFg linear;
  animation-timeline: view();
  animation-range: entry 0% cover 100%;
  transform-origin: 50% 0%;
  animation-fill-mode: both;
}

@keyframes parallaxBg {
 to {
    transform: translateY(50px); /* Paralaks hızı için ayarlayın */
 }
}

@keyframes parallaxFg {
 to {
   transform: translateY(100px); /* Paralaks hızı için ayarlayın */
 }
}

/* HTML */
<div class="parallax-container">
  <div class="parallax-layer parallax-layer--bg"></div>
  <div class="parallax-layer parallax-layer--fg"></div>
</div>

Bu örnek, farklı arka plan resimlerine sahip iki katman oluşturur. parallaxBg ve parallaxFg animasyonları, katmanları farklı hızlarda çevirerek paralaks efektini oluşturur. Her katmanın hızını kontrol etmek için anahtar karelerdeki translateY değerlerini ayarlayın.

5. Metin Ortaya Çıkarma Animasyonu

Kullanıcı belirli bir noktayı kaydırdıkça karakter karakter metni ortaya çıkarın, dikkat çekin ve içeriğin hikaye anlatımı yönünü geliştirin.

/* CSS */
.text-reveal-container {
  position: relative;
  overflow: hidden;
}

.text-reveal {
  display: inline-block;
  white-space: nowrap;
  overflow: hidden;
  animation: textRevealAnimation steps(1) forwards;
  animation-timeline: view();
  animation-range: entry 25% cover 75%;
  animation-fill-mode: both;
  width: 0;
}

@keyframes textRevealAnimation {
  to {
    width: 100%;
  }
}

/* HTML */
<div class="text-reveal-container">
  <span class="text-reveal">Bu metin kaydırdıkça ortaya çıkacaktır.</span>
</div>

Bu örnek, metni karakter karakter ortaya çıkarmak için steps(1) zamanlama işlevini kullanır. width: 0 başlangıçta metni gizler ve textRevealAnimation kademeli olarak genişliği artırarak tüm metni ortaya çıkarır. Metin ortaya çıkarma animasyonunun ne zaman başlayıp biteceğini kontrol etmek için animation-range değerini ayarlayın.

Tarayıcı Uyumluluğu ve Polyfill'ler

CSS Kaydırma Zaman Çizelgeleri nispeten yeni bir teknolojidir ve tarayıcı desteği hala gelişmektedir. 2023'ün sonlarından itibaren, Chrome ve Edge gibi büyük tarayıcılar iyi destek sunmaktadır. Firefox ve Safari, özelliği uygulamak için aktif olarak çalışmaktadır. Kaydırma Zaman Çizelgelerini üretimde uygulamadan önce mevcut tarayıcı uyumluluğunu kontrol etmek önemlidir. Destek durumunu doğrulamak için Can I use gibi kaynakları kullanabilirsiniz.

Kaydırma Zaman Çizelgelerini yerel olarak desteklemeyen tarayıcılar için, benzer işlevsellik sağlamak üzere polyfill'ler kullanabilirsiniz. Polyfill, JavaScript kullanarak eksik özelliği uygulayan bir JavaScript kod parçacığıdır. CSS Kaydırma Zaman Çizelgeleri için çeşitli polyfill'ler mevcuttur ve bu özelliği eski tarayıcılarda bile kullanmanıza olanak tanır.

Erişilebilirlik Hususları

Kaydırma odaklı animasyonlar kullanıcı deneyimini iyileştirebilse de, web sitenizin engelli kullanıcılar da dahil olmak üzere herkes tarafından kullanılabilir olmasını sağlamak için erişilebilirliği göz önünde bulundurmak çok önemlidir.

En İyi Uygulamalar ve İpuçları

CSS Kaydırma Zaman Çizelgelerini etkili bir şekilde kullanmak için bazı en iyi uygulamalar ve ipuçları şunlardır:

Animasyon Tasarımı İçin Küresel Hususlar

Küresel bir kitle için animasyonlar tasarlarken, bu noktaları aklınızda bulundurun:

Sonuç

CSS Kaydırma Zaman Çizelgeleri, ilgi çekici ve interaktif web animasyonları oluşturmanın güçlü ve verimli bir yolunu sunar. Animasyon ilerlemesini kaydırma konumuna bağlayarak, daha dinamik, duyarlı ve kullanıcı dostu deneyimler oluşturabilirsiniz. Tarayıcı desteği hala gelişmekte olsa da, CSS Kaydırma Zaman Çizelgelerini kullanmanın faydaları - geliştirilmiş performans, bildirimsel bir yaklaşım ve geliştirilmiş kullanıcı deneyimi - onları modern web geliştiricileri için değerli bir araç haline getirmektedir. Kaydırma Zaman Çizelgeleri ile denemeler yaparken, erişilebilirliğe öncelik vermeyi ve gerçekten kapsayıcı ve ilgi çekici web deneyimleri oluşturmak için kitlenizin küresel bağlamını göz önünde bulundurmayı unutmayın.

Bu heyecan verici yeni teknolojiyi kucaklayın ve web projeleriniz için yaratıcı olasılıklarla dolu bir dünyanın kilidini açın. Web animasyonunun geleceği burada ve kaydırma tarafından yönlendiriliyor!