Tailwind CSS ile Modern ve Erişilebilir Açılır Menü Oluşturma Rehberi
Açılır menüler (dropdown menüler), web sitelerinde gezinmeyi kolaylaştıran ve kullanıcı arayüzünde düzen sağlayan temel bileşenlerden biridir. Bu makalede, modern ve hızlı bir şekilde arayüz geliştirmeyi sağlayan Tailwind CSS kullanarak, tamamen işlevsel, stil sahibi ve erişilebilir bir açılır menünün nasıl oluşturulacağını adım adım inceleyeceğiz. Tailwind CSS’in sunduğu esneklik ve utility-first yaklaşımı sayesinde, özel CSS yazmaya gerek kalmadan, sadece HTML sınıfları ile güçlü bir menü yapısı kuracağız.
Tailwind CSS Kurulumu ve Proje Yapılandırması
Bir Tailwind CSS projesi başlatmak, açılır menü oluşturma sürecinin ilk ve en önemli adımıdır. Bu bölümde, projenize Tailwind CSS’i nasıl entegre edeceğinizi ve temel yapılandırmaları nasıl yapacağınızı öğreneceksiniz.
NPM ile Tailwind CSS Entegrasyonu
Yeni bir projeye Tailwind CSS eklemek için öncelikle bir Node.js ortamına ihtiyacınız var. Proje klasörünüzde terminali açarak aşağıdaki komutları çalıştırın:
npm init -y
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
npm init -y: Yeni birpackage.jsondosyası oluşturur.npm install -D tailwindcss postcss autoprefixer: Tailwind CSS, PostCSS ve Autoprefixer bağımlılıklarını geliştirme bağımlılığı olarak yükler.npx tailwindcss init -p: Birtailwind.config.jsdosyası ve birpostcss.config.jsdosyası oluşturur.-pbayrağı PostCSS yapılandırmasını da ekler.
tailwind.config.js Dosyası Ayarları
tailwind.config.js dosyası, Tailwind CSS'in projenizde hangi dosyalardaki sınıfları tarayacağını ve CSS çıktısını buna göre oluşturacağını belirler. Bu, gereksiz CSS'in önlenmesi için kritik bir adımdır. content (eski adıyla purge) dizisini projenizin HTML veya JavaScript dosyalarını içerecek şekilde güncelleyin:
// tailwind.config.js
module.exports = {
content: [
"./index.html",
"./src/**/*.{vue,js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
Yukarıdaki örnekte, Tailwind CSS'in index.html ve src klasörü altındaki tüm .vue, .js, .ts, .jsx, .tsx dosyalarını tarayacağı belirtilmiştir. Kendi proje yapınıza göre bu yolu ayarlamanız gerekmektedir.
CSS Dosyanıza Tailwind Direktiflerini Ekleme
Tailwind'in temel stillerini projenize dahil etmek için ana CSS dosyanızı (genellikle src/input.css veya src/style.css gibi) oluşturun ve içine aşağıdaki direktifleri ekleyin:
/* src/input.css */
@tailwind base;
@tailwind components;
@tailwind utilities;
Bu direktifler, Tailwind'in temel stillerini, bileşen stillerini ve yardımcı sınıflarını projenize dahil eder. Son olarak, bu dosyayı derlemek ve kullanılabilir bir CSS çıktısı elde etmek için aşağıdaki komutu çalıştırın:
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch
Bu komut, src/input.css dosyasını okur, Tailwind sınıflarını işler ve derlenmiş CSS'i dist/output.css dosyasına yazar. --watch bayrağı sayesinde, dosyalardaki değişiklikleri otomatik olarak izler ve yeniden derler.
Temel Dropdown Menü HTML Yapısı
Bir açılır menü, genellikle bir tetikleyici (buton veya bağlantı) ve bu tetikleyiciye tıklandığında görünür hale gelen bir menü içeriğinden oluşur. Doğru HTML yapısı, hem işlevsellik hem de erişilebilirlik açısından hayati öneme sahiptir.
Menü Kapsayıcısını Oluşturma
Açılır menünün tüm bileşenlerini kapsayacak bir ana div etiketi ile başlayacağız. Bu kapsayıcı, menünün konumlandırılması ve görünürlüğünün yönetilmesi için temel bir referans noktası olacaktır.
relative sınıfı, içindeki menü içeriğinin (absolute konumlandırılacak olan) bu kapsayıcıya göre konumlandırılmasını sağlar. inline-block ve text-left ise menünün sayfa düzenindeki davranışını belirler.
Buton ve Menü Öğelerini Tanımlama
Menüyü tetikleyecek bir etiketi ve açıldığında görünecek menü öğelerini içeren bir
etiketi kullanacağız. Menü öğeleri genellikle bağlantılardan oluşur.
Bu yapı, bir buton ve başlangıçta hidden sınıfıyla gizlenmiş bir menü içeriği içerir. Menü içeriği role="menu" ve aria-labelledby gibi erişilebilirlik nitelikleri ile zenginleştirilmiştir.
Örnek HTML Şablonu
Yukarıdaki iki bölümü birleştirerek tam bir HTML şablonu elde edebiliriz. Bu şablon, bir açılır menünün temel iskeletini oluşturur ve Tailwind CSS sınıflarıyla stilize edilmeye hazırdır.
Tailwind CSS Dropdown
Bu şablonu bir .html dosyasına kaydederek ve Tailwind CSS derleyicisini çalıştırarak menünüzün stilize edilmiş halini görebilirsiniz.
Tailwind CSS Sınıfları ile Görsel Tasarım
Tailwind CSS'in gücü, önceden tanımlanmış yardımcı sınıflar aracılığıyla bileşenleri hızlıca stilize etme yeteneğinden gelir. Bu bölümde, açılır menümüzün butonunu, menü kutusunu ve menü öğelerini nasıl görselleştireceğimizi inceleyeceğiz.
Buton Stilini Belirleme
Açılır menüyü tetikleyen butonun stilini belirlemek için çeşitli Tailwind sınıflarını kullanabiliriz. Butonun modern ve kullanıcı dostu görünmesini sağlamak için aşağıdaki sınıfları uygulayabiliriz:
inline-flex justify-center: Buton içeriğini yatayda ortalar.w-full: Butonun kapsayıcısının tüm genişliğini kaplamasını sağlar.rounded-md border border-gray-300 shadow-sm: Kenar yuvarlaklığı, kenarlık ve hafif bir gölge ekler.px-4 py-2: Yatay ve dikey dolgu ekler.bg-white text-sm font-medium text-gray-700: Arka plan rengini, metin boyutunu, ağırlığını ve rengini belirler.hover:bg-gray-50: Fare üzerine gelindiğinde arka plan rengini değiştirir.focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500: Odaklandığında ana hat stilini kaldırır ve odak halkası ekler.
Açılır Menü Kutusunun Tasarımı
Menü içeriğini barındıran div etiketi, butonun altında ve genellikle sağa hizalı olarak görünmelidir. Ayrıca bir arka plan rengi, gölge ve kenarlık da içermelidir.
origin-top-right: Dönüşümün başlangıç noktasını sağ üst köşe olarak ayarlar, animasyonlar için faydalıdır.absolute right-0 mt-2: Menüyü butona göre konumlandırır (sağda ve 2 birim aşağıda).w-56: Menünün genişliğini ayarlar.rounded-md shadow-lg bg-white: Kenar yuvarlaklığı, büyük bir gölge ve beyaz arka plan rengi ekler.ring-1 ring-black ring-opacity-5: Hafif bir dış kenarlık (halka) ekler.focus:outline-none: Odaklandığında varsayılan ana hat stilini kaldırır.hidden: Başlangıçta menüyü gizler. JavaScript ile bu sınıf kaldırılıp eklenecektir.
Menü Öğelerinin Stilize Edilmesi
Menü içindeki her bir bağlantı ( veya ) için de stiller tanımlamamız gerekir. Bu stiller, öğelerin okunabilirliğini ve etkileşimini artıracaktır.
Hesap Ayarları
text-gray-700: Metin rengini belirler.block: Bağlantının tüm genişliği kaplamasını ve blok öğe gibi davranmasını sağlar.px-4 py-2: Yatay ve dikey dolgu ekler.text-sm: Metin boyutunu küçük yapar.hover:bg-gray-100: Fare üzerine gelindiğinde arka plan rengini hafifçe değiştirir, etkileşimi gösterir.
Bu sınıflar sayesinde, herhangi bir özel CSS yazmadan, estetik ve işlevsel bir açılır menü görünümü elde etmiş oluruz.
JavaScript ile Dinamik Etkileşim Ekleme
HTML ve Tailwind CSS ile menümüzün görsel yapısını oluşturduk. Ancak menünün açılıp kapanması gibi dinamik davranışları sağlamak için JavaScript'e ihtiyacımız var. Vanilla JavaScript kullanarak bu etkileşimleri ekleyeceğiz.
Menüyü Açma/Kapatma Mantığı
Menüyü açmak veya kapatmak için, menü içeriğini gizleyen hidden sınıfını ekleyip çıkarmamız yeterlidir. Bir olay dinleyicisi (event listener) ile buton tıklamalarını yakalayacağız.
// script.js
document.addEventListener('DOMContentLoaded', () => {
const menuButton = document.getElementById('menu-button');
const dropdownMenu = document.querySelector('[role="menu"]');
menuButton.addEventListener('click', () => {
const isExpanded = menuButton.getAttribute('aria-expanded') === 'true';
menuButton.setAttribute('aria-expanded', String(!isExpanded));
dropdownMenu.classList.toggle('hidden');
});
});
Bu kod parçası:
DOMContentLoaded: Sayfa tamamen yüklendiğinde kodun çalışmasını sağlar.menuButtonvedropdownMenu: İlgili HTML öğelerini seçer.menuButton.addEventListener('click', ...): Butona tıklandığında çalışacak bir fonksiyon tanımlar.aria-expandedniteliğini günceller: Bu, ekran okuyucular için menünün açık veya kapalı olduğunu belirtir.dropdownMenu.classList.toggle('hidden'): Menüdehiddensınıfını varsa kaldırır, yoksa ekler.
Bu JavaScript dosyasını HTML dosyanızın en altına, kapanış