CSS Mask ile X-Ray Efekti Nasıl Yapılır?
Perde Arkası
Bu portfolyödeki fotoğraf hover efekti, Framer'ın ünlü X-Ray bileşeninden ilham alıyor. Fare ile fotoğrafın üzerine geldiğinizde, bir daire içinde kod matrisi görünür. İşte bu efektin nasıl çalıştığı.
Katmanlı Mimari
Efekt 4 katmandan oluşuyor:
- Glitch Canvas (z-index: 1) — Rastgele harf ve sembollerle dolu bir canvas. Renkleri particle network ile senkronize.
- CRT Overlay (z-index: 2) — Eski monitör tarama çizgileri efekti.
- CRT Flicker (z-index: 3) — Titreşim animasyonu.
- Normal Fotoğraf (z-index: 5) — En üstte, mask ile delik açılıyor.
Sihirli Kısım: CSS Mask
Fotoğrafın altındaki kodu göstermek için mask-image ile bir delik açıyoruz:
// Mouse pozisyonunda radial-gradient mask
const mask = `radial-gradient(
circle 130px at ${x}px ${y}px,
transparent 0%, transparent 35%,
rgba(0,0,0,0.4) 55%,
rgba(0,0,0,0.8) 70%,
black 85%
)`;
element.style.maskImage = mask;
transparent kısımlar deliği oluşturur, black kısımlar fotoğrafı gösterir. Gradient geçişi sayesinde kenarlar yumuşak.
Silüet Maskeleme
Glitch canvas'ın fotoğraf dışına taşmaması için PNG silüet kullanılıyor:
.glitch-katman, .crt-overlay {
mask-image: url('erdi-portrait.png');
mask-size: contain;
mask-position: bottom center;
mask-repeat: no-repeat;
}
Renk Senkronizasyonu
Glitch harfleri, arka plan particle ağının rengini takip eder. window._particleHue değişkeni üzerinden HSL renk paylaşılır ve hslToRgb ile canvas'a uygulanır.
Sonuç
Sıfır framework, sıfır kütüphane — sadece CSS mask-image + Canvas API + matematiksel renk interpolasyonu. Efektin tamamı ~120 satır JavaScript.