Ana içeriğe geç
Blog
9 Mayıs 2026
10 Dk.

Mikro Etkileşimler & Framer Motion: Core Web Vitals'ı Bozmadan Premium His

İnce animasyonlarla Framer Motion kullanarak premium kullanıcı hissi nasıl yaratılır – LCP, CLS ve INP'yi öldürmeden. Kod örnekleri, sahadan hatalar ve altın fizik kuralı.

Cagri Ersöz – Gründer & Creative Director, Storyable Digitalagentur Hannover

Cagri Ersöz

Cagri Ersöz, Hannover'deki dijital ajans Storyable'ın kurucusu ve genel müdürüdür. Satış psikolojisine dayalı web tasarımı ve full-stack geliştirme (Vue.js, Nuxt, React) deneyimiyle KOBİ'ler için 50'den fazla dijital projeyi hayata geçirmiştir. Uzmanlık alanları: dönüşüm optimizasyonu, yapay zeka entegrasyonu ve veri odaklı pazarlama.

Şimdi İletişime Geç

Mikro etkileşimler olmayan bir web sitesi PowerPoint tıklaması gibi hissettirir. Abartılı animasyonlu bir site ise kumarhane slot makinesi. İkisinin arasında, kullanıcının açıklayamadığı ama anında hissettiği o premium duygu vardır.

Mikro etkileşimler modern web tasarımının bilinçaltına gönderdiği kalite sinyalleridir. Hannover'deki Storyable ekibi olarak her özel kodlu websiteye bunları yerleştiriyoruz, çünkü göz takibi çalışmalarından biliyoruz: Apple yazı tipi yüzünden pahalı görünmüyor. Apple her butonun, her toggle'ın, her sayfa geçişinin fiziksel bir tepki gösterdiği için pahalı görünüyor. Bu rehberde dört kategoriyi, Next.js ve React için somut Framer Motion mantığını, en sık yapılan hataları ve animasyondan değil – ölçülülükten kazanan sektörleri bulacaksın.

Mikro Etkileşimler Nedir – Ve Neden Bilinçaltı Kalite Sinyali Gönderir?

Mikro etkileşim, tek bir kullanıcı ihtiyacını karşılayan odaklanmış, tek seferlik mini animasyondur: onay, durum, geçiş, beklenti. 100–500 milisaniye sürer, dekoratif değildir ve somut bir geri bildirim üretir.

İnsan bu animasyonları düşünmez. Hisseder.

  • Tıklamada hafifçe büyüyen bir buton "tıklamanı algıladım" der
  • Doğrulama hatasında titreyen bir form alanı "burada problem var" der
  • Sert kesmeyen sayfa geçişi "kaybolmuyorsun – seni oraya götürüyorum" der

Bu sinyaller bilinçaltında şu soruyu cevaplar: "Bu site profesyonel mi yoksa amatör işi mi?" Bunu anlayan, özel kodlu web tasarımlarımızın aynı içerikle WordPress şablonlarına göre %40'a kadar daha çok dönüştürmesinin nedenini anlamış olur – bilinçaltı kaliteyi stok fotoğraflarla dolu ekranlardan değil, tepki örüntülerinden okur. Bu sinyallerin arkasındaki dönüşüm psikolojisini detaylı olarak psikolojik web tasarım rehberimizde bulabilirsin.

Profesyonel İpucu: Bir animasyonu kaldırdığında hiç kimse fark etmiyorsa – gereksizmiş demektir. Onsuz arayüz ölü hissediyorsa – gerçek bir mikro etkileşimmiş demektir.

4 Kategori: Feedback, Triggers, Loops, Modes

