CSS'imde px veya rem değer birimleri kullanmalı mıyım? [kapalı]


375

Yeni bir web sitesi tasarlıyorum ve mümkün olduğunca çok tarayıcı ve tarayıcı ayarıyla uyumlu olmasını istiyorum. Yazı tiplerimin ve öğelerimin boyutları için hangi ölçü birimini kullanmam gerektiğine karar vermeye çalışıyorum, ancak kesin bir cevap bulamıyorum.

Sorum şu: kullanmalıyım pxya rembenim CSS?

  • Şimdiye kadar px, kullanımının tarayıcılarında temel yazı tipi boyutunu ayarlayan kullanıcılarla uyumlu olmadığını biliyorum .
  • Ben yok saydım emçünkü remonlar basamaklı olarak , s ile karşılaştırıldığında, korumak için bir güçlük vardır .
  • Bazıları rem, çözünürlükten bağımsız olduğunu ve bu nedenle daha arzu edilir olduğunu söylüyor . Ancak diğerleri, çoğu modern tarayıcının tüm öğeleri eşit şekilde yakınlaştırdığını söylüyor, bu nedenle kullanmak pxbir sorun değil.

Bunu soruyorum çünkü CSS'de en çok istenen mesafe ölçüsü hakkında çok farklı görüşler var ve hangisinin en iyisi olduğundan emin değilim.


4
Bu bir anlaşmazlık ve tartışma ve fikir meselesi, SO'nun iyi olduğu teknik sorular değil. Bu arada, doğru cevap “Hayır”. ☺
Jukka K. Korpela

2
Yorum bile modası geçmiş. OP'nin doğru görüşü istemesi, sadece kendi görüşümüzü vereceğimiz anlamına gelmez. Neredeyse 8 yıl sonra bu soru, konunun nasıl geliştiği konusunda hala bir ilgi olduğunu gösteriyor. Mevcut cevaplar doğrulanmış ve yeterince tekniktir ve DEĞİLDİR. Bu nedenle, "görüş" kelimesini "deneyim" olarak düzenlemenizi öneriyorum, bu yüzden soruyu tekrar tekrar tekrar kapatarak kapatmayacağız.
Tim Vermaelen

2
@TimVermaelen Bu soru kullanım ömrü boyunca yalnızca bir kez kapatıldı. Değişiklik önemli bir değişiklik değildi, çünkü cevap hala tamamen OP belirli bir senaryo hakkında soru sormak için düzenleme yapmadıkça sağlanamayan bağlama bağlıdır. Tüm vakalar için "en iyi" bir seçenek yoktur, bu nedenle bu soru görüşe dayalıdır.
TylerH

Yanıtlar:


418

TL; DR: kullanın px.

Gerçekler

  • İlk olarak, spesifikasyon başına , CSS pxünitesinin bir fiziksel ekran pikseline eşit olmadığını bilmek son derece önemlidir . Bu her zaman doğrudur - 1996 CSS 1 spesifikasyonlarında bile .

    CSS, 96 dpi ekranda bir pikselin boyutunu ölçen referans pikseli tanımlar . 96 dpi'den (Retina ekranları gibi) önemli ölçüde farklı bir dpi'ye sahip bir ekranda, kullanıcı aracısı px, boyutunu bir referans pikseli ile eşleşecek şekilde yeniden ölçeklendirir . Başka bir deyişle, bu yeniden ölçekleme tam olarak neden 1 CSS pikseli 2 fiziksel Retina ekran piksele eşittir.

    Bununla birlikte, 2010 yılına kadar (ve mobil yakınlaştırma durumu buna rağmen) pxhemen hemen her zaman bir fiziksel piksele eşitti, çünkü yaygın olarak bulunan tüm ekranlar 96dpi civarındaydı.

  • emS ile belirtilen boyutlar ana öğeye göredir . Bu, emyuvalanmış öğelerin giderek büyüyüp küçüldüğü “bileşikleşme sorununa” yol açar . Örneğin:

    body { font-size:20px; } 
    div { font-size:0.5em; }

    Bize verir:

    <body> - 20px
        <div> - 10px
            <div> - 5px
                <div> - 2.5px
                    <div> - 1.25px
  • Her remzaman yalnızca kök htmlöğeyle göreli olan CSS3 artık kullanımdaki tüm tarayıcıların% 96'sında desteklenmektedir .

Görüş

