Türkçe

Akıcı ve erişilebilir navigasyon için CSS scroll-behavior'ı ustaca kullanın. Kusursuz bir kullanıcı deneyimi için uygulama tekniklerini, tarayıcı uyumluluğunu ve gelişmiş özelleştirme seçeneklerini öğrenin.

CSS Kaydırma Davranışı: Akıcı Kaydırmaya Kapsamlı Bir Bakış

Günümüzün web geliştirme ortamında, kullanıcı deneyimi (UX) zirvede yer alıyor. Kullanıcı deneyimini önemli ölçüde etkileyebilecek görünüşte küçük bir ayrıntı, kaydırmanın akıcılığıdır. Artık bölümler arasında sarsıntılı atlamalar yok! CSS'in scroll-behavior özelliği, web sitesi erişilebilirliğini ve genel kullanıcı memnuniyetini artırarak, akıcı kaydırmayı uygulamak için basit ama güçlü bir yol sunar. Bu kılavuz, temel uygulamadan gelişmiş özelleştirmeye ve gerçekten küresel bir kitle için tarayıcı uyumluluğu hususlarına kadar her şeyi kapsayan scroll-behavior'ın kapsamlı bir incelemesini sunar.

CSS Kaydırma Davranışı Nedir?

CSS'deki scroll-behavior özelliği, bir kaydırma kutusu için kaydırma davranışını belirtmenizi sağlar. Varsayılan olarak, kaydırma anlıktır ve bir sayfanın farklı bölümleri arasında gezinirken ani atlamalara neden olur. scroll-behavior: smooth; bunu değiştirir ve bir bağlantıya tıklayarak, ok tuşlarını kullanarak veya programlı olarak bir kaydırma başlatarak tetiklendiğinde, sorunsuz, animasyonlu bir geçiş sağlar.

scroll-behavior: smooth; Temel Uygulaması

Akıcı kaydırmayı etkinleştirmenin en basit yolu, scroll-behavior: smooth; özelliğini html veya body öğesine uygulamaktır. Bu, görüntü alanı içindeki tüm kaydırmayı sorunsuz hale getirir.

html Öğesine Uygulama:

Genel olarak, tüm sayfanın kaydırma davranışını etkilediği için tercih edilen yöntem budur.

html {
  scroll-behavior: smooth;
}

body Öğesine Uygulama:

Bu yöntem de işe yarar, ancak yalnızca body içindeki içeriği etkilediği için daha az yaygındır.

body {
  scroll-behavior: smooth;
}

Örnek: Başlıklarla tanımlanan birkaç bölüm içeren basit bir web sayfası hayal edin. Bir kullanıcı bu bölümlerden birine işaret eden bir navigasyon bağlantısını tıkladığında, doğrudan o bölüme atlamak yerine, sayfa sorunsuz bir şekilde oraya kaydırılacaktır.

Çapa Bağlantılarıyla Akıcı Kaydırma

Çapa bağlantıları (parça tanımlayıcıları olarak da bilinir), bir web sayfası içinde gezinmenin yaygın bir yoludur. Genellikle içindekiler tablosunda veya tek sayfalı web sitelerinde kullanılırlar. scroll-behavior: smooth; ile, bir çapa bağlantısını tıklamak akıcı bir kaydırma animasyonunu tetikler.

Çapa Bağlantıları için HTML Yapısı:



Bölüm 1

Bölüm 1'in içeriği...

Bölüm 2

Bölüm 2'nin içeriği...

Bölüm 3

Bölüm 3'ün içeriği...

CSS kuralı html { scroll-behavior: smooth; } yerindeyken, navigasyondaki bağlantılardan herhangi birine tıklamak, karşılık gelen bölüme sorunsuz bir kaydırma animasyonuyla sonuçlanacaktır.

Belirli Kaydırılabilir Öğeleri Hedefleme