Dan Saffer ("Microinteractions", O'Reilly) modeli oluşturdu. Biz 100'ün üzerinde Storyable projesinde keskinleştirdik. Bu dört kategori anlamlı mikro etkileşimlerin %95'ini kapsar.

1. Feedback – "Seni Duydum"

En önemli kategori. Her tıklama, her hover, her giriş 100ms içinde görünür şekilde tepki vermeli. Aksi halde kullanıcı eyleminin gidip gitmediğinden emin olamaz.

  • Buton basışı + scale-down (scale: 0.97)
  • Renk veya gölge geçişi ile hover durumu
  • Focus-ring ve label-float ile form alanı
  • Başarılı submit sonrası toast bildirimi

2. Triggers – "Burada Bir Şey Yapabilirsin"

Affordance'lar. Bu animasyonlar kullanıcıya bir şeyin etkileşimli olduğunu anlatır. Klasik: agresif dans etmeyen, her 4 saniyede %2 nefes alan ince pulse'lı CTA butonu.

3. Loops – "Şu An Bir Şey Oluyor"

Durum animasyonları. Loop olmadan kullanıcı "donmuş" bir ekran görür ve sayfanın çöktüğünü düşünür. Loop ile sistem çalışıyor mesajı verilir.

  • Çıplak spinner yerine skeleton loader
  • Yükleme veya çok adımlı süreçlerde progress bar
  • Yazarken canlı arama göstergesi
  • Uzun API çağrılarında pulse animasyonu

4. Modes – "Şu An X Durumundasın"

Durumlar arası geçişler. Modal açılır, drawer kayar, tab değişir. Bu animasyonlar bilişsel kopukluğu önler – beyin bağlam değişimini hareket sayesinde anlar, yeniden organize etmek zorunda kalmaz.

  • Backdrop-fade + scale-in ile modal
  • Slide-translation ile sidebar drawer
  • Height animasyonu ile akordiyon açılımı
  • Yeni konuma kayan tab-underline

Next.js & React'te Framer Motion: Somut Mantık

Framer Motion React animasyonlarının fiili standart kütüphanesidir. Doğru kullanılırsa motor altında sadece GPU hızlandırmalı property'ler kullanır (transform, opacity, filter). Storyable'da her ölçeklenebilir web mimarisinde kullandığımız pattern'lar.

Pattern 1: Buton Feedback (Feedback Kategorisi)

import { motion } from "framer-motion"

export function PrimaryButton({ children, onClick }) {
  return (
    <motion.button
      whileHover={{ scale: 1.03 }}
      whileTap={{ scale: 0.97 }}
      transition={{ type: "spring", stiffness: 400, damping: 17 }}
      onClick={onClick}
    >
      {children}
    </motion.button>
  )
}

whileHover ve whileTap deklaratiftir – useEffect yok, state yönetimi yok. Spring fiziği eylemsizliği simüle ettiği için doğal hissettirir. Stiffness 400 + Damping 17 butonlarımız için Storyable varsayılan eğrisidir.

Pattern 2: Scroll-Reveal (Triggers Kategorisi)

import { motion } from "framer-motion"

export function FadeInSection({ children }) {
  return (
    <motion.div
      initial={{ opacity: 0, y: 24 }}
      whileInView={{ opacity: 1, y: 0 }}
      viewport={{ once: true, margin: "-100px" }}
      transition={{ duration: 0.5, ease: "easeOut" }}
    >
      {children}
    </motion.div>
  )
}

once: true ile whileInView animasyonu ilk scroll'da tek seferlik tetikler. -100px margin animasyonu eleman tam görünmeden önce başlatır – içerik "beklenir" hissi verdiği için premium duygusu oluşur.

Pattern 3: Sayfa Geçişi (Modes Kategorisi)

import { motion, AnimatePresence } from "framer-motion"
import { useRouter } from "next/router"

export function PageWrapper({ children }) {
  const router = useRouter()
  return (
    <AnimatePresence mode="wait">
      <motion.main
        key={router.asPath}
        initial={{ opacity: 0, y: 12 }}
        animate={{ opacity: 1, y: 0 }}
        exit={{ opacity: 0, y: -12 }}
        transition={{ duration: 0.25 }}
      >
        {children}
      </motion.main>
    </AnimatePresence>
  )
}

mode="wait" ile AnimatePresence yeni sayfa girmeden önce exit animasyonunun bitmesini bekler. Asla aynı anda ikisini birden çalıştırma – görsel kirlilik yaratır.

Storyable Kuralı

"Bir animasyonun bir görevi olmalı. Yoksa o efekt değil – gürültüdür."

En Sık Yapılan Hatalar: LCP ve CLS'yi Bozan Animasyonlar

Hobby implementasyonlarının %80'i burada başarısız olur. Animasyonlar ancak transform ve opacity üzerinde çalışırsa performanslı olur. Layout property'lerine dokunduğun anda tarayıcı reflow tetikler – ve Core Web Vitals'ın kırmızıya düşer.

❌ Hata✅ DoğruNeden
width: 0 → 300px animasyonuscaleX: 0 → 1Reflow INP'yi öldürür, CLS yükselir
Modal'ı top/left ile konumlandırmaktransform: translate(...)Top/Left layout-recalc tetikler
height: auto animasyonumotion.div + layout propAuto değerleri GPU hızlandırılmaz
LCP image'den önce hero animasyonuAnimasyon onLoadingComplete'den sonraLCP elemanını geciktirir
Statik markup için <motion.div>Native HTML, sadece gerektiğinde Framer MotionBundle boyutu + hidrasyon maliyeti
Hero'da 30+ animasyonlu elemanMaksimum 5–7 öğe ile staggerMain-thread bloklanması
prefers-reduced-motion olmadan repeat: InfinityMedia query ile korumaErişilebilirlik + INP

LCP Katili: Hero Görselini Engelleyen Animasyonlar

Hero görselin 800ms fade animasyonundan sonra görünüyorsa LCP'ni 1,2s'den 2,0s'ye kaydırmışsın demektir. Google bunu cezalandırır. Çözüm: Hero görseli loading="eager" ve fetchpriority="high" ile anında render et. Animasyonu altındaki öğelere uygula.

CLS Katili: Yer Ayrılmamış Layout Animasyonları

Çevre içeriğin yer ayırmadığı "açılan" bir kart, altındaki her şeyi iter. CLS fırlar. Çözüm: min-height rezerve et, layout animasyonu için <motion.div layout> kullan – Framer Motion ölçümü kendi yapar ve temiz animasyonlar üretir.

Premium UX'e sahip ama 1 saniye altında yüklenen bir web sitesi mi istiyorsun? Next.js ve Framer Motion ile özel kodlu web siteleri inşa ediyoruz – PageSpeed Insights'ta 95 puan eşiğini sadece geçmekle kalmıyor, koruyoruz. Projen hakkında konuşalım.

Altın Kural: Animasyon Fizik Gibi Hissetmeli, PowerPoint Efekti Gibi Değil

"Ucuz" ile "premium" arasındaki fark burada yatar. PowerPoint animasyonları lineer ve anidir. Gerçek animasyonlar Newton'un hareket yasalarına uyar: ivme, yavaşlama, eylemsizlik, sönümlenme.

Animasyonun Doğal Hissedip Hissetmediğinin 3 Testi

  1. Easing Testi: Asla linear veya ease kullanma. Giren hareket için easeOut, çıkan hareket için easeIn, etkileşimli durumlar için spring
  2. Kütle Testi: Büyük öğeler daha yavaş hareket eder. Modal (büyük) 350ms ister, buton (küçük) 150ms
  3. Bounce Testi: Spring animasyonlarda Damping ≥ 15 ZORUNLU – aksi halde UI 2014'ün ucuz JavaScript demosu gibi sallanır

Stagger – Premium'u Yapan Detay

5 eleman aynı anda fade in olursa loading gibi görünür. 50ms gecikmeyle ardarda fade in olursa kompozisyon gibi görünür. Filmlerin gerilim kurma trikiyle aynı – Apple, Linear ve Vercel her sayfada kullanır.

const container = {
  hidden: {},
  show: { transition: { staggerChildren: 0.08 } }
}
const item = {
  hidden: { opacity: 0, y: 16 },
  show: { opacity: 1, y: 0 }
}

Animasyonun Zarar Verdiği Yerler: Ölçülülüğün Daha Çok Dönüştürdüğü Sektörler

Tasarımcı egolarına dokunan kısım: Her sektör mikro etkileşimden faydalanmaz. Storyable denetimlerinde gördük – abartılı animasyonlar bazı sitelerin dönüşüm oranını düşürdü.

Hukuk Büroları, Mali Müşavirler, Noterler

Hukuk bürosu websitesindeki kullanıcı tek bir şey arar: güven. Spring efektli animasyonlu hero bölümü ciddiyetin tam tersini sinyalize eder. Hukuk bürosu web tasarımı deneyimimiz gösteriyor: ölçülülük zorunlu. Basit hover durumları – fazlası değil.

Doktor ve Diş Hekimi Klinikleri

Hastalar duygusal hassas durumdadır (endişe, ağrı, belirsizlik). Aşırı animasyonlar telaşlı hisseder. Modal ve akordiyon için yumuşak mode animasyonları tamam. Spring zıplama, scroll-trigger gösteri efektleri: lütfen yapma. Bunu resepsiyonu rahatlatan klinik web siteleri yazımızda netçe belgeledik.

Sigortalar, Cenaze Hizmetleri, Bakım Hizmetleri

Aynı mantık: güven yenilikten önce gelir. Burada temiz tipografi + düzgün hover feedback yeterli.

Animasyonun Her Zaman Faydalı Olduğu Yerler

  • E-ticaret (sepete ekleme animasyonu, skeleton loader)
  • SaaS ürünleri (onboarding, özellik keşfi)
  • Yaratıcı sektörler (ajanslar, fotoğrafçılar, müzisyenler)
  • Restoranlar (storytelling, deneyim olarak menü)
  • Tech startuplar (WordPress kalabalığından farklılaşma)

Dikkat: Animasyon refactor'undan ÖNCE mutlaka prefers-reduced-motion media query'sini implement et. Vestibüler bozukluğu olan kullanıcılar abartılı animasyonlarda mide bulantısı yaşayabilir. Framer Motion bunu otomatik olarak useReducedMotion() hook'u ile destekler – kullan.

Deployment Öncesi 8 Maddelik Kontrol Listesi

  1. Lighthouse skoru ≥ 95? CLS < 0.1, INP < 200ms?
  2. Layout property'lerinde animasyon yok mu (width/height/top/left)?
  3. prefers-reduced-motion saygı görüyor mu?
  4. Hero görseli ilk animasyondan ÖNCE yükleniyor mu?
  5. Gerekmedikçe repeat: Infinity yok mu?
  6. Bölüm başına maksimum 5–7 stagger öğesi var mı?
  7. Animasyon süresi 150–500ms mi (sayfa geçişi hariç)?
  8. Easing: easeOut, easeInOut veya springlinear asla?

8 kutucuğun hepsi işaretliyse premium UX ve yeşil Core Web Vitals sahibi bir siten var. Bu çelişki değil – WordPress tema alıcılarının sahip olamayacağı disiplin.

Sonuç: Mikro Etkileşimler Süs Değil, Kalite Sinyali

Mikro etkileşimler kullanıcının bilinçaltında web sitenin "profesyonel" mi yoksa "ucuz" mu göründüğüne karar verir. React ve Next.js'te Framer Motion ile Apple, Linear ve Vercel'in çalıştığı aracı elinde tutarsın – ama sadece performans disiplinini de getirirsen: yalnızca GPU property'leri, prefers-reduced-motion saygısı, Hero LCP'sini engellememe ve hukuk büroları ya da klinikler gibi ciddi sektörlerde bilinçli ölçülülük. İyi animasyonun bir görevi vardır. Yoksa gürültüdür – ve gürültü dönüşüm oranlarını Google'ın algoritma güncellemelerinden daha hızlı öldürür. Mikro etkileşimleri doğru kullanan, web sitesi inşa etmiyor. Kullanıcının açıklayamadığı ama anında hissettiği bir deneyim inşa ediyor.

Cagri Ersöz
Cagri Ersöz

Premium UX ile 95 PageSpeed skoru – ikisini birden inşa ediyoruz.

Apple gibi hisseden ama statik PDF gibi yüklenen bir site mi istiyorsun? Framer Motion, Next.js ve Core Web Vitals disiplinini her özel projede birleştiriyoruz. 30 dakikalık ücretsiz ön görüşmede mevcut sitenin nerede performans puanı kaybettiğini ve animasyondan vazgeçmeden nasıl geri kazanabileceğimizi gösteriyoruz.

Sıkça Sorulan Sorular

Bu konuyla ilgili en önemli soruların hızlı cevapları

Mikro etkileşimler nedir?+
Mikro etkileşimler, bir kullanıcı hareketine arayüzün verdiği küçük ve odaklanmış tepkilerdir – hover durumları, buton geri bildirimleri, form doğrulama, yükleme göstergeleri. Bilinçaltına kalite sinyali gönderir ve arayüzü canlı hissettirir.
Framer Motion Core Web Vitals'ı bozar mı?+
Mecburen değil. Framer Motion GPU üzerinde transform ve opacity ile çalışır. Sorun width, height, top veya left animasyonlarında çıkar – bunlar layout shift (CLS) ve main thread blocking (INP) tetikler. Sadece transform kullanıldığında LCP, CLS ve INP yeşil kalır.
Animasyondan ne zaman kaçınmalıyım?+
Hukuk büroları, doktorlar, mali müşavirler ve ciddi B2B hizmetlerinde ölçülü tasarım daha çok dönüştürür. Kullanıcı güven ve uzmanlık arar, gösteri değil. Bu sektörlerde abartılı animasyon ciddiyetsiz görünür ve dönüşüm oranını düşürür.
CSS animasyonu ile Framer Motion arasındaki fark nedir?+
Basit hover veya yükleme durumları için CSS yeterli. Orkestre edilmiş sıralı animasyonlar, jest tabanlı etkileşimler, layout animasyonları veya kaldırılan komponentler için exit animasyonu gerekiyorsa Framer Motion şart. Kural: Atomlar için CSS, moleküller ve layout için Framer Motion.
Optimal animasyon süresi nedir?+
Geri bildirim animasyonları için 150–300 milisaniye, sayfa geçişleri için 300–500ms, UI tepkilerinde asla 800ms'in üzerine çıkma. Üzeri ağır hisseder. Easing eğrisi: tercihen easeOut veya spring – linear asla.
Animasyonlarımın performansı bozup bozmadığını nasıl ölçerim?+
Chrome DevTools Performance sekmesi ve Lighthouse CI. 50ms üzeri Long Task'lere, 200ms üzeri INP'ye ve 0.1 üzeri CLS'ye dikkat et. PageSpeed Insights de animasyonların render-blocking yapıp yapmadığını gösterir.
İlgili Yazılar

İlgili Yazılar

Bu konu alanından diğer yazılar