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'de responsive text sizing için line-height'ı da otomatik scale eden bir sistem kurmak

asteron

Üye
Katılım
14 Mart 2026
Mesajlar
28
Merhaba arkadaşlar, bugün başımı çok ağrıtan bir sorunu ve nasıl temiz bir çözüm bulduğumu anlatacağım. Tailwind CSS ile responsive font-size'ları ayarlamak harika, ama bir süre sonra fark ettim ki, font boyutu küçülüp büyüdükçe line-height değerleri de ona uyum sağlamazsa, tipografi berbat görünüyordu. Her breakpoint için ayrı ayrı line-height yazmak da işin tadını kaçırıyordu. İşte benim kullandığım en temiz çözüm.

🎯 Sorun Neydi?
Projemde, başlıkların mobilde `text-xl`, masaüstünde ise `text-4xl` olmasını istiyordum. Tailwind'de bunu `text-xl md:text-4xl` yaparak hallettim. Ancak, `text-xl` için varsayılan line-height 1.75rem iken, `text-4xl` için 2.25rem. Bu geçişte, satır yüksekliği oransal olarak font boyutuna göre ayarlanmadığı için, büyük ekranda metin blokları arasında devasa, orantısız boşluklar oluşuyordu. Her breakpoint için `leading-[deger]` yazmak sürdürülebilir değildi.

🚀 Çözüm: Özel Plugin ile Dinamik Leading
Tailwind'in en güçlü yanlarından biri, konfigürasyon ve plugin yazma esnekliği. Çözüm olarak, font-size utility'sini genişleten ve ona uygun bir line-height hesaplayıp atayan özel bir plugin yazdım. Plugin, temel olarak `text-{size}` class'ı oluşturulurken, ona `leading-[calculated-value]` class'ını da ekliyor.

JavaScript:
// tailwind.config.js
const plugin = require('tailwindcss/plugin');

module.exports = {
  theme: {
    // ... diğer theme ayarları
  },
  plugins: [
    plugin(function({ addUtilities, theme, e }) {
      const fontSizes = theme('fontSize');
      const newUtilities = {};

      Object.entries(fontSizes).forEach(([key, value]) => {
        // fontSize değeri array ise (örn: ['2rem', { lineHeight: '2.5rem' }])
        if (Array.isArray(value)) {
          const [fontSize, options] = value;
          // Eğer options'ta lineHeight zaten tanımlı değilse, biz hesaplayalım.
          if (!options.lineHeight) {
            const fontSizeNum = parseFloat(fontSize);
            const fontSizeUnit = fontSize.replace(/[0-9.]/g, '');

            // Temel bir çarpan belirleyelim. (Örnek: font-size  1.5)
            // Bu çarpanı ihtiyaca göre (başlık, paragraf) theme'den alabilirsiniz.
            const lineHeightMultiplier = 1.5;
            const calculatedLineHeight = `${fontSizeNum  lineHeightMultiplier}${fontSizeUnit}`;

            // Yeni utility'yi oluştur.
            newUtilities[`.${e(`text-${key}`)}`] = {
              'font-size': fontSize,
              'line-height': calculatedLineHeight,
            };
          }
        }
        // fontSize değeri string ise (örn: '1rem')
        else if (typeof value === 'string') {
          const fontSizeNum = parseFloat(value);
          const fontSizeUnit = value.replace(/[0-9.]/g, '');
          const lineHeightMultiplier = 1.5;
          const calculatedLineHeight = `${fontSizeNum  lineHeightMultiplier}${fontSizeUnit}`;

          newUtilities[`.${e(`text-${key}`)}`] = {
            'font-size': value,
            'line-height': calculatedLineHeight,
          };
        }
      });

      addUtilities(newUtilities, ['responsive']);
    }),
  ],
};

Bu plugin, `text-lg` gibi bir class oluşturulduğunda, ona otomatik olarak `line-height: calc(1.5 font-size)` değerini atıyor. Artık `text-xl md:text-4xl` yazdığınızda, line-height da font boyutuyla birlikte orantılı olarak büyüyecek.

💎 Daha İnce Ayar: Çarpanı Kontrol Edelim
Yukarıdaki örnek sabit 1.5 çarpanını kullanıyor. Ancak başlıklar ve paragraflar için farklı çarpanlar isteyebilirsiniz. Bunu theme extend ile yönetmek daha iyi. Örneğin, `theme` kısmına `lineHeightMultipliers` adında bir özellik ekleyip, plugin'de ona göre hareket edebilirsiniz.

JavaScript:
// tailwind.config.js - Theme kısmı
theme: {
  extend: {
    lineHeightMultipliers: {
      heading: 1.2,
      body: 1.6,
    },
    fontSize: {
      'display': ['4rem', { fontWeight: 'bold' }], // lineHeight otomatik eklenecek
      'lead': ['1.25rem'], // lineHeight otomatik eklenecek
    }
  }
},

// Plugin içinde, key'e göre multiplier seç (basit bir eşleme yapabilirsin)
// Örn: 'display' ve 'h1', 'h2' gibi key'ler için 'heading' çarpanını, diğerleri için 'body' çarpanını kullan.

📱 Sonuç ve Kapanış
Bu sistemi kurduktan sonra, responsive tipografi ile uğraşmak bir zevk haline geldi. Sadece font boyutuna odaklanıyorum, line-height arkadan sessizce onu takip ediyor. Elbette, çok özel durumlar için yine `leading-none` veya `leading-[3]` gibi utility'leri kullanmaya devam edebilirsiniz. Bu sistem, %80-90'lık kullanım senaryosunu kapsıyor.

Siz Tailwind'de tipografi için nasıl bir sistem kullanıyorsunuz? Benim gibi line-height ile boğuşan oldu mu? Ya da bu plugin'i geliştirmek için aklınıza gelen daha şık bir yöntem var mı? Yorumlarda buluş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