Herkesin, sayfalarınızı herkese uygun olacak şekilde tasarlamanın ve görme engelliler için düşünmenin iyi olduğunu kabul ettiğini düşünüyorum. Bu tür bir husus (ancak tek değil!) Kullanıcıların sitenizin metnini büyütmesine izin vermektir, böylece okunması daha kolaydır.

Başlangıçta, kullanıcılara metin boyutunu ölçeklendirmenin bir yolunu sağlamanın tek yolu, göreceli boyut birimleri ( ems gibi ) kullanmaktı. Bunun nedeni, tarayıcının yazı tipi boyutu menüsünün kök yazı tipi boyutunu değiştirmesidir. Bu nedenle, içinde yazı tipi boyutları belirttiyseniz px, tarayıcının yazı tipi boyutu seçeneğini değiştirirken ölçeklenmezler.

Modern tarayıcılar (ve hatta modern olmayan IE7), varsayılan ölçekleme yöntemini, görüntüler ve kutu boyutları da dahil olmak üzere her şeyi yakınlaştırmak için değiştirdi. Esasen, referans pikseli büyütür veya küçültür.

Evet, biri hala varsayılan yazı tipi boyutunu (eski tarz yazı boyutunu seçeneğinin eşdeğeri) çimdik tarayıcı varsayılan stil değişebilir, ancak bu konuda gitmekten çok ezoterik yol ve bahis kimse olur 1 yapar. (Chrome'da, gelişmiş ayarlar, Web içeriği, Yazı Tipi Boyutları altında gömülüdür. IE9'da daha da gizlidir. Alt tuşuna basmanız ve Görünüm, Metin Boyutu'na gitmeniz çok daha kolaydır.) tarayıcının ana menüsünü kullanın (veya Ctrl+ +/ -/ fare tekerleğini kullanın).

1 - istatistiksel hata içinde, doğal olarak

Çoğu kullanıcının yakınlaştırma seçeneğini kullanarak sayfaları ölçeklediğini varsayarsak, göreceli birimleri çoğunlukla alakasız bulurum. Her şey aynı birimde belirtildiğinde (resimlerin tümü piksel olarak ele alındığında) sayfanızı geliştirmek çok daha kolaydır ve birleştirme konusunda endişelenmenize gerek yoktur. ( "Bana matematik olmayacağı söylendi" - 1.5em'in gerçekte neyin işe yaradığını hesaplamak zorunda kalıyoruz.)

Font boyutları için yalnızca göreceli birimler kullanmanın diğer bir potansiyel sorunu, kullanıcı tarafından yeniden boyutlandırılan fontların mizanpajınızın yaptığı varsayımları kırabileceğidir. Örneğin, bu, metnin kırpılmasına veya çok uzun süre çalışmasına neden olabilir. Mutlak birimler kullanırsanız, beklenmeyen yazı tipi boyutlarının düzeninizi bozması konusunda endişelenmenize gerek yoktur.

Cevabım piksel birimlerini kullanmak. Her pxşey için kullanıyorum . Tabii ki, durumunuz değişebilir ve IE6'yı desteklemeniz gerekiyorsa (RFC'lerin tanrılarının size merhameti olabilir), emyine de s'yi kullanmanız gerekir .


43
Piksel ve rem kullanmalısınız. Böylece yeni tarayıcılar rem alır ve eski tarayıcılar piksele geri döner (WordPress 2012 gibi). Bu, Sass veya Less ile otomatikleştirilebilir, böylece yaptığınız tek şey px değerini girmek ve otomatik olarak px ve rem çıkışı sağlar.
cchiera

63
Bu argümanla ilgili büyük sorunum, yazı tipi boyutunu ve duyarlı kesme noktalarındaki aralığı ayarlarken, html öğesinde yeni bir yazı tipi boyutu ayarlayabileceğiniz ve rem'de ayarladığınız her ölçümün otomatik olarak ayarlanacağı, pks ile yazmanız gerekeceği ince ayar yapmak istediğiniz her ölçüm için yeni kurallar. Tabii ki rem kullanırken bile daha fazla ayarlamaya ihtiyaç duyulacak, ancak akıllı planlama ile ücretsiz olarak büyük miktarda orantılı ölçeklendirme elde edeceksiniz. Belirli kutu aralığı ölçümlerini türe, daha hafif koda ve daha az karmaşıklığa / daha fazla sürdürülebilirliğe bağlamak benim için net bir kazanç demektir.
RobW

16
Hiçbir kullanıcının yazı tipi boyutu ayarını değiştirmediği varsayılarak oldukça kalındır. Bu iddia, verilerle desteklenmelidir. Aksi takdirde, zaten kırılgan olan bazı kullanıcıları yabancılaştırmanın bir yolu (ağır görme engelli ppl). Mümkünse px yerine rem kullanın. IMO, uygulamalar arayüzlerini ve yazı tipi boyutunu bağımsız olarak ölçekleyebilmelidir. "Sadece px kullanın" ems sorunu ile mücadele birçok devs duymak istiyorum, ama web için doğru cevap değil.
Olivvv

18
Bu konuda bir takip yapmak harika olurdu. Rem şu anda% 95 + destek seviyesinde.
öğrenme istatistikleri

10
Yanlış, IE umurumda değil (kimse yapmamalı).
Vahid Amiri

194

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 pxbirimler 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.

rembirimleri temsil r oot em boyutu. Her font-sizene olursa olsun :root. HTML durumunda, bu <html>unsur; SVG için bu <svg>unsurdur. font-sizeHer tarayıcıda * varsayılan değerdir 16px.

Yazma sırasında, remkullanı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, pxfiili standart oldukları için değerleri kullanır . pt, inVe 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 pxistiyorsanız, kullanabileceğiniz gibi 1px, tutarlı sonuçlar ptiçin kullanmanız gerekir 0.75ptve bu çok uygun değildir.

Kullanım Hakkında rem

rem'nin varsayılan değeri, 16pxkullanımı için çok güçlü bir argüman değildir. Yazma 0.0625remolduğu kötü yazı daha 0.75pt, neden kimse kullanımı olur rem?

remDiğer birimlere göre avantaj sağlayacak iki kısım vardır .

  • Kullanıcı tercihlerine saygı duyulur
  • Görünen pxdeğerini remistediğ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 16pxvarsayı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 24pxveya 32pxdü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 remalırsanız, kullanıcılarınızın gördüğü sitenin ekranlarına uyduğundan da emin olabilirsiniz. Sahip bir kullanıcı font-sizeiçin sette 32pxbir üzerinde 640pxgeniş tarayıcıdan etkin bir kullanıcıya gösterildiği gibi sitenizi gördükten olacak 16pxbir üzerinde 320pxgeniş tarayıcısı. RWD kullanımında kesinlikle bir kayıp yoktur rem.

Görünen pxDeğeri Değiştirme

Çünkü remdayanmaktadır font-sizeait :rootdüğüm ne değiştirmek istiyorsanız, 1remtemsil, 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-sizebir pxdeğere ayarlamayın.

Eğer ayarlarsanız font-sizeüzerinde htmlbir karşı pxdeğ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 :rootolan 16px, ama biz bunu değiştirmek istiyoruz diyelim 20px. Yapmamız gereken tek şey 16elde 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 20o kadar da iyi değildir, ancak ortak bir öneri, görünen boyutu remeşit yapmaktır 10px. Bunun için sihirli sayı 10/16olan 0.625veya 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-sizesayfanın geri kalanı için çok küçük set yoldur, ama bunun için basit bir düzeltme var: Set font-sizeüzerinde bodykullanarak 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 remDİR 10pxsen yazmış olabilirim herhangi bir değeri ifade eder pxdoğrudan dönüştürülebilir rembir 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 1remeş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 remsihir 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 remmedya 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, remmedya sorgusunun uygulanıp uygulanmadığına ve medya sorgusunun değerine bağlı olarak değişikliklerin değeri rem, peki dünyada neler oluyor?

remMedya sorgularda başlangıç değeri kullanır font-sizeve olmamalıdır hesaba göre meydana gelmiş olabilir herhangi bir değişiklik almak (Safari bölümüne bakınız) font-sizeait :rooteleman. 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 :rootyazı tipi boyutundaki değişikliklerin remmedya 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 remfarklı değerlere sahip olması mümkündür. Bir projede, 10pxbaş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 remiç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 remolacağı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 16pxvarsayı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 15pxya 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.


Bu geç olduğunu biliyorum ama, REM kullanarak yolu seviyorum, ama rem kullanarak en çok sorun var matrix()matris çeviri değerleri kullandığınız javascript ile kullanmaktır px(yanlışsam beni düzelt) ve ben onunla çok karışık .
Ampersanda

3
@Ampersanda, JavaScript'te büyük oranda hesaplanan piksel değerlerini kullanacaksınız. Benim önerim, mümkün olan yerlerde sınıfları değiştirmektir, böylece CSS olayların nasıl görüneceğini yönetebilir. Bazı şeyler için, piksel değerlerini hesaplamak için JS kullanmaktan kaçınamazsınız, bu nedenle en iyi bahis, piksel değerini DOM durumundan hesaplamaktır.
zzzzBov

Anlıyorum, bu yüzden zorundayım getComputedStyle()ama sonuç her zaman piksel üzerinde, bu yüzden sonucu remdeğere bölmek zorundayım (16 gibi). CMIIW
Ampersanda

@Ampersanda yalnızca gerçekten bir remdeğer oluşturuyorsanız, zaten doğru pxdeğere sahipseniz rem, verilen bağlam için zaten hesaplanmış olan şeyler için birimlere geçmeye gerek yoktur .
zzzzBov

1
1rem eşittir 1px Bu, Chrome'un minimum yazı tipi boyutu nedeniyle sorunlara neden olur: stackoverflow.com/questions/44378664/… stackoverflow.com/questions/24200797/…
Paul

44

Bu makale oldukça iyi olumlu ve olumsuz yanlarını anlatır px, emve rem.

Yazar nihayet en iyi yöntemin muhtemelen her ikisini de kullanmak pxve önce eski tarayıcılar için rembeyan etmek pxve remyeni tarayıcılar için yeniden açıklama yapmak olduğu sonucuna varıyor :

html { font-size: 62.5%; } 
body { font-size: 14px; font-size: 1.4rem; } /* =14px */
h1   { font-size: 24px; font-size: 2.4rem; } /* =24px */

1
Evet, ilk başta rem ile ilgilenmemi sağlayan şey buydu. Anlamadığım iki şey: sadece yazı tipleri (öğeler değil) için bir ölçü birimi olarak tavsiye eder ve onu doğru anlarsam, (r) em kullanmanın tek gerçek nedeni IE kullanıcılarının metni yeniden boyutlandırabilmesidir?

1
@Manuel inanıyorum. Metin yeniden boyutlandırma için değilse, ben kullanmayı tercih ediyorum inanıyorum px. Elemanlar için birime gelince, pxgenellikle hassas bir şekilde boyutlandırmak istediğiniz için yapışmak daha iyi olacaktır.
uzyn

Ancak bunu yaparsanız, temel yazı tipi boyutunu yeniden tanımlayan herhangi bir tarayıcı ayarı düzeninizi bozar mı? Neden rem her şey için değil?

1
Birçok yorum belirttiği gibi burada ki biz hendekte için gerekli nedeni pxboyutlandırma sağlamaktır. Şimdi kullanırsak rem, pxgeri dönüş sağlamalıyız (eski tarayıcılarda). Aslında bunun anlamı, pxdesteği yeniden boyutlandırmaktan daha iyidir rem. Daha yeni tarayıcılar pxyeniden boyutlandırmayı ve eski tarayıcılar için geri dönüş yolumuzu destekler px. Şimdi bu sonuca ışık dayalı, çok bilerek ilgilenen ediyorum, neden kullanım rem? Tünelin sonunda ışığı görebilirsem.
fusionstrings

3
% 62.5 = 10 piksel gibi değerlerin garanti edilemez. Yalnızca tarayıcının varsayılan yazı tipi boyutu 16 piksel olarak ayarlandığında geçerlidir. Bu varsayılan olsa da, garanti edilmez.
cimmanon

7

Bir refleks cevabı olarak rem'i kullanmanızı tavsiye ederim, çünkü gerekirse tüm belgenin "yakınlaştırma seviyesini" bir kerede değiştirmenize izin verir. Bazı durumlarda, boyutun üst öğeye göre olmasını istediğinizde em kullanın.

Ancak rem desteği sivilceli, IE8'in bir çoklu dolguya ihtiyacı var ve Webkit bir hata gösteriyor. Ayrıca, alt piksel hesaplaması bazen bir piksel çizgisi gibi şeylerin kaybolmasına neden olabilir. Çözüm, bu tür çok küçük elemanlar için piksel olarak kodlamaktır. Bu daha da karmaşık bir hale geliyor.

Genel olarak, kendinize buna değip değmeyeceğini sorun - CSS içindeki tüm belgenin "yakınlaştırma seviyesini" değiştirmenin ne kadar önemli ve muhtemel olması?

Bazı durumlarda evet, bazı durumlarda hayır olacaktır.

Bu nedenle, ihtiyaçlarınıza bağlıdır ve artıları ve eksileri ağırlıklandırmanız gerekir, çünkü rem ve em kullanmak "normal" piksel tabanlı iş akışına kıyasla bazı ek hususlar getirir.

Aşağıdaki iki CSS kodu bloğu aynı sonucu üreteceğinden, CSS'nizi px'ten rem'e (JavaScript başka bir hikaye) dönüştürmenin (veya daha doğrusu dönüştürmenin) kolay olduğunu unutmayın.

html {
}

body {
  font-size:14px;
}

.someElement {
  width: 12px;
}

html {
  font-size:1px;
}

body {
  font-size:14rem;
}

.someElement {
  width: 12rem;
}

6

Evet, REM ve PX göreceli ama diğer cevaplar PX üzerinden REM için önerdi, ayrıca bir erişilebilirlik örneği kullanarak bunu yedeklemek istiyorum.
Kullanıcı tarayıcıda farklı yazı tipi boyutu ayarladığında, REM web sayfasında yazı tipi, resim vb.


Aşağıdaki gifte sol taraftaki metin yazı tipi boyutu REM birimi kullanılarak ayarlanırken, sağ taraftaki yazı tipi PX birimi tarafından ayarlanır.

resim açıklamasını buraya girin

Gördüğünüz gibi, web sayfasının varsayılan yazı tipi boyutunu yeniden boyutlandırdığımda REM otomatik olarak yukarı / aşağı ölçekleniyor. (Sağ alt taraf)

Bir web sayfasının varsayılan yazı tipi boyutu html{font-size:100%}16px'dir ve bu 1 rem'e eşittir (yalnızca varsayılan html sayfası için ), yani 1.25rem 20px'e eşittir.

Not: başka kim REM kullanıyor? CSS Çerçeveleri! Bootstrap 4, Bulma CSS vb gibi, çok daha iyi olsun.


3

josh3736'nın cevabı iyi bir cevaptır, ancak 3 yıl sonra bir kontrpuan sağlamak için:

Ben kullanılması önerilir remo da kolaylaştıracağını sadece çünkü eğer, yazı tipleri için birimler size değişim boyutları, geliştirici. Kullanıcıların tarayıcılarındaki varsayılan yazı tipi boyutunu çok nadiren değiştirdiği ve modern tarayıcı yakınlaştırmasının pxbirimleri ölçeklendireceği doğrudur . Peki ya patronunuz size gelir ve "görüntüleri veya simgeleri büyütmeyin, ancak tüm yazı tiplerini büyütün" diyorsa. Kök yazı tipi boyutunu değiştirmek ve diğer tüm yazı tiplerinin buna göre ölçeklenmesini sağlamak, daha sonra pxdüzinelerce veya yüzlerce css kuralında boyutları değiştirmek çok daha kolaydır .

pxBazı görüntüler için veya tasarımın ölçeğine bakılmaksızın her zaman aynı boyutta olması gereken bazı düzen öğeleri için birimleri kullanmak hala mantıklı .

Caniuse.com, josh3736 2012'de yanıtını gönderdiğinde tarayıcıların sadece% 75'inin, ancak 27 Mart itibarıyla% 93,78 destek talep ettiğini söylemiş olabilir . İzledikleri tarayıcılar arasında yalnızca IE8 desteklenmez.


1
Only IE8 doesn't support it among the browsers they track.Ha? Bağlantı verilen sayfada “IE9 ve IE10, font shorthand özelliğinde veya sözde öğelerde kullanıldığında rem birimlerini desteklemiyor. IE9, 10 ve 11, şu durumlarda kullanıldığında line-height özelliğinde kullanıldığında rem birimlerini desteklemez: before ve: after sözde elemanlar. Rem boyutundaki kenarlıklar, sayfa Chrome'da uzaklaştırıldığında kaybolur. Android 4.2'de Samsung Note II Android 4.3 tarayıcısında ve Samsung Galaxy Tab 2'de çalışmaz. Chrome 31-34 ve Chrome tabanlı Android'de (4.4 gibi), kök öğenin yüzde tabanlı boyutu olduğunda yazı tipi boyutu hatası oluşuyor. ”
e-sushi

Ayrıca, ile ilgili as of March 27 they claim 93.78% support.Bu yorumu yazarken, caniuse sadece% 91.79 tam tarayıcı desteği gösterir. Yüzdenize baktığımda, buggy tarayıcı desteğini de dahil ettiğinizden eminim (şu anda% 2.8'de, iyimser% 94.6 genel kapsam olarak yorumlanabilir - ancak gerçekte bu% 2.8, buggy, eksik veya hatta tamamen gelir) başarısız yorum… önceki yorumumda belirtildiği gibi: her hata farklı tarayıcı sürümü ve işletim sistemi kombinasyonlarının sonucudur.) Cevabınızı buna göre düzeltmek isteyebilirsiniz…
e-sushi

1

Bir web sitesinin yazı tipi boyutlarını programlamak için en iyi yolu buldum bodyve daha sonra font-sizebeyan her diğer için em (veya rem) kullanmak için temel yazı tipi boyutu tanımlamak vardır. Sanırım bu kişisel tercih, ama bana iyi hizmet etti ve aynı zamanda daha duyarlı bir tasarımı birleştirmeyi çok kolay hale getirdi .

Rem birimleri kullanmak kadarıyla, kodunuzda ilerleyici olmak arasında bir denge bulmak, ancak daha eski tarayıcılar için destek sunmak iyi olduğunu düşünüyorum. Rem birimlerine yönelik tarayıcı desteğiyle ilgili bu bağlantıya göz atın, bu da kararınızda iyi bir miktar yardımcı olacaktır.


Tamam. Ancak duyarlı tasarım, piksel birimleriyle de kolayca yapılabilir (medya sorgularınızı em yerine px'e göre yazmanız yeterlidir)?

Ancak, web sitenizin görünüm alanı genişliği küçüldükçe yazı tipi boyutunu küçültmek isterseniz, bodyyazı tipi boyutunu değiştirebilirsiniz ve her şey onunla değişir.
cereallarceny

Tarayıcı desteği konusunda gerçekten endişelenmiyorum. Tüm boyutlar için yedek bir piksel boyutu ekleyeceğim, böylece eski tarayıcıların yorumlayacak bir şeyleri olacak.

Sonra rem'leri kullanarak ilerici bir yol gidin. Bir geri dönüş sağladığınız sürece, hiçbir zarar görmüyorum. Bana göre bu sadece ekstra bir iş gibi görünüyor, ama belki de durumunuzda değil.
cereallarceny

0

pt, remuyumlu olmayan tarayıcılar pxcihaza bağlı bir şekilde davransa bile nispeten sabittir, ancak neredeyse her zaman DPI'dan bağımsızdır . remkök öğenin yazı tipi boyutuna göre değişir, ancak bunu otomatik olarak yapmak için Sass / Compass gibi bir şey kullanabilirsiniz pt.

Eğer buna sahipseniz:

html {
    font-size: 12pt;
}

o 1remzaman her zaman olur 12pt. remve emsadece güvendikleri unsurlar kadar cihazdan bağımsızdırlar; bazı tarayıcılar spesifikasyona göre davranmaz ve pxkelimenin tam anlamıyla davranır . Web'in eski günlerinde bile 1 nokta sürekli olarak 1/72 inç olarak kabul edildi - yani bir inçte 72 nokta var.

Eski, uyumlu olmayan bir tarayıcınız varsa ve aşağıdakilere sahipseniz:

html {
    font-size: 16px;
}

o 1remzaman cihaza bağımlı olacaktır. htmlVarsayılan olarak devralınacak öğeler 1emiçin aygıta da bağlı olacaktır. 12ptolacaktır umutla : garanti aygıttan bağımsız eşdeğer 16px / 96px * 72pt = 12pt, 96px = 72pt = 1in.

Belirli birimlere bağlı kalmak istiyorsanız matematik yapmak oldukça karmaşık olabilir. Örneğin .75em of html = .75rem = 9pt, ve .66em of .75em of html = .5rem = 6pt. İyi bir kural:

  • ptMutlak boyutlar için kullanın . Bunun kök öğeye göre dinamik olması için gerçekten ihtiyacınız varsa, çok fazla CSS soruyorsunuz; Sass / SCSS gibi CSS için derlenen bir dile ihtiyacınız var.
  • emGöreli boyutlar için kullanın . "Soldaki kenar boşluğunun bir harfin maksimum genişliği kadar olmasını istiyorum" veya "Bu öğenin metnini çevresinden biraz daha büyük yap" diyebilmek oldukça kullanışlı. <h1>çeşitli yerlerde görünebileceğinden, ancak her zaman yakındaki metinden daha büyük olması gerektiğinden, EMS'de yazı tipi boyutunu kullanmak için iyi bir öğedir. Bu şekilde, uygulanan her sınıf için ayrı bir yazı tipi boyutuna sahip olmanız gerekmez h1: yazı tipi boyutu otomatik olarak uyarlanır.
  • pxÇok küçük boyutlar için kullanın . Çok küçük boyutlarda, ptçünkü 96 DPI bazı tarayıcılarda bulanık alabilirsiniz ptve pxoldukça sıraya yoktur. Yalnızca ince, tek piksellik bir kenarlık oluşturmak istiyorsanız bunu söyleyin. Yüksek DPI'lı bir ekranınız varsa, bu test sırasında sizin için açık olmayacaktır, bu nedenle bir noktada genel 96 DPI'lık bir ekranda test ettiğinizden emin olun.
  • Yüksek DPI'lı ekranlarda işleri süslemek için alt piksellerle uğraşmayın. Bazı tarayıcılar bunu destekleyebilir - özellikle yüksek DPI'lı ekranlarda - ama hayır. Web bize geliştiricilere başka türlü öğretti, ancak çoğu kullanıcı büyük ve net tercih ediyor. Son teknoloji ürünü ekranlara sahip kullanıcılarınız için genişletilmiş ayrıntılar eklemek istiyorsanız, yine de yapmanız gereken vektör grafikleri (read: SVG) kullanabilirsiniz.

1
pt basılı medya içindir ve asla ekranlar için kullanılmamalıdır
sf

@sf CSS, bu terimlerin teknik olarak doğru kullanılmamasına rağmen, pt ve px'i her zaman aynı olacak şekilde tanımlar (72pt = 96px = 1in). Aslında, CSS'de px gerçekte tek bir cihaz pikseli değildir. Ekranımda 1 piksel 2 cihaz pikseli. Pt'yi px üzerinde kullanmanın avantajı, metinle ilgili boyutlara göre öğe boyutlarını kolayca belirleyebilmenizdir.
Zenexer

-2

Yarı (ama sadece yarım) sinsi cevap (diğer yarısı, bürokrasinin gerçekliğini acı bir şekilde küçümsemek):

Vh kullan

Her şey her zaman tarayıcı penceresine göre boyutlandırılır.

Her zaman aşağı kaydırın, asla yana değil.

Gövde genişliğini statik 50vh olacak şekilde ayarlayın ve hiçbir şey ana div'den yüzemez veya kopmaz. Ve sadece tabloları kullanarak stil verin, böylece her şey beklendiği gibi sağlam bir şekilde tutulur. Kullanıcının yapabileceği herhangi bir ctrl +/- etkinliğini geri almak için bir javascript işlevi ekleyin.

Bir şeyleri maketlerine uydurmasını söyleyen insanlar dışında herkes senden nefret edecek ve kendinden geçmiş olacak. Ve herkes önemli olan tek fikir olduğunu biliyor.


-3

Evet. Ya da daha doğrusu hayır.

Er, demek istediğim, önemli değil. Projeniz için anlamlı olanı kullanın. PX ve EM veya her ikisi de eşit derecede geçerlidir, ancak genel sayfanızın CSS mimarisine bağlı olarak biraz farklı davranacaktır.

GÜNCELLEME:

Açıklığa kavuşturmak için, genellikle hangisini kullandığınızın önemli olmadığını belirtiyorum. Bazen, birini diğerinden seçmek isteyebilirsiniz. EM'ler sıfırdan başlayabilir ve bir temel yazı tipi boyutu kullanmak ve her şeyi buna göre yapmak istiyorsanız güzeldir.

PX'ler genellikle mevcut bir kod tabanına yeniden tasarım yaparken ve kötü yuvalama sorunlarını önlemek için px özelliğine ihtiyaç duyduğunuzda gereklidir.


Yani cevabınız önemli değil mi? Yoksa bir diğerine değer vereceğiniz belirli durumlar var mı? Ve eğer öyleyse, hangi durumlarda böyle olur?

@Samuel evet, birini veya diğerini kullanmak istediğiniz zamanlar olabilir. Cevabımı daha fazla bilgi ile güncelledim.
DA.

Üzgünüm, orijinal ifadelerle biraz kafam karıştı. Başlıkta REM ve vücutta EM olduğunu düşünüyorum. Görünüşe göre özellikle REM hakkında soru soruyorsunuz. Cevap hala hemen hemen aynı, ancak REM'in dikkate alması gereken bazı ek faydaları var, ancak esas olarak EM ile aynı şekilde kullanılıyor - 'temel' yazı tipi boyutunu kullanmanıza izin veriyor.
DA.

Eğer sıfırdan başlayabilir ve bir temel yazı tipi boyutu kullanmak ve her şeyi buna göre yapmak istiyorsanız, neden " em's [...] güzeldir ?" (R) em'in px'e göre avantajı nedir? IE kullanıcıları metni yeniden boyutlandırabilir mi, yoksa px'e göre daha avantajları var mı (daha basit gibi görünüyor)?

EM ve REM aynı avantaja sahiptir: HTML veya BODY'yi belirli bir yazı tipi boyutuna (10px diyelim) ayarlayabilir ve ardından diğer her şeyin EM veya REM olarak ayarlanmasını sağlayabilirsiniz. Bu şekilde, tüm türü orantılı olarak büyütmek istiyorsanız, ilk 10 piksel stilini 11 piksel olarak değiştirin. Bu, 5 yıl önce hepimiz kendi özel JS tabanlı yazı tipi yeniden boyutlandırma widget'larımızı oluştururken çok daha yararlı oldu. Bu günlerde, tarayıcılar yakınlaştırmada (özellikle mobil) daha iyi bir iş çıkarıyorlar ki, daha az fayda görüyorum. PX'i daha basit bulursanız, bu sizin için bir avantaj ve PX ile gitmek için kesinlikle geçerli bir neden.
DA.

-4

em'ler sadece yazı tipleri için değil, kutular, çizgi kalınlığı ve diğer şeyler için de kullanabilirsiniz, neden?

Koymak sadece em's tarayıcı yakınlaştırma alt + ve alt tuşları ile uyum içinde ölçek sadece olanlar vardır.

Diğer ölçümler ölçeklidir, ancak em kadar temiz değildir.

Ölçeklemede en iyiyi istiyorsanız, ayrıca grafiklerinizi mümkün olan yerlerde vektör tabanlı SVG'ye dönüştürün, çünkü bunlar tarayıcıların yakınlaştırma oranıyla da temiz bir şekilde ölçeklenir.


3
Ancak günümüzde çoğu tarayıcı (temel yazı tipi boyutunu ayarlamadığınız sürece) tüm sayfa öğelerini eşit olarak yakınlaştırır, böylece modern tarayıcılar için (r) em kullanmanın avantajı doğru değil mi?

Öyle ve değil, söylediğinizde doğru olsanız da, ölçekleme deltasının aksine ölçekleme faktörü hakkında daha fazla. Delta, kullanılan ölçüme bakılmaksızın her zaman tek tip olacaktır, ancak ölçek faktörü (matematiklerin doğru yapılması şartıyla), geniş ekran monitör veya standart monitör veya dikdörtgen piksel veya kare piksel için gerektiği gibi ayarlanacaktır. Rems aslında bir yazıcı gerçek ölçümüne dayandığından, ölçekleme her zaman daha uygun olacaktır, diğerleri (% gibi) genellikle en iyi ihtimalle bir delta ofsetidir
shawty 16

(devam) her iki yönde uygulanan çarpma ile ve sonuç olarak bazı durumlarda çok orantısız bir izleme oranı verebilir.
shawty

2
"Koymak sadece em's tarayıcı yakınlaştırma alt + ve alt tuşları ile uyum içinde ölçek olanlar sadece vardır." = bu yanlış.
DA.

Tamam, ben daha iyi ifade olabilir, düzeltme için önceki yorum bakın.
shawty

-5

EM'ler, insanların yalnızca kör insanları değil, her zaman yaptıkları +/- ölçeklendirmeyi işleyen medya sorguları için ölçeklenen SADECE şeydir. İşte çok iyi yazılmış bir başka bunun neden önemli olduğuna dair profesyonel bir gösteri.

Bu arada, Zurb Foundation ems kullanırken , daha düşük Bootstrap 3 hala piksel kullanıyor.


2
Bu gerçekten doğru değil. Eski günlerde, IE'nin eski sürümlerinde pikseller yakınlaştırılamadı. +/- artık mevcut tüm tarayıcılarda tam sayfa yakınlaştırma yapıyor, bu yüzden bu bir sorun değil. Ayrıca bu soru px yerine rem'lerle ilgilidir - em vs px değil.
Rich Bradshaw

1
Beni güldürüyorsunuz. Sitenizi piksel kullanarak +/- kullanarak ölçeklendirmeyi denediniz mi? Yakınlaştırılacak pikseller hakkında yazma işlemi yanlış. Aşağı istersen bana oy ver. Oylar gerçekliği değiştirmez.
Mart'ta robmuh

1
Belki de biraz farklı şeyler alıyoruz - farkı göstermek için basit bir demo koyma şansınız var mı?
Zengin Bradshaw

Soruların medya sorgularında hangi birimlerin kullanılacağıyla ilgili olduğunu düşünmüyorum…
binki
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.