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.

Tailwind CSS ile design token'ları (renk, tipografi, spacing) merkezi olarak yönetmek

✖ Kapat
Duyuru
✖ Kapat
Duyuru

nexter

Üye
Katılım
14 Mart 2026
Mesajlar
60
Merhaba arkadaşlar, bugün sizlere özellikle büyük projelerde başımı çok ağrıtan bir sorunu ve onun Tailwind CSS ile nasıl üstesinden geldiğimi anlatacağım. Proje büyüdükçe, her yere dağılmış renk kodları, farklı font boyutları ve tutarsız boşluklar (spacing) yüzünden tasarım sistemi çorba oluyordu. Her yeni bileşen eklediğimde "Acaba bu mavi, diğer butondaki mavi miydi?" diye düşünmekten yorulmuştum. İşte bu noktada, Tailwind'in gücünü doğru kullanarak tüm bu design token'larımızı merkezi bir yerden yönetmenin temiz yolunu keşfettim.

🔥 Karşılaştığım Kaos Senaryosu

Projede 3 farklı ton mavi, 4 farklı gri ve her geliştiricinin kendi zevkine göre eklediği padding/margin değerleri vardı. Bir butonun rengini değiştirmek için onlarca yerde `bg-blue-600` yazan class'ı bulup teker teker `bg-blue-700` yapmak zorunda kalmıştım. Bu hatayı ilk gördüğümde kafayı yemiştim çünkü bu, sürdürülebilir bir yöntem değildi. Tailwind'in `tailwind.config.js` dosyasını sadece basit eklentiler için kullanıyormuşuz meğer!

🎨 Renk Paletini Merkezileştirmek

Çözüm, `tailwind.config.js` dosyasının `theme.extend` bölümünü aktif olarak kullanmaktan geçiyor. Burada kendi renk paletimizi, font ölçeklerimizi ve spacing değerlerimizi tanımlayabiliyoruz. Böylece projenin her yerinde aynı token'ları kullanabiliyoruz.

İşte benim kullandığım en temiz çözüm:

JavaScript:
// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      // 1. RENKLER: Tüm proje renkleri burada!
      colors: {
        'primary': {
          DEFAULT: '#3B82F6', // Ana birincil renk
          light: '#93C5FD',
          dark: '#1D4ED8',
        },
        'secondary': {
          DEFAULT: '#10B981', // Ana ikincil renk
          dark: '#047857',
        },
        'neutral': {
          50: '#F9FAFB',
          100: '#F3F4F6',
          // ... 900'a kadar tutarlı bir gri skalası
        },
        'danger': '#EF4444', // Hata/silme renkleri için token
        'warning': '#F59E0B',
      },

      // 2. TİPOGRAFİ: Font boyutu, ağırlığı ve satır yüksekliği
      fontSize: {
        'xs': ['0.75rem', { lineHeight: '1rem' }],
        'sm': ['0.875rem', { lineHeight: '1.25rem' }],
        'base': ['1rem', { lineHeight: '1.5rem' }],
        'lg': ['1.125rem', { lineHeight: '1.75rem' }],
        'xl': ['1.25rem', { lineHeight: '1.75rem' }],
        '2xl': ['1.5rem', { lineHeight: '2rem' }],
        // Özel token'larımız
        'display-lg': ['3rem', { lineHeight: '1', fontWeight: '700' }],
        'display-sm': ['2rem', { lineHeight: '2.5rem' }],
      },
      fontFamily: {
        'sans': ['Inter', 'system-ui', 'sans-serif'],
        'mono': ['JetBrains Mono', 'monospace'],
      },

      // 3. BOŞLUKLAR (Spacing): Tüm padding, margin, width, height değerleri
      spacing: {
        '0': '0px',
        '1': '0.25rem',
        '2': '0.5rem',
        '3': '0.75rem',
        '4': '1rem',
        '5': '1.25rem',
               '6': '1.5rem',
        '8': '2rem',
        '10': '2.5rem',
        '12': '3rem',
        '16': '4rem',
        // Özel spacing token'ları
        'section': '5rem', // Bölümler arası boşluk
        'container-padding': '1.5rem',
      },
      borderRadius: {
        'sm': '0.25rem',
        'DEFAULT': '0.5rem',
        'lg': '1rem',
        'full': '9999px',
      },
    },
  },
  plugins: [],
}

Bu yapıyı kurduktan sonra, artık her yerde tutarlı token'ları kullanabiliyorum. Örneğin:
- `bg-primary` yazdığımda her yerde aynı mavi çıkıyor.
- `text-display-sm` ile başlıklarım tutarlı oluyor.
- `mt-section` ile bölümler arasında hep aynı mesafe kalıyor.

⚙️ Pratikte Kullanım ve Avantajlar

Config dosyasını bu şekilde düzenledikten sonra, kullanımı inanılmaz basit ve keyifli hale geliyor. Bir bileşen oluştururken artık renk kodlarını değil, anlamlı isimleri düşünüyorum.

HTML:
<!-- Örnek bir kart bileşeni -->
<div class="p-6 bg-neutral-50 border border-neutral-200 rounded-lg shadow-sm">
  <h3 class="text-2xl font-bold text-primary-dark mb-4">Başlık</h3>
  <p class="text-base text-neutral-700 mb-6">
    Bu bir açıklama paragrafı. Tüm projede aynı font ve renk token'ları kullanılıyor.
  </p>
  <div class="flex gap-3">
    <button class="px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition">
      Onayla
    </button>
    <button class="px-4 py-2 bg-neutral-200 text-neutral-800 rounded hover:bg-neutral-300 transition">
      İptal
    </button>
  </div>
</div>

En büyük avantajı, tasarımda bir değişiklik yapmak gerektiğinde sadece tailwind.config.js dosyasındaki ilgili değeri değiştirerek tüm projeyi güncelleyebilmem. Örneğin, `primary` rengini değiştirmek istediğimde, config'deki HEX kodunu güncellemem yeterli. Artık `bg-primary`, `text-primary`, `border-primary` class'ını kullanan tüm elementler otomatik olarak yeni renge geçiyor. Bu, büyük bir zaman kazancı ve hata riskini sıfıra indiriyor.

📈 Sonuç ve Düşünceler

Bu yöntemi uyguladıktan sonra, frontend geliştirme sürecimizdeki tutarsızlıklar neredeyse sıfırlandı. Tasarımcılar da artık Figma'da aynı token isimlerini kullanmaya başladılar ki bu da tasarım-kod uyumunu mükemmel seviyeye çıkardı. Tailwind CSS, utility-first yapısıyla bazen dağınık gibi görünse de, config dosyası doğru yapılandırıldığında inanılmaz derecede merkezi ve güçlü bir tasarım sistemi aracına dönüşüyor.

Peki ya siz? Tailwind'de design token'larınızı nasıl yönetiyorsunuz? `tailwind.config.js` dosyanızda benim fark etmediğim daha farklı, kullanışlı özelleştirmeler yapıyor musunuz? Ya da bu merkezi yönetim fikrini farklı bir CSS metodolojisi ile (CSS-in-JS, Sass variables) nasıl çözüyorsunuz? Yorumlarda deneyimlerinizi paylaşın, tartışalım!
 

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