Gereksinimler ve Ön Hazırlık
Bu projeyi başarıyla tamamlamak için bilgisayarınızda modern bir kod editörü (VS Code gibi) ve güncel bir web tarayıcısı (Chrome, Firefox veya Edge) bulunması yeterlidir. Herhangi bir sunucu tarafı dili veya JavaScript kütüphanesi gerekmemektedir; tamamen istemci tarafı (client-side) teknolojilerle çalışacağız.
- HTML5 ve CSS3 temel seviye bilgisi.
- Modern bir tarayıcı (CSS Grid ve Flexbox desteği için).
- Proje dosyalarınızı düzenli tutmak için bir klasör yapısı.
Adım 1: HTML Yapısını Oluşturma
Sekme menüsünün iskeletini oluştururken semantik HTML etiketlerini kullanmak, hem SEO uyumluluğu hem de ekran okuyucular için kritik öneme sahiptir. Burada input (radio) elemanlarını gizli birer anahtar olarak kullanarak, JavaScript kullanmadan sekmeler arası geçişi sağlayacağız.
Sekme 1
Sekme 2
Bu birinci sekmenin içeriğidir.
Bu ikinci sekmenin içeriğidir.
Yukarıdaki yapıda, her input elemanının benzersiz bir id değeri olduğuna dikkat edin. label etiketleri ise for özniteliği ile bu id değerlerine bağlanmıştır. Bu sayede kullanıcı etikete tıkladığında ilgili radyo butonu seçilmiş olur.
Adım 2: Temel CSS Stillerini Tanımlama
HTML yapısını oluşturduktan sonra, görünümü düzenlemek için CSS kullanacağız. Öncelikle radyo butonlarını gizlemeli ve sekmelerin yan yana dizilmesini sağlamalıyız. CSS değişkenleri (custom properties) kullanarak renkleri ve boyutları merkezi bir yerden yönetebiliriz.
:root {
--primary-color: #3498db;
--tab-bg: #f4f4f4;
}
.tabs input {
display: none; /* Radyo butonlarını gizle */
}
.tabs label {
padding: 10px 20px;
background: var(--tab-bg);
cursor: pointer;
display: inline-block;
}
Bu kod bloğu, menünün temel görsel yapısını oluşturur. display: none kullanımı, tarayıcının radyo butonlarını gizlemesini sağlar ancak işlevselliklerini korur. cursor: pointer özelliği ise kullanıcıya bu alanın tıklanabilir olduğunu hissettirir.
Adım 3: Sekme Geçişlerini CSS ile Yönetme
Sekmeler arası geçişi sağlamak için CSS'in :checked sözde sınıfını (pseudo-class) kullanacağız. Seçilen radyo butonuna bağlı olan içeriği göstermek için CSS seçicilerini (sibling selectors) kullanmak en etkili yöntemdir.
.content {
display: none;
padding: 20px;
border: 1px solid #ccc;
}
#tab1:checked ~ #content1,
#tab2:checked ~ #content2 {
display: block;
}
Burada ~ (genel kardeş seçici) kullanarak, seçili olan radyo butonundan sonra gelen ilgili içerik bloğunu display: block ile görünür hale getiriyoruz. Bu, JavaScript kullanmadan dinamik içerik yönetimi yapmanın en temiz yoludur.
Adım 4: Özelleştirme ve Tasarım İpuçları
Sekmelerinizi markanıza uygun hale getirmek için CSS geçişlerini (transitions) ve aktif durum stillerini ekleyebilirsiniz. Kullanıcı bir sekmeye tıkladığında, o sekmenin aktif olduğunu anlaması için görsel bir geri bildirim şarttır.
.tabs input:checked + label {
background: var(--primary-color);
color: white;
transition: all 0.3s ease;
}
Bu kod, sekme aktif olduğunda arka plan rengini ve yazı rengini değiştirir. transition özelliği ise bu değişimin aniden değil, yumuşak bir geçişle olmasını sağlar.
Adım 5: Karşılaştırmalı Yöntemler
Sekme menüsü oluştururken farklı yaklaşımlar mevcuttur. Aşağıdaki tablo, bu yöntemlerin avantaj ve dezavantajlarını özetlemektedir.
| Yöntem | Avantaj | Dezavantaj |
|---|---|---|
| CSS (Radio Hack) | Hızlı, hafif, JS gerektirmez. | Karmaşık içeriklerde yönetimi zor. |
| JavaScript (DOM) | Çok esnek, dinamik veri yükleme. | Daha fazla kod, performans maliyeti. |
Güvenlik Uyarısı: HTML ve CSS ile içerik gizlemek, verinin güvenli olduğu anlamına gelmez. Kullanıcı tarayıcı üzerinden "Ögeyi İncele" diyerek gizli içeriği her zaman görebilir. Hassas verileri asla bu yöntemle gizlemeyin; sunucu tarafı kontrollerini ihmal etmeyin.
Sıkça Sorulan Sorular
CSS ile yapılan sekmeler mobil uyumlu mudur?
Evet, Flexbox veya Grid kullanarak sekmeleri mobil cihazlarda alt alta gelecek şekilde kolayca düzenleyebilirsiniz. Medya sorguları (media queries) ile genişliği %100 yaparak mobil arayüzlere uyarlayabilirsiniz.
Neden JavaScript yerine CSS tercih etmeliyim?
Daha az kod yazmak, sayfa yüklenme hızını artırır ve tarayıcı üzerindeki yükü azaltır. Basit içerik yapıları için CSS en performanslı çözümdür.
Aynı sayfada birden fazla sekme grubu olabilir mi?
Evet, her sekme grubuna benzersiz bir name özniteliği vererek birbirinden bağımsız çalışmasını sağlayabilirsiniz.
Erişilebilirlik (Accessibility) için ne yapmalıyım?
Sekmelerin etrafına bir nav etiketi eklemek ve aria rolleri (role="tablist", role="tab") kullanmak, ekran okuyucuların yapıyı anlamasını kolaylaştırır.
Daha fazla sekme eklemek istersem ne yapmalıyım?
HTML kısmına yeni bir input ve label ekleyip, CSS kısmında ilgili id için yeni bir seçici kuralı tanımlamanız yeterlidir.
İleri Seviye CSS Animasyonları ile Geçişleri Yumuşatma
Sekmeler arası geçişleri daha profesyonel bir görünüme kavuşturmak için CSS transition ve opacity özelliklerinden yararlanabiliriz. Standart geçişler yerine, içeriğin hafifçe süzülerek gelmesi kullanıcı deneyimini doğrudan iyileştirir.
Aşağıdaki kod bloğu, mevcut sekme içeriğinize nasıl bir "fade-in" efekti ekleyebileceğinizi göstermektedir:
.tab-content {
display: none;
opacity: 0;
transition: opacity 0.4s ease-in-out;
}
input[type="radio"]:checked + label + .tab-content {
display: block;
opacity: 1;
}
Bu yöntem, içeriğin aniden belirmesi yerine yumuşak bir geçişle ekrana gelmesini sağlar. transition süresini 0.4s olarak belirlemek, modern web arayüzlerinde sıkça tercih edilen ideal bir hızdır.
Performans Optimizasyonu ve Kod Temizliği
Sekme menülerinde performans, özellikle çok sayıda sekme ve yoğun içerik barındıran sayfalar için kritiktir. CSS tabanlı yöntemler, tarayıcının JavaScript motorunu tetiklemediği için oldukça hızlı çalışır. Ancak, kodunuzu yönetilebilir kılmak için CSS değişkenlerini (CSS Variables) kullanmak en iyi pratiktir.
Aşağıdaki örnekte, renk paletinizi ve sekme boyutlarınızı tek bir noktadan nasıl yöneteceğinizi görebilirsiniz:
:root {
--tab-bg-color: #f4f4f4;
--tab-active-color: #007bff;
--tab-text-color: #333;
--transition-speed: 0.3s;
}
.tab-label {
background-color: var(--tab-bg-color);
color: var(--tab-text-color);
transition: background-color var(--transition-speed);
}
.tab-label:hover {
background-color: var(--tab-active-color);
color: white;
}
Bu yaklaşım, projenizin ilerleyen aşamalarında tasarımda değişiklik yapmak istediğinizde tüm CSS dosyasını taramak yerine sadece :root bloğundaki değişkenleri güncellemenize olanak tanır. Bu da hata payını düşürür ve geliştirme sürecini hızlandırır.
Hata Ayıklama (Debugging) İpuçları
Sekmeleriniz çalışmıyorsa veya içerik görünmüyorsa, genellikle sorun HTML yapısındaki id ve for eşleşmelerindedir. Hata ayıklama sürecinde şu adımları izleyebilirsiniz:
- Tarayıcı İnceleme Aracı: F12 tuşuna basarak "Elements" sekmesinden
inputbutonununcheckeddurumunu manuel olarak tetikleyin. - CSS Seçici Kontrolü:
input:checked + labelyapısının doğru çalıştığından emin olun. Eğer araya başka bir element girerse (örneğin birdiv), CSS seçiciniz çalışmayacaktır. - Z-Index Çakışmaları: Eğer sekmeleriniz başka elementlerin altında kalıyorsa,
z-indexdeğerini kontrol edin.
Özellikle + (bitişik kardeş seçici) kullanırken, HTML yapınızın tamamen düz bir hiyerarşide olduğundan emin olun. İç içe geçmiş karmaşık yapılar, CSS ile sekme yönetimini zorlaştırabilir.
Sonuç
Html & Css ile özelleştirilebilir bir açılır sekme menüsü yapmak, modern web geliştirme becerilerinizi geliştiren harika bir pratik çalışmasıdır. Bu rehberde, radyo butonlarını kullanarak nasıl etkileşimli bir yapı kuracağınızı, CSS değişkenleri ile tasarımı nasıl yöneteceğinizi ve erişilebilirlik standartlarını nasıl gözeteceğinizi öğrendiniz. Bir sonraki adım olarak, bu sekmelere CSS animasyonları ekleyerek geçişleri daha akıcı hale getirebilir veya JavaScript kullanarak dinamik içerik yükleme (AJAX) yöntemlerini bu yapının üzerine inşa edebilirsiniz.


Yorumlar (0)
Yorum Yaz