Bazı mükemmel tarihsel bağlam sağlamak için josh3736'nın cevabını övmek istiyorum . İyi ifade edilmiş olsa da, CSS manzarası bu sorunun sorulmasından bu yana neredeyse beş yıl içinde değişti. Bu soru sorulduğunda px
oldu doğru cevap, ama bu artık günümüzde de geçerlidir.
tl; dr: kullanımrem
Üniteye Genel Bakış
Tarihsel olarak px
birimler tipik olarak bir cihaz pikselini temsil eder. Daha yüksek ve daha yüksek piksel yoğunluğuna sahip cihazlarda, bu, Apple'ın Retina Ekranı gibi birçok cihaz için geçerli değildir.
rem
birimleri temsil r oot em boyutu. Her font-size
ne olursa olsun :root
. HTML durumunda, bu <html>
unsur; SVG için bu <svg>
unsurdur. font-size
Her tarayıcıda * varsayılan değerdir 16px
.
Yazma sırasında, rem
kullanıcıların yaklaşık% 98'i tarafından desteklenmektedir . Diğer% 2'den endişe ediyorsanız, medya sorgularının da kullanıcıların yaklaşık% 98'i tarafından desteklendiğini hatırlatacağım .
Kullanım Hakkında px
İnternetteki CSS örneklerinin çoğu, px
fiili standart oldukları için değerleri kullanır . pt
, in
Ve diğer birimlerin çeşitli olabilir teoride kullanılmıştır, ancak yaklaşık nedenle zor hızla türüne uzundu kesirler, başvurmak gerekiyordu yanı küçük değerleri işlemek ve vermedi.
İnce bir sınır px
istiyorsanız, kullanabileceğiniz gibi 1px
, tutarlı sonuçlar pt
için kullanmanız gerekir 0.75pt
ve bu çok uygun değildir.
Kullanım Hakkında rem
rem
'nin varsayılan değeri, 16px
kullanımı için çok güçlü bir argüman değildir. Yazma 0.0625rem
olduğu kötü yazı daha 0.75pt
, neden kimse kullanımı olur rem
?
rem
Diğer birimlere göre avantaj sağlayacak iki kısım vardır .
- Kullanıcı tercihlerine saygı duyulur
- Görünen
px
değerini rem
istediğiniz gibi değiştirebilirsiniz
Kullanıcı Tercihlerine Saygı Göstermek
Tarayıcı yakınlaştırması yıllar içinde çok değişti. Tarihsel olarak birçok tarayıcı sadece ölçeklenirdi font-size
, ancak web siteleri güzel piksel mükemmel tasarımlarının birisinin yakınlaştırdığı veya uzaklaştırdığı her zaman kırıldığını fark ettiğinde oldukça hızlı bir şekilde değişti. Bu noktada, tarayıcılar tüm sayfayı ölçeklendirir, böylece yazı tipi tabanlı yakınlaştırma resim dışında kalır.
Bir kullanıcının isteklerine saygı duymak resmin dışında değildir. Bir tarayıcının 16px
varsayılan olarak ayarlanmış olması , herhangi bir kullanıcının düşük görüş veya zayıf görünürlük (ekran parlaması gibi) için tercihlerini değiştiremeyeceği 24px
veya 32px
düzeltemeyeceği anlamına gelmez . Birimlerinizi temel alırsanız rem
, daha yüksek font büyüklüğündeki herhangi bir kullanıcı orantılı olarak daha büyük bir site görür. Sınırlar daha büyük olacak, dolgu daha büyük olacak, kenar boşlukları daha büyük olacak, her şey akıcı bir şekilde büyüyecek.
Medya sorgularınızı temel rem
alırsanız, kullanıcılarınızın gördüğü sitenin ekranlarına uyduğundan da emin olabilirsiniz. Sahip bir kullanıcı font-size
için sette 32px
bir üzerinde 640px
geniş tarayıcıdan etkin bir kullanıcıya gösterildiği gibi sitenizi gördükten olacak 16px
bir üzerinde 320px
geniş tarayıcısı. RWD kullanımında kesinlikle bir kayıp yoktur rem
.
Görünen px
Değeri Değiştirme
Çünkü rem
dayanmaktadır font-size
ait :root
düğüm ne değiştirmek istiyorsanız, 1rem
temsil, yapmanız gereken tek şey değişimdir font-size
:
:root {
font-size: 100px;
}
body {
font-size: 1rem;
}
<p>Don't ever actually do this, please</p>
Ne yaparsanız yapın, :root
öğenin değerini font-size
bir px
değere ayarlamayın.
Eğer ayarlarsanız font-size
üzerinde html
bir karşı px
değer, Geri almak için bir yol olmadan, kullanıcının tercihleri darmadağın ettik.
Öğesinin görünen değerini değiştirmek istiyorsanız rem
, %
birimlerini kullanın .
Bunun matematiği oldukça basittir.
Görünürdeki font-size :root
olan 16px
, ama biz bunu değiştirmek istiyoruz diyelim 20px
. Yapmamız gereken tek şey 16
elde etmek için bir değerle çarpmak 20
.
Denkleminizi ayarlayın:
16 * X = 20
Ve çözmek X
:
X = 20 / 16
X = 1.25
X = 125%
:root {
font-size: 125%;
}
<p>If you're using the default font-size, I'm 20px tall.</p>
Her şeyi katları halinde yapmak 20
o kadar da iyi değildir, ancak ortak bir öneri, görünen boyutu rem
eşit yapmaktır 10px
. Bunun için sihirli sayı 10/16
olan 0.625
veya 62.5%
.
:root {
font-size: 62.5%;
}
<p>If you're using the default font-size, I'm 10px tall.</p>
Sorun artık varsayılan olmasıdır font-size
sayfanın geri kalanı için çok küçük set yoldur, ama bunun için basit bir düzeltme var: Set font-size
üzerinde body
kullanarak rem
:
:root {
font-size: 62.5%;
}
body {
font-size: 1.6rem;
}
<p>I'm the default font-size</p>
Bu etapta bu ayarlama, görünürdeki değeriyle, nota önemlidir rem
DİR 10px
sen yazmış olabilirim herhangi bir değeri ifade eder px
doğrudan dönüştürülebilir rem
bir ondalık yeri çarparak.
padding: 20px;
dönüşür
padding: 2rem;
Seçtiğiniz belirgin yazı tipi boyutu size bağlıdır, bu nedenle isterseniz kullanamazsınız:
:root {
font-size: 6.25%;
}
body {
font-size: 16rem;
}
ve 1rem
eşittir 1px
.
Böylece, CSS'nizi aşırı karmaşıklaştırmadan kaçınırken, kullanıcı isteklerine saygı duymak için basit bir çözüm var.
Bekle, işte ne var?
Bunu isteyebileceğinden korktum. Bu rem
sihir ve her şeyi çözüyormuş gibi yapmak istediğim kadarıyla , hala dikkat edilmesi gereken bazı konular var. Hiçbir fikrim yok , ama onları arayacağım, böylece sizi uyarmadığımı söyleyemezsiniz.
Medya Sorguları (kullanım em
)
İlk karşılaşacağınız sorunlardan biri rem
medya sorgularıdır. Aşağıdaki kodu göz önünde bulundurun:
:root {
font-size: 1000px;
}
@media (min-width: 1rem) {
:root {
font-size: 1px;
}
}
Burada, rem
medya sorgusunun uygulanıp uygulanmadığına ve medya sorgusunun değerine bağlı olarak değişikliklerin değeri rem
, peki dünyada neler oluyor?
rem
Medya sorgularda başlangıç değeri kullanır font-size
ve olmamalıdır hesaba göre meydana gelmiş olabilir herhangi bir değişiklik almak (Safari bölümüne bakınız) font-size
ait :root
eleman. Başka bir deyişle, her zaman görünen değerdir 16px
.
Bu biraz sinir bozucu, çünkü bazı kesirli hesaplamalar yapmanız gerektiği anlamına geliyor , ancak en yaygın medya sorgularının zaten 16'nın katları olan değerleri kullandığını gördüm.
| px | rem |
+------+-----+
| 320 | 20 |
| 480 | 30 |
| 768 | 48 |
| 1024 | 64 |
| 1200 | 75 |
| 1600 | 100 |
Ayrıca bir CSS ön işlemcisi kullanıyorsanız, medya sorgularınızı yönetmek için mixins veya değişkenleri kullanabilirsiniz, bu da sorunu tamamen maskeleyecektir.
Safari
Ne yazık ki Safari'de :root
yazı tipi boyutundaki değişikliklerin rem
medya sorgu aralıkları için hesaplanan değerleri gerçekten değiştirdiği bilinen bir hata var . Bu, :root
öğenin yazı tipi boyutu bir medya sorgusu içinde değiştirilirse çok garip davranışlara neden olabilir . Neyse ki düzeltme basittir: medya sorguları için birimleri kullanınem
.
Bağlam Değiştirme
Projeler arasında çeşitli farklı projeler arasında geçiş yaparsanız, görünen yazı tipi boyutunun rem
farklı değerlere sahip olması mümkündür. Bir projede, 10px
başka bir projede görünen boyutun nerede olabileceğinin görünen bir boyutunu kullanıyor olabilirsiniz 1px
. Bu kafa karıştırıcı olabilir ve sorunlara neden olabilir.
Buradaki tek tavsiyem, görünür bir boyuta 62.5%
dönüştürmek rem
için bağlı kalmaktır 10px
, çünkü bu benim deneyimimde daha yaygındı.
Paylaşılan CSS Kütüphaneleri
Gömülü bir widget gibi kontrol etmeyen bir sitede kullanılacak CSS yazıyorsanız, görünen boyutun ne rem
olacağını bilmenin gerçekten iyi bir yolu yoktur . Bu durumda, kullanmaya devam etmekten çekinmeyin px
.
Yine de kullanmak istiyorsanız rem
, görünen sayfanın ölçeklendirmesini geçersiz kılmak için stil sayfasının Sass veya LESS sürümünü bir değişkenle serbest bırakmayı düşünün rem
.
* Kimseyi kullanmaktan korkutmak istemiyorum rem
, ancak her tarayıcının 16px
varsayılan olarak kullandığını resmi olarak doğrulayamadım . Görüyorsunuz, çok sayıda tarayıcı var ve bir tarayıcının söylemesi 15px
ya da söylemesi hiç bu kadar zor olmamıştı 18px
. Ancak testte, varsayılan ayarları kullanan bir sistemde varsayılan ayarları kullanan bir tarayıcının dışında herhangi bir değere sahip olduğu tek bir örnek görmedim 16px
. Böyle bir örnek bulursanız, lütfen benimle paylaşın.