İçeriğe atla

CSS

CSS Birimlerinde Ustalaşmak: REM ve EM Kullanmanın Faydaları

5 min read

CSS Birimlerinde Ustalaşmak: REM ve EM Kullanmanın Faydaları

Web geliştirmenin ilk günlerinde, piksel (px) CSS boyutlandırmasının tartışmasız kralıydı. Geliştiriciler, her butonun, başlığın ve kapsayıcının (container) genişliğini ve yüksekliğini kesin bir piksel sayısına sabitleyerek tasarımlar yapardı. Bu yaklaşım, herkesin internette benzer çözünürlüklere sahip masaüstü monitörlerle gezindiği dönemlerde mükemmel çalışıyordu.

Ancak modern web çok farklı bir manzaraya sahip. Kullanıcılar web sitelerine devasa 4K monitörlerden, küçücük akıllı telefonlardan, katlanabilir cihazlardan ve akıllı saatlerden erişiyor. Dahası, web erişilebilirliği (accessibility) haklı olarak ön plana çıktı; bu da web sitelerinin, okunabilirliği artırmak için tarayıcısının varsayılan yazı tipi boyutunu manuel olarak büyüten kullanıcılara dinamik olarak uyum sağlaması gerektiği anlamına geliyor.

İşte tam bu noktada, rem (Root EM) ve em gibi göreceli (relative) CSS birimleri kesinlikle vazgeçilmez hale gelir. Sadece statik piksellere güvenmek, katı ve erişilemez tasarımlar yaratır. rem ve em birimlerinde ustalaşarak akıcı, ölçeklenebilir ve son derece erişilebilir web arayüzleri oluşturma yeteneğinin kilidini açarsınız.

Bu kapsamlı rehberde, bu birimlerin tam olarak ne olduğunu, nasıl farklılaştıklarını, onları kullanmanın derin faydalarını ve modern frontend (ön yüz) geliştirmede en iyi uygulama yöntemlerini keşfedeceğiz.


Piksellerle (px) İlgili Temel Sorun

Göreceli birimlere dalmadan önce, piksellerden neden uzaklaşmamız gerektiğini anlamak çok önemlidir.

Piksel (px), CSS'te mutlak (absolute) bir ölçü birimidir. font-size: 16px; tanımlaması yaptığınızda, tarayıcıya kullanıcının ekran boyutu veya kişisel tercihlerinden bağımsız olarak o metni tam olarak 16 piksel olarak işlemesini söylersiniz.

