Herkese merhaba!
Kişisel web sitemi sürekli olarak geliştirmek ve daha interaktif hale getirmek benim için her zaman bir keyif oldu. Bu doğrultuda, geçtiğimiz günlerde anasayfama iki heyecan verici yeni özellik ekledim: Yazılımla ilgili terimlerden oluşan dinamik bir animasyonlu arka plan ve en son yazdığım blog yazılarını doğrudan anasayfada gösteren bir bölüm.
Bu yazıda, bu iki özelliği nasıl hayata geçirdiğimi ve siteme neler kattığını sizlerle paylaşmak istiyorum.
1. Animasyonlu Kod Arka Planı: Sayfaya Hareket Katmak
Anasayfama biraz daha "yazılımcı ruhu" katmak ve görsel bir derinlik oluşturmak istedim. Aklıma gelen fikir, arka planda yazılımla ilgili anahtar kelimelerin ve sembollerin rastgele hareket ettiği, ince bir animasyon eklemekti.
Nasıl Yaptık?
Bu özelliği hayata geçirirken Vue.js ve Tailwind CSS'in gücünden faydalandık:
- HTML Yapısı: Öncelikle anasayfa içeriğimin (
pages/index.vue
) en dış sarmalayıcısınırelative
konumlandırdık veoverflow-hidden
ile taşmaları engelledik. Ardından, tüm ekranı kaplayacak (fixed
,w-full
,h-full
) ve içeriğin arkasında duracak (z-index: -1
) birdiv
(#animated-code-background
) ekledik. Budiv
'epointer-events-none
vererek kullanıcı etkileşimlerini engellememesini sağladık. - CSS Stilleri ve Animasyon:
- Arka plan
div
'i içindekispan
elementleri (kod parçacıkları) içinmonospace
bir font ailesi belirledik. - Renkleri, açık ve koyu moda uyumlu olacak şekilde ve %10 görünürlük (yani %90 şeffaflık) sağlayacak
rgba
değerleri ile ayarladık. Bu, arka planın dikkat dağıtmadan, hoş bir detay olarak kalmasını sağladı. @keyframes drift
adında bir CSS animasyonu tanımladık. Bu animasyon, kod parçacıklarının aşağıdan yukarıya doğru yavaşça süzülmesini ve bu sırada opaklıklarının değişerek yumuşak bir giriş-çıkış efekti yaratmasını sağlıyor.
- Arka plan
- JavaScript ile Dinamik Oluşturma:
<script setup>
içinde, yazılımla ilgili birçok terimden (const
,function
,=>
,<div>
,API
,SQL
vb.) oluşan bircodeSnippets
dizisi tanımladık.- Sayfa yüklendiğinde (
onMounted
), belirlediğimiz sayıda (örneğin 70 adet)span
elementi dinamik olarak oluşturuluyor. - Her bir
span
için:codeSnippets
dizisinden rastgele bir terim seçiliyor.- Rastgele bir başlangıç pozisyonu (
left
,top
), font boyutu, animasyon süresi ve animasyon gecikmesi atanıyor. Bu sayede her bir parçacık farklı bir davranış sergileyerek daha doğal bir görünüm elde ediliyor. - Oluşturulan bu
span
'ler#animated-code-background
div
'inin içine ekleniyor.
Sonuç olarak, anasayfada gezinirken arka planda usulca akan, yazılıma dair bir atmosfer oluştu!
2. En Son Blog Yazıları Artık Anasayfada!
Blogumda paylaştığım yazıları daha görünür kılmak ve ziyaretçilerimin en son içeriklerimden kolayca haberdar olmasını sağlamak amacıyla anasayfama "Latest Blog Posts" (En Son Blog Yazıları) bölümünü ekledim.
Nasıl Yaptık?
Bu entegrasyon için Nuxt Content modülünün nimetlerinden yararlandık:
HomeBlogSection.vue
Komponenti: Önceliklecomponents
klasörü altına bu yeni bölümü yönetecek bir Vue komponenti oluşturduk.- İçerik Çekme (
queryContent
): Bu komponent içinde, Nuxt Content'in sağladığıqueryContent('/blog')
fonksiyonunu kullanarak/content/blog
dizinindeki Markdown dosyalarımı sorguladık.- Yazıları tarihe göre tersten sıralayarak (
sort({ date: -1 })
) en yeni olanların başa gelmesini sağladık. - Sadece en son 3 yazıyı almak için
limit(3)
kullandık.
- Yazıları tarihe göre tersten sıralayarak (
- Gösterim: Çektiğimiz her yazı için başlık, (varsa) açıklama, yayın tarihi ve "Devamını Oku" bağlantısını gösteren kartlar oluşturduk. Ayrıca, tüm blog yazılarına ulaşılabilecek bir "Tüm Yazıları Görüntüle" butonu da ekledik.
- Anasayfaya Entegrasyon: Son olarak, oluşturduğumuz
HomeBlogSection.vue
komponentinipages/index.vue
dosyamızın içine, "Teknolojiler" bölümünün hemen altına yerleştirdik.
Artık anasayfamı ziyaret edenler, en güncel yazılarıma hızlıca göz atabilecekler.
Bu yenilikler, web sitemi hem görsel olarak zenginleştirdi hem de kullanıcı deneyimini bir adım öteye taşıdı diye düşünüyorum. Siz ne düşünüyorsunuz? Geri bildirimlerinizi ve yorumlarınızı duymaktan mutluluk duyarım!
Okuduğunuz için teşekkürler!