Ayrıca, scroll-behavior: smooth; özelliğini overflow: auto; veya overflow: scroll; içeren div'ler gibi belirli kaydırılabilir öğelere de uygulayabilirsiniz. Bu, sayfanın geri kalanını etkilemeden belirli bir kapsayıcı içinde akıcı kaydırmayı etkinleştirmenizi sağlar.

Örnek: Bir Div İçinde Akıcı Kaydırma:

Burada çok fazla içerik var...

Daha fazla içerik...

Daha da fazla içerik...

.scrollable-container {
  width: 300px;
  height: 200px;
  overflow: scroll;
  scroll-behavior: smooth;
}

Bu örnekte, yalnızca .scrollable-container içindeki içerik sorunsuz bir şekilde kaydırılacaktır.

JavaScript ile Programlı Akıcı Kaydırma

scroll-behavior: smooth; kullanıcı etkileşimi (çapa bağlantılarına tıklamak gibi) tarafından tetiklenen kaydırmayı işlerken, JavaScript kullanarak programlı olarak kaydırmayı başlatmanız gerekebilir. scrollTo() ve scrollBy() yöntemleri, behavior: 'smooth' seçeneğiyle birleştirildiğinde, bunu başarmanın bir yolunu sağlar.

scrollTo() Kullanımı:

scrollTo() yöntemi, pencereyi belirli bir koordinata kaydırır.

window.scrollTo({
  top: 500,
  left: 0,
  behavior: 'smooth'
});

Bu kod, pencereyi yukarıdan 500 piksel dikey bir ofsete sorunsuz bir şekilde kaydıracaktır.

scrollBy() Kullanımı:

scrollBy() yöntemi, pencereyi belirtilen bir miktar kadar kaydırır.

window.scrollBy({
  top: 100,
  left: 0,
  behavior: 'smooth'
});

Bu kod, pencereyi aşağı doğru 100 piksel sorunsuz bir şekilde kaydıracaktır.

Örnek: Düğme Tıklamasıyla Bir Öğeye Akıcı Kaydırma:



Bölüm 3

Bölüm 3'ün içeriği...

const scrollButton = document.getElementById('scrollButton');
const section3 = document.getElementById('section3');

scrollButton.addEventListener('click', () => {
  section3.scrollIntoView({
    behavior: 'smooth'
  });
});

Düğme tıklandığında, sayfa scrollIntoView() kullanılarak "Bölüm 3" öğesine sorunsuz bir şekilde kaydırılacaktır. Bu yöntem, dinamik içerik değişikliklerinden bağımsız olarak hedef öğenin kesin konumunu hesapladığı için genellikle tercih edilir.

Kaydırma Hızını ve Yumuşatmayı Özelleştirme

scroll-behavior: smooth; varsayılan bir akıcı kaydırma animasyonu sağlarken, hızı veya yumuşatmayı (animasyonun zaman içindeki değişim oranı) doğrudan CSS kullanarak kontrol edemezsiniz. Özelleştirme JavaScript gerektirir.

Önemli Not: Aşırı uzun veya karmaşık animasyonlar kullanıcı deneyimine zarar verebilir, potansiyel olarak hareket hastalığına neden olabilir veya kullanıcı etkileşimini engelleyebilir. İnce ve verimli animasyonlar için çabalayın.

JavaScript Tabanlı Özelleştirme:

Kaydırma hızını ve yumuşatmayı özelleştirmek için özel bir animasyon oluşturmak için JavaScript kullanmanız gerekir. Bu, tipik olarak GSAP (GreenSock Animation Platform) gibi kitaplıkları kullanmayı veya requestAnimationFrame kullanarak kendi animasyon mantığınızı uygulamayı içerir.

requestAnimationFrame Kullanarak Örnek:

function smoothScroll(target, duration) {
  const start = window.pageYOffset;
  const targetPosition = target.getBoundingClientRect().top;
  const startTime = performance.now();

  function animation(currentTime) {
    const timeElapsed = currentTime - startTime;
    const run = ease(timeElapsed, start, targetPosition, duration);
    window.scrollTo(0, run);
    if (timeElapsed < duration) {
      requestAnimationFrame(animation);
    }
  }

  // Easing function (e.g., easeInOutQuad)
  function ease(t, b, c, d) {
    t /= d/2;
    if (t < 1) return c/2*t*t + b;
    t--;
    return -c/2 * (t*(t-2) - 1) + b;
  }

  requestAnimationFrame(animation);
}

