
CSS ile hareket ve geçiş efektleri yazmanın iki temel yolu vardır: transition ve animation. İkisi de arayüzü daha anlaşılır gösterebilir; fakat kullanım amaçları farklıdır.
Söz dizimi ve alt özellikler için resmi dokümanlar: MDN: Using CSS transitions ve MDN: CSS animations.
Hover efektleri için pratik yaklaşım: normal stile transition ekleyin, :hover içinde hedef değerleri değiştirin.
Copy HTML
<a class="btn" href="https://example.com">Get Started</a>
Copy CSS
.btn {
display: inline-block;
padding: 12px 16px;
border-radius: 10px;
background: #1f6feb;
color: white;
text-decoration: none;
transform: translateY(0);
transition: transform 180ms ease, background-color 180ms ease;
}
.btn:hover {
background: #1858c7;
transform: translateY(-2px);
}
İpucu: Transition’ı :hover içinde değil, normal sınıfta tanımlamak hover bittiğinde de yumuşak dönüş sağlar (MDN örnek yaklaşımıyla uyumludur).
Not (performans): web.dev, bazı özelliklerin animasyon sırasında daha fazla iş (özellikle yeniden boyama veya yerleşim hesapları) tetikleyebileceğini; bu yüzden mümkün olduğunda transform/opacity gibi seçeneklerin tercih edilip değişikliklerin profillenerek doğrulanmasını önerir. (Kaynak: web.dev: Transitions) Box-shadow gibi efektler de öğenin alanı ve cihaz/GPU durumuna göre daha maliyetli olabilir; değerleri hafif tutup gerçek cihazda test edin.
Copy HTML
<div class="card">
<h3>Plan</h3>
<p>Kısa açıklama.</p>
</div>
Copy CSS
.card {
padding: 16px;
border-radius: 14px;
background: #ffffff;
transform: scale(1);
box-shadow: 0 1px 2px rgba(0,0,0,0.08);
transition: transform 200ms ease, box-shadow 200ms ease;
}
.card:hover {
transform: scale(1.02);
box-shadow: 0 10px 24px rgba(0,0,0,0.14);
}
Copy HTML
<a class="u-link" href="https://example.com">Docs</a>
Copy CSS
.u-link {
color: #111827;
text-decoration: none;
background-image: linear-gradient(currentColor, currentColor);
background-repeat: no-repeat;
background-position: 0 100%;
background-size: 0% 2px;
transition: background-size 180ms ease;
}
.u-link:hover {
background-size: 100% 2px;
}
transition kısa gösterimi, birden fazla alt özelliği tek satırda birleştirir (property, duration, timing-function, delay). Detay: MDN: Using CSS transitions.
transition: <property> <duration> <timing-function> <delay>;
Transition “durum değişiminde” çalışır; @keyframes ise animasyonun ara adımlarını tanımlar. Animation özellikleri (duration, timing-function, iteration-count vb.) ile birlikte kullanılır. Detay: MDN: CSS animations.
Copy HTML
<span class="badge">New</span>
Copy CSS
@keyframes pulse {
0% { transform: scale(1); opacity: 1; }
70% { transform: scale(1.08); opacity: 0.85; }
100% { transform: scale(1); opacity: 1; }
}
.badge {
display: inline-block;
padding: 6px 10px;
border-radius: 999px;
background: #16a34a;
color: white;
animation: pulse 900ms ease-in-out 0ms 2;
}
Copy HTML
<div class="spinner" aria-label="Loading"></div>
Copy CSS
@keyframes spin {
to { transform: rotate(360deg); }
}
.spinner {
width: 28px;
height: 28px;
border-radius: 50%;
border: 3px solid rgba(0,0,0,0.15);
border-top-color: rgba(0,0,0,0.55);
animation: spin 800ms linear infinite;
}
Copy HTML
<span class="icon" aria-label="Icon">*</span>
Copy CSS
@keyframes wiggle {
0% { transform: rotate(0deg); }
25% { transform: rotate(2deg); }
50% { transform: rotate(-2deg); }
75% { transform: rotate(1deg); }
100% { transform: rotate(0deg); }
}
.icon:hover {
animation: wiggle 220ms ease-in-out 0ms 1;
}
| Konu | transition | @keyframes + animation |
|---|---|---|
| Tetikleme | Durum değişimi (hover/focus/class) | Bağımsız başlatılabilir, döngü olabilir |
| Karmaşıklık | Basit geçişler için ideal | Çok adımlı sekanslar için güçlü |
| Kontrol | Başlangıç-bitiş arasında | 0–100% arası birçok ara kare |
| Tipik kullanım | Hover efektleri, aç/kapa geçişleri | Spinner, pulse, intro/outro, mikro animasyon |
Akıcı animasyon için her karede yapılan iş yükü önemlidir. web.dev, transform ve opacity animasyonlarının çoğu durumda daha elverişli olabildiğini; layout etkileyen değişikliklerin (örn. width/height/top/left) ise ek hesaplamalar tetikleyebileceğini anlatır. Bu nedenle doğru yaklaşım, mümkün oldukça transform/opacity ile çözmek ve sonucu profiling ile doğrulamaktır: web.dev: Transitions.
En iyi yaklaşım: hedef tarayıcı ve gerçek cihazlarda test etmek; DevTools performans araçlarıyla gözlem yapmaktır.
Animasyonlar bazı kullanıcılar için rahatsız edici olabilir. Bu nedenle prefers-reduced-motion ile animasyon/transition’ları kapatmak veya sadeleştirmek önerilen bir pratiktir: web.dev: Transitions.
Copy CSS
@media (prefers-reduced-motion: reduce) {
* {
animation: none !important;
transition: none !important;
scroll-behavior: auto !important;
}
}
Not: Bu örnek “genel kapatma” yaklaşımıdır. Üretimde, yalnızca gerekli bileşenlerde azaltma yapmak isteyebilirsiniz.
Transition genel olarak yaygın destek görür; yine de hedef kitlenize göre kontrol etmek iyi bir pratiktir. Can I use: CSS Transitions bu konuda hızlı bir tablo sunar.
Dokunmatik cihazlarda hover davranışı farklı olabilir; kritik işlevleri yalnızca hover’a bağlamamaya çalışın.
Basit hover efektlerinde transition ile hızlıca temiz bir etkileşim hissi yakalayabilirsiniz. Daha anlatımlı hareketler, döngüler veya çok adımlı sekanslar için @keyframes ve animation devreye girer. Performans ve erişilebilirlik için (özellikle) transform/opacity tercihlerini ve prefers-reduced-motion desteğini ihmal etmeyin.
Yorumlar