Erişilebilirlik Sorunu: Piksellerin temel sorunu erişilebilirliktir. Görme engelli veya az gören kullanıcılar, rahat okuyabilmek için tarayıcılarının varsayılan yazı tipi boyutunu (genellikle 16px'tir) 20px veya 24px gibi daha büyük bir değere değiştirirler. Web sitenizin tipografisini px olarak sabitlerseniz, kullanıcının tarayıcı ayarlarını ezmiş (geçersiz kılmış) olursunuz. Web siteniz inatla 16px'te kalır ve kullanıcıyı sayfayı manuel olarak yakınlaştırmaya (zoom) zorlar, bu da genellikle sayfa düzenini (layout) bozar.

Buna karşılık, göreceli birimler kullanıcının tercihlerine saygı duyar ve uyumlu bir şekilde büyür veya küçülür.


REM (Root EM) Birimini Anlamak

rem terimi "root em" (kök em) anlamına gelir. Belgenin kök öğesi (root element) olan <html> etiketinin yazı tipi boyutuna göre ölçeklenen göreceli bir ölçü birimidir.

Neredeyse tüm modern web tarayıcılarında varsayılan olarak kök yazı tipi boyutu tam olarak 16px'tir.

Dolayısıyla (varsayılan ayarlarda):

  • 1rem = 16px
  • 2rem = 32px
  • 0.5rem = 8px
  • 1.5rem = 24px

REM Neden Bu Kadar Güçlü?

rem'in dehası, öngörülebilirliği ve erişilebilirliğe duyduğu saygıda yatar.

Bir kullanıcı tarayıcı ayarlarına gidip varsayılan yazı tipi boyutunu 16px'ten 24px'e çıkarırsa, kök (root) yazı tipi boyutu değişir. rem doğrudan kök öğeye bağlı olduğu için, web sitenizdeki rem kullanan her bir öğe orantılı olarak büyür.

Daha önce 32px olan 2rem başlığınız otomatik olarak 48px (2 * 24px) olarak hesaplanır. Web siteniz mükemmel bir şekilde orantılı kalır ve daha da önemlisi, kullanıcı için kusursuz derecede okunaklı hale gelir.

REM İçin En İyi Kullanım Senaryoları:

  • Tipografi: font-size, line-height ve letter-spacing (harf aralığı) için her zaman rem kullanın. Bu, metninizin tamamen erişilebilir olmasını sağlar.
  • Genel Boşluklar (Global Spacing): Grid (ızgara) boşlukları, ana kapsayıcı dolguları (padding) ve bölüm kenar boşlukları (margin) gibi makro düzen özellikleri için rem kullanın. Bu, sitenizdeki beyaz alanların metin boyutuyla orantılı olarak nefes almasını sağlar.

EM Birimini Anlamak

rem kök <html> öğesine göreceli iken, em doğrudan ebeveyn (parent) öğesinin yazı tipi boyutuna görecelidir.

Eğer bir ebeveyn kapsayıcının yazı tipi boyutu 20px ise ve bir alt (child) öğenin yazı tipi boyutunu 2em olarak ayarlarsanız, o alt öğe 40px olarak görünür.

Katlanma Etkisi (Bileşik Etki - The EM Trap)

em hakkında anlaşılması gereken en önemli özellik, katlanarak (bileşik şekilde) artmasıdır. Kendi ebeveynine baktığı için, em ile boyutlandırılmış öğeleri iç içe yerleştirmek (nesting), üstel ve beklenmedik bir büyümeye veya küçülmeye yol açabilir.

Şu HTML yapısını düşünün:

<div class="parent">
  <div class="child">
    <div class="grandchild">Merhaba</div>
  </div>
</div>

Ve bu CSS ile:

.parent { font-size: 1.5em; } /* 1.5 * 16px (varsayılan) = 24px */
.child { font-size: 1.5em; } /* 1.5 * 24px = 36px */
.grandchild { font-size: 1.5em; } /* 1.5 * 36px = 54px */

Görebildiğiniz gibi, metin boyutu hızla kontrolden çıkıyor. Bu katlanma etkisi, em'i genel (global) tipografi için yönetmesi son derece zor bir birim haline getirir. Geliştiricilerin yazı tipi boyutları için rem'i büyük ölçüde tercih etmesinin nedeni budur.

EM'nin Gerçek Gücü: Modüler Bileşenler (Components)

Eğer em bu kadar zahmetliyse, neden hiç kullanalım? Cevap, modüler, izole bileşen tasarımında yatmaktadır.

em, ebeveynin yazı tipi boyutuna göreceli olduğundan, öğeleri metnin etrafında (örneğin butonlar, rozetler ve ipucu kutularındaki dolgular, kenar boşlukları ve kenar yumuşatmaları / border-radius) boyutlandırmak için inanılmaz derecede güçlüdür.

Bir buton tasarladığınızı hayal edin:

.button {
  font-size: 1rem;
  padding: 0.5em 1em;
  border-radius: 0.25em;
}

.button-large {
  font-size: 1.5rem;
}

Dolgu (padding) ve köşe yuvarlatma (border-radius) için em kullanarak, bu değerleri butonun font-size'ına içsel olarak bağlamış olursunuz. Bir .button-large (büyük buton) oluşturmak isterseniz, sadece font-size'ı değiştirmeniz yeterlidir. Padding ve border-radius, daha büyük metne uyacak şekilde otomatik olarak hesaplanacak ve mükemmel bir şekilde büyüyecektir. Her buton boyutu varyantı için padding değerini manuel olarak yeniden tanımlamanıza gerek kalmaz.

EM İçin En İyi Kullanım Senaryoları:

  • Bileşen İçi Boşluklar (Padding & Margins): İçlerindeki boşluğun içindeki metne orantılı olarak ölçeklenmesi gereken butonlar, uyarı kutuları (alerts) ve rozetler (badges).
  • SVG İkonları: Metinle aynı hizada bulunan SVG ikonlarının boyutunu 1em olarak ayarlarsanız, ikon her zaman yanındaki metinle tam olarak aynı boyutta kalacaktır.

REM vs. EM: Hızlı Karar Rehberi

Hangi birimi ne zaman kullanacağınızı özetlemek için şu temel kuralı aklınızda bulundurun:

  1. Genel (Global) Boyutlandırma İçin REM Kullanın: Tüm sayfa düzeni boyunca tutarlı kalması gereken her şey rem kullanmalıdır. Buna yazı tipi boyutları, genel boşluklar (bölümler arası margin'ler) ve grid tanımları dahildir. rem sizi o korkunç "katlanma" (compounding) kabusundan korur.
  2. Yerel (Local) Boyutlandırma İçin EM Kullanın: Hemen etrafındaki metinle orantılı olarak ölçeklenmesi gereken her şey em kullanmalıdır. Buna bir butonun içindeki dolgu, bir ikon ile metin arasındaki boşluk veya özel bir SVG madde işaretinin (bullet point) boyutu dahildir.
  3. PX Birimini İdareli Kullanın: Pikseller, asla ve asla ölçeklenmemesi gereken şeyler için ayrılmalıdır. Örnekler arasında 1px kalınlığında sürekli (solid) bir kenarlık, kesin kutu gölgesi (box-shadow) kaydırmaları veya oldukça spesifik bir görselin maksimum genişliğini (max-width) tanımlamak yer alır.

"Yüzde 62.5" Hilesini Uygulamak (Ve Neden Dikkatli Olmalısınız)

Tarihsel olarak, rem değerlerini hesaplamak geliştiriciler için tam bir baş ağrısıydı. 14px'lik bir yazı tipi boyutu istiyorsanız, 14'ü 16'ya bölmeniz gerekiyordu, bu da 0.875rem sonucunu veriyordu. Matematiği kolaylaştırmak için popüler bir hile ortaya çıktı:

html {
  font-size: 62.5%;
}

Tarayıcı varsayılanı 16px olduğu için, 16'nın %62.5'i tam olarak 10'dur. Kök yazı tipi boyutunu 10px olarak ayarlayarak, matematik inanılmaz derecede basit hale gelir:

  • 1.4rem = 14px
  • 2.4rem = 24px
  • 3.2rem = 32px

Kullanmalı mısınız? Matematiği kolaylaştırmasına rağmen, modern CSS geliştirme süreci artık matematiği sizin yerinize halleden ön işlemcilere (SASS/LESS), CSS değişkenlerine veya Tailwind CSS gibi fayda odaklı (utility-first) framework'lere büyük ölçüde dayanmaktadır. Dahası, kök yazı tipi boyutunu bir yüzde ile ezmek (override), kökün 16px olduğunu varsayan üçüncü taraf eklentilerde (plugins) bazen beklenmedik davranışlara neden olabilir.

Eğer tamamen saf (vanilla) CSS projesi üzerinde çalışıyorsanız %62.5 hilesi hala geçerli bir yöntemdir, ancak modern geliştirme süreçleri (stack) için varsayılan %100 (16px) kök boyutuna bağlı kalmak ve araçlarınızın (tooling) kesirli rem değerlerini halletmesine izin vermek genellikle daha güvenlidir.

Sonuç

Piksellerden rem ve em gibi göreceli birimlere geçiş, her frontend (ön yüz) geliştiricisi için önemli bir dönüm noktasıdır. Boyutlar hakkında nasıl düşündüğünüze dair hafif bir paradigma değişikliği gerektirse de, karşılığı muazzamdır.

Öngörülebilir genel tipografi ve düzen (layout) için rem'i, modüler ve kendi kendine yeten UI bileşenleri için ise em'i stratejik olarak birleştirerek, daha temiz ve daha sürdürülebilir CSS yazacaksınız. En önemlisi, cihazları veya tarayıcı ayarları ne olursa olsun, her bir kullanıcı için kusursuz görünen ve çalışan kapsayıcı, erişilebilir web deneyimleri yaratacaksınız.

Buy me a coffee