// Example usage:
const targetElement = document.getElementById('section3');
const scrollDuration = 1000; // milliseconds
smoothScroll(targetElement, scrollDuration);

Bu kod, bir hedef öğe ve bir süre girdi olarak alan bir smoothScroll işlevi tanımlar. Pürüzsüz bir animasyon oluşturmak için requestAnimationFrame kullanır ve animasyonun hızını kontrol etmek için bir yumuşatma işlevi (bu örnekte easeInOutQuad) içerir. Çeşitli animasyon efektleri elde etmek için çevrimiçi olarak birçok farklı yumuşatma işlevi bulabilirsiniz.

Erişilebilirlik Hususları

Akıcı kaydırma kullanıcı deneyimini geliştirebilirken, erişilebilirliği göz önünde bulundurmak çok önemlidir. Bazı kullanıcılar akıcı kaydırmayı dikkat dağıtıcı veya hatta yönünü şaşırtıcı bulabilir. Kapsayıcılık için akıcı kaydırmayı devre dışı bırakmanın bir yolunu sağlamak önemlidir.

Kullanıcı Tercihini Uygulama:

En iyi yaklaşım, kullanıcının azaltılmış hareket için işletim sistemi tercihlerine saygı duymaktır. prefers-reduced-motion gibi medya sorguları, kullanıcının sistem ayarlarında azaltılmış hareket talep edip etmediğini algılamanıza olanak tanır.

prefers-reduced-motion Kullanımı:

@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto !important; /* Override smooth scrolling */
  }
}

Bu kod, kullanıcı işletim sisteminde "hareketi azalt" ayarını etkinleştirmişse akıcı kaydırmayı devre dışı bırakır. !important bayrağı, bu kuralın diğer tüm scroll-behavior bildirimlerini geçersiz kılmasını sağlamak için kullanılır.

Manuel Bir Geçiş Sağlama:

Ayrıca, kullanıcıların akıcı kaydırmayı etkinleştirmesine veya devre dışı bırakmasına olanak tanıyan manuel bir geçiş (örneğin, bir onay kutusu) sağlayabilirsiniz. Bu, kullanıcılara deneyimleri üzerinde daha doğrudan kontrol sağlar.


const smoothScrollToggle = document.getElementById('smoothScrollToggle');

smoothScrollToggle.addEventListener('change', () => {
  if (smoothScrollToggle.checked) {
    document.documentElement.style.scrollBehavior = 'smooth';
  } else {
    document.documentElement.style.scrollBehavior = 'auto';
  }
});

Bu kod, kullanıcıların akıcı kaydırmayı açıp kapatmasına olanak tanıyan bir onay kutusu ekler. Bu kullanıcı tercihini (örneğin, yerel depolamayı kullanarak) kaydedin, böylece oturumlar arasında hatırlanır.

Tarayıcı Uyumluluğu

scroll-behavior iyi tarayıcı desteğine sahiptir, ancak bunu desteklemeyen eski tarayıcıların farkında olmak önemlidir. İşte tarayıcı uyumluluğunun bir özeti:

Eski Tarayıcılar için Bir Geri Dönüş Sağlama:

scroll-behavior'ı desteklemeyen tarayıcılar için bir JavaScript polyfill kullanabilirsiniz. Polyfill, daha yeni bir özelliğin işlevselliğini eski tarayıcılarda sağlayan bir kod parçasıdır.

Örnek: Bir Polyfill Kullanma:

Akıcı kaydırma polyfill'leri sağlayan çeşitli JavaScript kitaplıkları mevcuttur. Bir seçenek, "smoothscroll-polyfill" gibi bir kitaplık kullanmaktır.



