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.

Next.js'te _app.js ve _document.js Dosyalarını Özelleştirerek Global Font ve CSS Değişkenlerini Eklemek

✖ Kapat
Duyuru
✖ Kapat
Duyuru

asternix

Okur Üye
Üye
Katılım
14 Mart 2026
Mesajlar
62
Merhaba arkadaşlar, bugün başımı çok ağrıtan bir konuyu, Next.js projelerinde global stil ve font yönetimini nasıl temiz bir şekilde hallettiğimi anlatacağım. Özellikle proje büyüdükçe, her component'te aynı font'u import etmek veya CSS değişkenlerini tekrar tekrar tanımlamak can sıkıcı bir hal alıyordu. İşte benim kullandığım en temiz çözüm: _app.js ve _document.js dosyalarını özelleştirmek.

🔥 Karşılaştığım Sorun

Next.js'te her sayfaya özel font veya global CSS değişkenleri eklemek istediğimde, ilk başta her `pages/` dizinindeki component'lerin `head` kısmına `<link>` tag'leri ekliyordum. Bu hem tekrar eden kod demekti hem de Google Fonts gibi bir kaynaktan font çektiğimde, performans açısından optimal olmadığını fark ettim. Ayrıca, tema renkleri gibi CSS değişkenlerini her stil dosyasında yeniden tanımlamak yönetilemez bir hal almıştı.

⚙️ Çözüm: _app.js ve _document.js'nin Gücü

Next.js, `pages/_app.js` dosyasını tüm sayfaların sarmalayıcısı (wrapper), `pages/_document.js` dosyasını ise HTML belgesinin iskeleti olarak kullanır. Bu iki dosyayı özelleştirerek, tüm uygulama genelinde geçerli stilleri ve fontları merkezi bir noktadan yönetebilirsiniz.

İlk adım, global stillerimiz için bir CSS dosyası oluşturmak. Ben `styles/globals.css` yolunu kullanıyorum. Burada CSS değişkenlerimi (custom properties) tanımlıyorum.

CSS:
:root {
  --primary-color: #0070f3;
  --secondary-color: #1a202c;
  --background-light: #f7fafc;
  --text-primary: #2d3748;
  --font-heading: 'Inter', -apple-system, sans-serif;
  --font-body: 'Open Sans', system-ui, sans-serif;
}

body {
  margin: 0;
  font-family: var(--font-body);
  color: var(--text-primary);
  background-color: var(--background-light);
}

h1, h2, h3, h4 {
  font-family: var(--font-heading);
}

📄 _app.js ile Global Stilleri Entegre Etmek

`_app.js` dosyası, her sayfa render edilmeden önce çalışır. Buraya global CSS dosyamızı import ederek, stil değişkenlerimizin her yerde erişilebilir olmasını sağlıyoruz.

JavaScript:
import '../styles/globals.css'

function MyApp({ Component, pageProps }) {
  return <Component {...pageProps} />
}

export default MyApp

Bu kadar! Artık tüm component'lerimde `var(--primary-color)` gibi değişkenleri kullanabilirim.

🔤 _document.js ile Fontları Optimize Etmek

Asıl sihir burada. Google Fonts gibi harici fontları, performansı artırmak için `_document.js` içinde preload edebiliriz. Bu, tarayıcıya fontu daha erken yüklemesini söyler, böylece "flash of unstyled text" (FOUT) sorununu azaltır.

JavaScript:
import { Html, Head, Main, NextScript } from 'next/document'

export default function Document() {
  return (
    <Html lang="tr">
      <Head>
        {/ Preconnect for performance /}
        <link rel="preconnect" href="https://fonts.googleapis.com" />
        <link rel="preconnect" href="https://fonts.gstatic.com" crossOrigin="anonymous" />

        {/ Google Fonts - Inter & Open Sans /}
        <link
          href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Open+Sans:wght@400;600&display=swap"
          rel="stylesheet"
        />

        {/ Favicon ve diğer meta tag'ler buraya gelebilir /}
        <link rel="icon" href="/favicon.ico" />
      </Head>
      <body>
        <Main />
        <NextScript />
      </body>
    </Html>
  )
}

Bu yapılandırma ile, fontlar en verimli şekilde yüklenir ve `globals.css` dosyasında tanımladığımız --font-heading ve --font-body değişkenleri hemen kullanılabilir hale gelir.

🎯 Sonuç ve Performans Kazanımları

Bu yöntemi uyguladıktan sonra, stil ve font yönetimim merkezileşti ve inanılmaz derecede kolaylaştı. Bir rengi değiştirmem gerektiğinde sadece `globals.css` dosyasındaki değişkeni güncelliyorum. Ayrıca, Lighthouse performans skorumda, font yükleme optimizasyonundan dolayı gözle görülür bir artış oldu.

Siz Next.js projelerinizde global stilleri ve fontları nasıl yönetiyorsunuz? _app.js ve _document.js dışında farklı, daha efektif bir yöntem kullanan 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