Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Web Geliştirmede `data-*` Özellikleri: HTML'de Kendi Veri Alanlarınızı Yaratın 🪄

byteon

Üye
Katılım
14 Mart 2026
Mesajlar
9
Web Geliştirmede `data-*` Özellikleri: HTML'de Kendi Veri Alanlarınızı Yaratın 🪄

Selam dostlar! Uzun zamandır forumda takılıyorum ve bugün sizlerle, özellikle yeni başlayanların gözünden kaçırabileceği ama aslında inanılmaz güçlü ve pratik bir HTML özelliğinden bahsetmek istiyorum: `data-*` özellikleri.

Bu özellik, HTML elementlerinize kendi özel verilerinizi eklemenize, bu verileri hem CSS hem de JavaScript ile kolayca okuyup yönetmenize olanak tanır. Sanki her elemente küçük bir not kağıdı yapıştırıyormuşsunuz gibi düşünebilirsiniz. 🏷️

Neden `data-*` Özelliklerine İhtiyaç Duyarız?

Geleneksel olarak, bir elementle ilişkilendirmek istediğimiz ekstra bilgileri (bir kullanıcı ID'si, bir ürün fiyatı, bir durum bilgisi gibi) genelde JavaScript değişkenlerinde, gizli input alanlarında ya da doğrudan JavaScript nesnelerinde saklardık. Bu yöntemler bazen karmaşıklaşabilir ve HTML yapısından kopuk hissedebilirdi.

`data-*` özellikleri tam da bu noktada devreye giriyor. Veriyi, ilgili olduğu elementin kendisinde saklıyoruz. Bu da:
  • Kodu daha okunabilir ve anlaşılır kılar.
  • JavaScript mantığını basitleştirir.
  • CSS'de bile bu verilere erişip stil uygulamanıza izin verir (ileri seviye bir özellik!).

Nasıl Kullanılır? Temel Syntax

Kullanımı son derece basittir. `data-` ön ekiyle başlayan ve kendi belirlediğiniz bir isimle devam eden herhangi bir özellik ekleyebilirsiniz.

Kod:
<button data-urun-id="145" data-fiyat="299.99" data-stok-durumu="true">
    Sepete Ekle
</button>

<div data-kullanici-rol="admin" data-theme="dark" data-page-loaded="false">
    Yönetici Paneli
</div>

Gördüğünüz gibi, `data-urun-id`, `data-fiyat`, `data-kullanici-rol` gibi kendi anlamlı isimlerinizi kullanabiliyorsunuz. Değerler her zaman string olarak saklanır, ancak sayısal veya boolean değerleri de string olarak yazıp sonradan dönüştürebilirsiniz.

JavaScript ile `data-*` Özelliklerine Erişmek

JavaScript tarafında iki ana yolumuz var:

1. `dataset` Özelliği: En modern ve temiz yol.
Kod:
const button = document.querySelector('button');

// Veriyi okuma
const urunId = button.dataset.urunId; // "145"
const fiyat = button.dataset.fiyat; // "299.99"

// Veriyi değiştirme
button.dataset.stokDurumu = "false"; // Artık "false" değerini taşıyor
// HTML'de data-stok-durumu="false" olarak güncellenir.

// Yeni data özelliği ekleme
button.dataset.indirimKodu = "YAZ2024";
// HTML'e data-indirim-kodu="YAZ2024" eklenir.
[DİKKAT] HTML'deki tire (`-`) ile ayrılmış isimler (örn: `data-stok-durumu`), JavaScript'te `dataset` içinde camelCase'e dönüşür (`stokDurumu`).

2. `getAttribute()` / `setAttribute()` Metotları: Daha geleneksel ve evrensel bir yöntem.
Kod:
// Okuma
const urunId = button.getAttribute('data-urun-id');

// Yazma
button.setAttribute('data-stok-durumu', 'false');

CSS ile `data-*` Özelliklerini Kullanmak

Evet, yanlış duymadınız! CSS'de `attr()` fonksiyonu ve özellik seçicileri ile bu verilere erişebilirsiniz. Bu, dinamik stiller için harikadır.

Kod:
/* data-stok-durumu "false" olan butonu gri yap */
button[data-stok-durumu="false"] {
    background-color: #ccc;
    cursor: not-allowed;
}

/* data-theme değerine göre arkaplan rengi */
div[data-theme="dark"] {
    background-color: #333;
    color: white;
}
div[data-theme="light"] {
    background-color: #fff;
    color: black;
}

/* data-icon değerini içerik olarak gösterme (ileri seviye) */
.tooltip::after {
    content: attr(data-tooltip);
    position: absolute;
    /* ... stil kuralları ... */
}

Gerçek Dünya Örneği: Basit Bir Sepet Uygulaması

Bu gücü küçük bir örnekle görelim. Bir ürün listemiz ve sepete ekleme butonlarımız olsun.

Kod:
<ul id="urun-listesi">
    <li data-id="1" data-fiyat="150" data-isim="Web Geliştirme Kitabı">
        Web Geliştirme Kitabı - 150 TL
        <button class="sepete-ekle">Ekle</button>
    </li>
    <li data-id="2" data-fiyat="89.90" data-isim="Programlama Kursu">
        Programlama Kursu - 89.90 TL
        <button class="sepete-ekle">Ekle</button>
    </li>
</ul>
<div id="sepet">Sepetiniz Boş</div>

Kod:
document.querySelectorAll('.sepete-ekle').forEach(button => {
    button.addEventListener('click', function() {
        // Butonun parent'ı olan li elementinin data özelliklerine ulaş
        const urunElemani = this.parentElement;
        const urunId = urunElemani.dataset.id;
        const urunFiyat = parseFloat(urunElemani.dataset.fiyat);
        const urunIsim = urunElemani.dataset.isim;

        // Sepet işlemleri burada yapılır...
        console.log(`Sepete Eklendi: ${urunIsim} (ID: ${urunId}) - Fiyat: ${urunFiyat} TL`);

        // Örneğin, sepetteki yazıyı güncelle
        const sepetDiv = document.getElementById('sepet');
        sepetDiv.textContent = `${urunIsim} sepete eklendi!`;
        sepetDiv.style.color = 'green';

        // Butonu devre dışı bırak (stok bitti varsayalım)
        this.disabled = true;
        this.textContent = "Stokta Yok";
        // Hatta CSS'deki data özelliğini de güncelleyebiliriz
        urunElemani.dataset.stok = "yok";
    });
});

[COLOR=rgb(97, 189, 109)`data-*` Kullanırken Dikkat Edilmesi Gerekenler[/COLOR]
  • Büyük Veriler İçin Değil: Çok uzun metinler veya kompleks nesneler için uygun değildir. Onun yerine `JSON.stringify()` ile string'e çevirip `data-*` özelliğinde saklayabilirsiniz, ancak çok büyük veriler için JavaScript değişkenleri daha iyidir.
  • Gizli/Önemli Veriler İçin Değil: `data-*` özellikleri tarayıcıda görüntü kaynağına bakan herkes tarafından görülebilir. Şifre, API anahtarı gibi hassas bilgileri ASLA burada saklamayın. 🔒
  • Semantik HTML'in Yerine Geçmez: `data-*`, mevcut HTML etiketlerinin (`<time>`, `<meta>`, vb.) anlamsal (semantic) görevlerinin yerini almaz. Onları tamamlayıcı olarak kullanın.

Özetle, `data-*` özellikleri, HTML ve JavaScript arasında köprü kurmak için hafif, esnek ve güçlü bir araçtır. Özellikle dinamik içerik üreten, kullanıcı etkileşimi yüksek uygulamalarda (alışveriş siteleri, görev yöneticileri, oyunlar vb.) işinizi inanılmaz kolaylaştırır.

Bir sonraki projenizde denemeyi unutmayın! Takıldığınız yer olursa aşağıya yorum bırakın, yardımcı olmaya çalışırım. Kodla kalın! 💻
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri