Menu

CSS Birimleri: rem, em ve px Farkı, Yüzde, vw ve vh

rem kök yazı boyutuna, em mevcut elementin yazı boyutuna göredir, px sabittir, % ise özelliğe bağlıdır. Her birimi iç içe bir demoda ölçülmüş halde, em'in neden katlandığını, hangisinin ne zaman kullanılacağını ve vw, vh ile dvh'nin nasıl çalıştığını gör.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

İç içe tek bir demoda rem ve em

rem, kök yazı boyutuna (<html> elementi, varsayılan 16px) göredir. em ise mevcut yazı boyutuna göredir; font-size için bu ebeveyninki demektir. Aynı class'ı üç kez iç içe koy, fark görünür:

Yazdırılan boyutlar tarayıcının hesapladıklarıdır. Her 1.25em ebeveynini çarpar: 20px, sonra 25px, sonra 31,25px. Her 1.25rem yalnızca köke bakar: 20px, 20px, 20px. em yazı boyutlarının iç içe listelerde ve menülerde kontrolden çıkmasının ve çoğu sitenin yazı boyutlarını rem ile vermesinin nedeni bu katlanmadır.

Her birim neye göre

BirimNeye göreVarsayılan olarak 1 birim
pxhiçbir şeye (bir CSS pikseli)1px
remkök elementin (html) yazı boyutuna16px
emelementin yazı boyutuna; font-size'ın kendisi için ebeveyninkineen üst düzeyde 16px
%özelliğe bağlı (aşağıya bak)
vw / vhviewport genişliğinin / yüksekliğinin %1'i
dvh, svh, lvhdinamik, küçük ya da büyük viewport yüksekliğinin %1'i
vmin / vmaxviewport'un küçük / büyük kenarının %1'i
chmevcut fonttaki "0" karakterinin genişliğiyaklaşık yarım em
exmevcut fontun x yüksekliğiyaklaşık yarım em

Bir CSS pikseli bir cihaz pikseli değildir: 3x ekranlı bir telefonda 1px 3 cihaz pikseli genişliğindedir. Ekranlar arasında görsel olarak kabaca aynı boyutta kalır; px'in kenarlıklar ve gölgeler için hâlâ uygun olmasının nedeni budur.

Metinle ölçeklenen boşluklar için em

em yalnızca yazı boyutları için değildir. padding, margin, width ya da border-radius üzerinde "bu elementin yazı boyutunun katı" demektir. Bu, tek bir buton class'ını her boyutta çalıştırır:

Her butonun padding'i dikeyde yazı boyutunun yarısı, yatayda bir yazı boyutu kadardır, bu yüzden üçü aynı butonun üç boyutu gibi görünür. px padding ile her boyut için ayrı bir padding kuralına ihtiyacın olurdu.

Butonların varsayılan olarak sayfanın yazı boyutunu miras almadığına dikkat et (tarayıcılar form kontrollerine kendi boyutlarını verir), bu yüzden buradaki ortadaki buton Chrome'da 16px değil 13,33px'tir. Sayfayla eşleşmelerini istediğinde butonlara ve input'lara font: inherit ekle.

Yüzdeler: özelliğe bağlıdır

%'nin tek bir anlamı yoktur. Her özellik neyin yüzdesi olduğunu söyler:

Özellik% neye göre
width, max-width, left, rightebeveynin (kapsayıcı bloğun) genişliğine
height, top, bottomebeveynin yüksekliğine, yalnızca ebeveynin ayarlı bir yüksekliği varsa
padding, margin (dört kenarın hepsi)ebeveynin genişliğine
font-sizeebeveynin yazı boyutuna (150% = 1.5em)
line-heightelementin kendi yazı boyutuna
transform: translate()elementin kendi boyutuna

width: 50% 200px'tir, ebeveynin yarısı. padding-top: 5% 20px'tir: ebeveynin yüksekliğinin değil genişliğinin %5'i. height: 50% ise hiçbir şey yapmaz, çünkü ebeveynin ayarlı bir yüksekliği yoktur, bu yüzden çocuk yalnızca metni artı o padding kadar uzundur. Bu kuralı width ve height sayfası ayrıntılı anlatıyor.

vw, vh ve mobil adres çubuğu

1vw viewport genişliğinin, 1vh ise yüksekliğinin %1'idir. Tam ekran bölümler ve akışkan boyutlar (çoğunlukla clamp() içinde) için kullanışlıdırlar. Telefonlarda vh'nin bir püf noktası vardır: tarayıcının adres çubuğu kaydırdıkça kayarak girip çıkar ve 100vh çubuk olmadan olan yüksekliktir, bu yüzden height: 100vh olan bir hero, çubuk görünürken alttan kesilir. Yeni birimler bunu çözer:

BirimKullanılan yükseklik
100vhçoğu mobil tarayıcıda büyük viewport (çubuklar gizli)
100svhküçük viewport (çubuklar görünür): her zaman sığar
100lvhaçıkça büyük viewport
100dvhdinamik viewport: çubuklar hareket ettikçe değişir
.hero {
  min-height: 100vh;  /* fallback for older browsers */
  min-height: 100svh; /* fits the screen even with the address bar visible */
}

vw'nin de kendi püf noktası var: dikey bir kaydırma çubuğu yer kapladığında (Windows'ta olduğu gibi) 100vw onun genişliğini de içerir, bu yüzden width: 100vw sayfadan geniş olup yatay bir kaydırma çubuğu ekleyebilir. "Ebeveynin tam genişliği" için width: 100% kullan.

Okunaklı satır uzunluğu için ch

ch, "0" karakterinin genişliğidir, bu yüzden max-width: 65ch bir paragrafı her yazı boyutunda satır başına kabaca 65 karakterle, yani rahat bir okuma uzunluğuyla sınırlar:

Hangi birimi kullanmalı

Ne içinKullanNeden
Yazı boyutlarıremHer yerde tutarlı, okuyucunun yazı boyutu ayarına uyar
Bileşenlerdeki padding ve boşluklarrem ya da emBileşenin kendi metniyle büyümesi gerektiğinde em
Kenarlıklar, ince çizgiler, gölgelerpxHer yazı boyutunda ince kalmalı
Düzen genişlikleri%, fr, rem ya da ch cinsinden max-widthKapsayıcıyı takip eder, satır uzunluğunu sınırlar
Tam ekran bölümlersvh / dvh (bir vh yedeğiyle)Mobil adres çubuklarını hesaba katar
Akışkan yazırem ve vw karıştıran clamp()Ekranla birlikte sınırlar içinde büyür

rem neden okuyuculara uyar, px neden uymaz

Tarayıcılarda, daha büyük metne ihtiyaç duyan insanların kullandığı varsayılan yazı boyutu ayarı vardır. Bu ayar kök yazı boyutunu değiştirir, bu yüzden rem ve em cinsinden her şey onunla büyür. font-size: 14px ise okuyucu ne seçerse seçsin 14px kalır. Tarayıcı yakınlaştırması px'i de ölçekler, ama birçok okuyucunun güvendiği yazı boyutu ayarıdır. Yazı boyutlarını rem ile vermenin asıl nedeni budur.

Bazı siteler 1rem 10px'e eşit olsun ve hesap kolaylaşsın diye html { font-size: 62.5%; } ayarlar. Bu yine de okuyucunun ayarına uyar (seçtiği değerin %62,5'i), ama body üzerine okunaklı bir font-size vermeyi unutma, yoksa kendi boyutu olmayan her element 10px metin gösterir.

Sık yapılan hatalar

  • İç içe elementlerde em yazı boyutları. Her seviyede çarpılırlar. Yazı boyutları için rem kullan.
  • Hiçbir şey yapmayan height: 50%. Yüzdelik bir yüksekliğin çalışması için ebeveynin ayarlı bir yüksekliği olmalıdır.
  • padding-top: 10%'un ebeveynin yüksekliğini takip etmesini beklemek. Dikey padding ve margin yüzdeleri ebeveynin genişliğini kullanır.
  • Yatay kaydırma çubuğuna yol açan width: 100vw. Kaydırma çubuğunu da içerir. 100% kullan.
  • Telefonlarda kesilen height: 100vh. 100svh ya da 100dvh kullan.
  • html { font-size: 12px } ayarlamak. Kökteki bir px değeri bütün sayfa için okuyucunun yazı boyutu ayarını ezer. Köke dokunma ya da bir yüzde kullan.

Sıkça Sorulan Sorular

rem ile em arasındaki fark nedir?

rem, kök elementin (<html>) yazı boyutuna göredir, bu yüzden 1.5rem sayfanın her yerinde aynı boyuttadır. em ise elementin kendi yazı boyutuna göredir (font-size için ebeveyninkine), bu yüzden elementler iç içe olduğunda katlanır.

1rem kaç pikseldir?

Varsayılan olarak 16px, çünkü tarayıcılar kök yazı boyutunu 16px'e ayarlar. Kullanıcı tarayıcı ayarlarında varsayılan yazı boyutunu büyütürse ya da sen html { font-size: ... } ayarlarsan 1rem de onunla değişir.

Yazı boyutu için rem mi px mi kullanmalıyım?

Yazı boyutları için rem kullan. Okuyucunun tarayıcıdaki varsayılan yazı boyutu ayarına uyar, px ise onu yok sayar. Tarayıcı yakınlaştırması ikisini de ölçekler, ama her okuyucu yakınlaştırma kullanmaz.

rem yerine ne zaman em kullanmalıyım?

Bir butonun padding'i ya da metnin yanındaki bir ikonun boyutu gibi elementin kendi metniyle ölçeklenmesi gereken boşluklar için em kullan. Aynı class bu durumda her yazı boyutunda doğru görünür. Hiçbir şey katlanmasın diye yazı boyutları ve sayfa düzeyindeki boşluklar için rem kullan.

100vh ile 100dvh arasındaki fark nedir?

Mobil tarayıcılarda 100vh, adres çubuğu gizliyken olan yüksekliktir, bu yüzden çubuk görünürken 100vh'lik bir bölüm görünür ekrandan uzundur. 100dvh (dinamik viewport yüksekliği) çubuk belirip kayboldukça onu takip eder, 100svh ise her zaman küçük olan yüksekliktir.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA