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'te @apply kullanmanın spesifikity (özgüllük) savaşlarına yol açması ve bunun yerine component sınıfları oluşturma yöntemim

webnix

Üye
Katılım
14 Mart 2026
Mesajlar
7
Merhaba arkadaşlar, bugün başımı çok ağrıtan bir Tailwind CSS sorunundan bahsedeceğim. Uzun süredir Tailwind kullanıyorum ve gerçekten iş akışını hızlandırdığını düşünüyorum. Ancak, özellikle büyük projelerde, sık kullandığım stil gruplarını tekrar tekrar yazmaktan sıkılmış ve @apply direktifini kurtarıcı olarak görmeye başlamıştım. Ta ki, spesifikity (özgüllük) savaşları yüzünden stillerimin birbirini ezdiğini fark edene kadar! Bu hatayı ilk gördüğümde kafayı yemiştim, çünkü neden bazı stillerin uygulanmadığını anlamak gerçekten zaman aldı.

🔥 @apply ile Başımıza Gelenler

Projemde, bir buton için temel stilleri bir CSS sınıfında toplamak istedim. İlk başta mantıklı görünen şeyi yaptım ve @apply kullandım. Ancak, daha sonra bu butona farklı durumlar (hover, focus) veya farklı varyantlar (primary, secondary) eklemeye çalıştığımda işler karıştı. Tailwind'in utility class'ları, benim @apply ile oluşturduğum sınıftan daha yüksek önceliğe (spesifikity) sahip olabiliyordu. Bu da, HTML'de doğrudan eklediğim bg-blue-500 gibi bir class'ın, @apply ile tanımladığım arkaplan rengini ezip geçmesine neden oldu. Sorunu anlamak için tarayıcı geliştirici araçlarında saatler harcadım diyebilirim.

💡 Çözüm: Component Sınıfları ile Yönetim

Bu karmaşadan kurtulmak için, @apply kullanmaktan vazgeçtim ve daha temiz, daha yönetilebilir bir yönteme geçtim: Component CSS Sınıfları oluşturmak. Bu yöntemde, her bir bileşenim (button, card, alert) için ayrı bir CSS dosyası veya modülü oluşturuyorum. Ancak, stilleri yazmak için saf CSS kullanmıyorum. Onun yerine, Tailwind'in temel utility'lerini referans alan özel CSS değişkenleri ve basit class'lar tanımlıyorum. İşte benim kullandığım en temiz çözüm:

CSS:
/ components/button.css /
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: 600;
  border-radius: 0.375rem; / rounded-md /
  padding: 0.5rem 1rem; / px-4 py-2 /
  border: 1px solid transparent;
  transition-property: color, background-color, border-color;
  transition-duration: 150ms;
}

/ Varyantlar, utility class'lar ile çakışmayacak şekilde /
.btn--primary {
  background-color: var(--color-blue-600);
  color: white;
}
.btn--primary:hover {
  background-color: var(--color-blue-700);
}

.btn--secondary {
  background-color: var(--color-gray-200);
  color: var(--color-gray-800);
}
.btn--secondary:hover {
  background-color: var(--color-gray-300);
}

Peki, --color-blue-600 gibi değişkenleri nereden alıyorum? Tailwind'in konfigürasyon dosyasından (tailwind.config.js) renk paletimi export edip, bunları global CSS değişkeni olarak tanımlıyorum:

JavaScript:
// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        // Özel renk paletiniz
      }
    }
  },
  // Önemli: Renkleri JS objesi olarak dışa aktar
}
// Bu konfigürasyondaki renkleri bir script ile CSS değişkenlerine dönüştürebilirsiniz.

🎯 Avantajları ve Sonuç

Bu yönteme geçtikten sonra fark ettiğim en büyük avantajlar:
1. Spesifikity Savaşları Bitti: Artık .btn--primary class'ımın önceliği çok net. Utility class'lar ile çakışma ihtimali neredeyse yok.
2. Daha Temiz HTML: Button etiketimde artık uzun uzun Tailwind class listesi yerine sadece class="btn btn--primary" yazıyorum.
3. Bakım Kolaylığı: Bir bileşenin stilini değiştirmek için tek bir CSS dosyasına gidiyorum. Tüm projede aynı butonu aramama gerek kalmadı.
4. Tailwind'den Kopmadan: Hala Tailwind'in spacing scale'ini (0.375rem, 0.5rem) ve renk paletini kullanıyorum, sadece onları daha kontrollü bir şekilde uyguluyorum.

Tabii ki, bu yöntem saf utility-first felsefesinden biraz sapmak anlamına geliyor. Ancak özellikle büyük ekip projelerinde veya tasarım sistemi oluşturduğunuz durumlarda, bu kontrollü yaklaşım bana göre çok daha sürdürülebilir.

Siz Tailwind projelerinizde sık kullanılan bileşenleri nasıl yönetiyorsunuz? @apply kullanırken benim yaşadığıma benzer spesifikity sorunlarıyla karşılaştınız mı? Yoksa sizin farklı, daha pratik bir çözümünüz var mı? 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