Bu kod, "smoothscroll-polyfill" kitaplığını içerir ve başlatır. Bu, scroll-behavior'ı doğal olarak desteklemeyen eski tarayıcılarda akıcı kaydırma işlevselliği sağlayacaktır.

Koşullu Yükleme: Modern tarayıcılarda gereksiz yüklemeyi önlemek için bir komut dosyası yükleyici veya özellik algılama kullanarak polyfill'i koşullu olarak yüklemeyi düşünün.

Akıcı Kaydırma için En İyi Uygulamalar

Akıcı kaydırmayı uygularken akılda tutulması gereken bazı en iyi uygulamalar şunlardır:

Sık Karşılaşılan Sorunlar ve Çözümler

Akıcı kaydırmayı uygularken karşılaşabileceğiniz bazı yaygın sorunlar ve çözümleri şunlardır:

Gelişmiş Teknikler ve Hususlar

Temel bilgilerin ötesinde, akıcı kaydırma uygulamanızı geliştirmek için çeşitli gelişmiş teknikler ve hususlar vardır.

scroll-margin ve scroll-padding Kullanımı:

Bu CSS özellikleri, kaydırma yakalama davranışı üzerinde daha ayrıntılı kontrol sağlar ve içeriğin sabit başlıklar veya altbilgiler tarafından gizlenmesini önlemeye yardımcı olur.

Örnek:

section {
  scroll-margin-top: 20px; /* Kaydırırken her bölümün üstüne 20 piksellik bir kenar boşluğu ekler */
}

html {
  scroll-padding-top: 60px; /* Kaydırırken görüntü alanının üstüne 60 piksellik bir dolgu ekler */
}

Intersection Observer API ile Birleştirme:

Intersection Observer API, bir öğenin görüntü alanına ne zaman girip çıktığını algılamanıza olanak tanır. Öğelerin görünürlüğüne göre akıcı kaydırma animasyonlarını tetiklemek için bu API'yi kullanabilirsiniz.

Örnek:

const sections = document.querySelectorAll('section');

const observer = new IntersectionObserver(entries => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      // Bölüm görüntülendiğinde bir şeyler yap
      console.log('Bölüm ' + entry.target.id + ' görüntülendi');
    } else {
      // Bölüm görüntülenmediğinde bir şeyler yap
      console.log('Bölüm ' + entry.target.id + ' görüntülenmedi');
    }
  });
}, {
  threshold: 0.5 // Öğenin %50'si görünür olduğunda tetiklenir
});

sections.forEach(section => {
  observer.observe(section);
});

Bu kod, her bölümün görüntü alanına girip çıktığını algılamak için Intersection Observer API'sini kullanır. Daha sonra bu bilgileri özel akıcı kaydırma animasyonlarını veya diğer görsel efektleri tetiklemek için kullanabilirsiniz.

Kaydırma Davranışına Küresel Bakış Açıları

Akıcı kaydırmanın teknik uygulaması küresel olarak tutarlı kalsa da, kültürel ve bağlamsal hususlar algılanan kullanılabilirliğini etkileyebilir.

Sonuç

scroll-behavior: smooth;, web sitenizin kullanıcı deneyimini önemli ölçüde artırabilen değerli bir CSS özelliğidir. Temel uygulamasını, özelleştirme seçeneklerini, erişilebilirlik hususlarını ve tarayıcı uyumluluğunu anlayarak, dünya çapındaki kullanıcılar için kusursuz ve keyifli bir tarama deneyimi oluşturabilirsiniz. Erişilebilirliğe öncelik vermeyi, performansı optimize etmeyi ve akıcı kaydırma uygulamanızın tüm kullanıcılarınızın ihtiyaçlarını karşıladığından emin olmak için iyice test etmeyi unutmayın. Bu kılavuzda özetlenen yönergeleri ve en iyi uygulamaları izleyerek, akıcı kaydırmada uzmanlaşabilir ve küresel bir kitle için hem görsel olarak çekici hem de kullanıcı dostu bir web sitesi oluşturabilirsiniz.