Tek bir doğru cevap yok, aslında iki tane var:
- Google tarafından önerilir (örn. Materyal Tasarımı üzerine Udacity kursunda): Çoğu durumda tıpkı Polimer kütüphanesinde olduğu gibi 1: 1 olan basit bir dönüşüm kullanın. Bu Retina ekran için doğru değil , örneğin bu yüzden ziyade 1: 1, bir yoğunluk resmi Materyal Tasarımı Kılavuzu'nda cihaz tabloda verilen oranını kullanmak ( bazı popüler cihazlar için oranları ve spesifik ölçümler ile tablo ) ve uygun @media sorguları sağlamak mdpi ekran (160dpi / ppi) için 1dp'nin 1px olduğu varsayılarak çözünürlük eşikleri ve varlıkları .
Not: Genel bir fikir: sayfanın altındaki: Görüntü ölçekleme ile bazı resim birden ekran çözünürlüğü eşikleri için oranları (Kırılma noktası resim) görselleştirmek için
- belirli cihazlar için tasarımınızda ultra tutarlılık istiyorsanız, daha fazla araştırma ve hesaplama yapmanız ve daha da önemlisi, istediğiniz kadar cihazı desteklemek ve yedek (sağlamak için) 1. sırada bahsedilen yöntem) çok önemsemeyenler için.
İşte konuya daha fazla dalmak isteyenler için daha ayrıntılı bilgi, ancak bu bir açıklama ve mantık, yukarıdaki tam bir cevap :
Mesele şu ki, Materyal Tasarımı'nın resmi kılavuzuna (Düzen> Birimler ve ölçümler) göre "piksel yoğunluğu":
inç'e sığacak piksel sayısı.
Yani temelde piksel yoğunluğu bir ppi değeri için veya bir çok insan ayrı bir şey, bir dpi değeri olarak bu tanımaz yana yeni bir isimdir.
Aynı kılavuza göre 1dp'nin tanımı:
Bir dp, 160 yoğunluklu bir ekranda bir fiziksel piksele eşittir . Dp'yi hesaplamak için:
dp = (piksel cinsinden genişlik * 160) / ekran yoğunluğu
CSS yazarken, dp veya sp'nin belirtildiği yerlerde px kullanın. Dp sadece Android için geliştirilmesinde kullanılmalıdır.
Malzeme tasarımının temel ilkesi, masaüstü çözünürlüğü, ppi (/ dpi) ve css pikseli sorununu artıran farklı platformlarda tutarlı fiziksel boyutlar sağlamaktır; bu durumda Android'de olduğu gibi dp'yi hesaplamaya bağlı kalmalısınız ve ekranların çoğunun 96ppi olduğu doğru değil (CSS için önemli bir varsayım), bunların büyük bir kısmının biraz daha yüksek ppi'si var ve sadece geleneksel masaüstünü değil, aynı zamanda normal dizüstü bilgisayarları da dikkate alırsanız veya tabletler veya Surface gibi "dönüştürülebilir" ifadeleri, dönüştürmeye ihtiyaç duyulur: genellikle 100-130ppi arasında değişir, şu anda kullandığımın 127ppi olduğunu söyledi:
% 100 = 160ppi -> fiziksel 1 piksel genişliği = 1dp -> dikdörtgen 100x100px = 100x100dp
79% = 127ppi -> fiziksel 1 piksel genişliği = ca. 0,8dp -> dikdörtgen 100x100px = 80x80dp
Dp sadece Android için saf ve yeni bir birim olsa da, dp'de gelen MD düzenlerini uyarlamak için bazı hesaplamalar yapmalısınız. Sorunun amacı için belirli bir öğenin fiziksel anlamda ne kadar büyük olacağı hakkında daha fazla fikir edinmek istiyorsanız, belirli cihazlar için Malzeme Tasarımı kılavuzlarında ideal dokunma boyutu aralığı değeri ** dp değerinin altında fiziksel olan. ** dp değeri değişir, ancak fiziksel aynı kalır.
Üniteleri neden hesaplamanız gerektiğine dair sorun, Android API kılavuzunda (dp birimlerini piksel birimlerine dönüştürme) daha ayrıntılı olarak açıklanmaktadır ve yine de CSS ile stilize edilmiş öğeler için geçerlidir:
Bazı durumlarda, boyutları dp cinsinden ifade etmeniz ve sonra bunları> piksele dönüştürmeniz gerekir.
Kullanıcının parmağı en az 16 piksel hareket ettikten sonra kaydırma veya fırlatma hareketinin tanındığı bir uygulama düşünün. Bir taban çizgisi ekranında, bir kullanıcının hareket tanınmadan önce 1/10 inç (veya 2,5 mm) değerine eşit olan 16 piksel / 160 dpi hareket etmesi gerekir. Yüksek yoğunluklu ekrana (240dpi) sahip bir cihazda, kullanıcının 16 inç / 240 dpi boyutunda hareket etmesi gerekir, bu da 1/15 inç (veya 1,7 mm) değerine eşittir. Mesafe çok daha kısadır ve uygulama kullanıcıya daha hassas görünür.
Daha önce bahsedilen Polimer dönüşümü 1: 1 muhtemelen 96dpi yoğunluğunun, hatta verdiğim yoğunluğun düşük yoğunluklu veya hatta (96dpi durumunda olduğu gibi) grubun altında bile olmasından kaynaklanmaktadır. Dp değerinin bir css kabul edilmediğini göz önünde bulundurarak, yoğunluk oranının (düşük, 1,0 orta, vb için 0,75-, basitleştirme ve çoklu boyut için kullanılması gereken) olduğunu varsaymak daha kolaydır. daha önce bahsedilen Malzeme Tasarımı için cihaz tablosunda gösterilen ekran desteği. Android API kılavuzunun yukarıda belirtilen bölümünde en iyi uygulamalardan biri olarak bile bahsedilmektedir. Polimer dönüşümü 1: 1 iyi olabilir, çünkü birçok cihaz seviye 1'de yoğunluk oranına sahiptir.
Son ikileme geri dönme: Farklı cihazların ince nüanslarına dalmaya karar verirseniz css px. Eğer bu kadar sorgulayıcı değilseniz, MD tablosundan Yoğunluk oranına sadık kalın. Ancak bir mükemmeliyetçiyseniz, CSS piksellerinin ve fiziksel boyutlar ilişkisinin bu temel noktası, W3C Adayı Önerisinde mükemmel (ve oldukça basit bir açıklama) vardır :
Mutlak uzunluk birimleri birbirlerine göre sabit olan ve bir fiziksel ölçümle demirlenir. Genellikle çıktı ortamı bilindiğinde kullanışlıdır. Mutlak birimler fiziksel birimlerden ('inç', 'cm', 'mm', 'pt', 'pc', 'q') ve görsel açı biriminden ('px') oluşur :
Kol uzunluğunda okumak için, 1px yaklaşık 0.26 mm'ye (1/96 inç) karşılık gelir.
Not: Piksel birimi ve fiziksel birimlerin bu tanımının CSS'nin önceki sürümlerinden farklı olduğunu unutmayın. Özellikle, CSS'nin önceki versiyonlarında piksel birimi ve fiziksel birimler sabit bir oranla ilişkili değildi: fiziksel birimler her zaman fiziksel ölçümlerine bağlıyken, piksel birimi referans piksele en yakın şekilde değişecektir. (Bu değişiklik, çok fazla mevcut içeriğin 96 dpi olduğu varsayımına bağlı olduğu ve bu varsayımı kırdığı için içeriği bozduğu için yapılmıştır.)
Pikselin bu yeni tanımı (fiziksel boyutları dikkate alarak) CSS pikselleri ve dps arasındaki boşluğu doldurur ve basit ölçüm hesaplamaları kullanarak çıktı ortamı olarak adlandırılan , bu durumda tutarlı (fiziksel anlamda) ) MD düzeni , farklı cihazlarda ve platformlarda aynı kalır. Dahası, hem W3C hem de MD Yönergeleri piksel / nokta kapsamı ile ilgili temel fikri göstermek için düşük ve yüksek çözünürlüklü cihaz resimlerini kullanır - yüksek çözünürlüklü bir cihazda 1 piksellik 1 piksellik bir alanı kaplamak için daha fazla cihaz pikseli (nokta) gerekir düşük çözünürlüklü bir modelde, yani retina görüntüleme için CSS sorgularında yaygın olarak kullanılan, Malzeme Tasarımı ve tüm mobil cihazlar için sağlamanız gerekenle (ancak daha fazla eşikle) aynıdır.
Sonuç olarak, Google tarafından en iyi önerilen uygulama olan MD Yoğunluk oranını kullanın veya hassasiyete sabitlendiyseniz veya tasarımınızın fiziksel boyutlar hakkında kesinlikle tutarlı olması gerekiyorsa: belirli veya yaygın olan ppi / dpi değerlerini kullanarak doğru dönüşümü kullanın cihazlar (ki bu oldukça çılgınca), Google Resizer çevrimiçi aracında kolayca test edebileceğiniz şeydir, çünkü öncelikle MD Guide'da önerilen ortak eşiklere ve oran ve ilgili görüntüleme türü adları için bölme kurallarına (xlarge, medium vb. ) uygulanmaktadır.
Bu nedenle , referans dp eşit piksel boyutunun mdpi çözünürlüğü (160) olduğunu hatırlatarak tablodaki MD oranlarına sadık kalın ve iyi olacaksınız.
em/rem
her yerde s kullanmayı tercih edebilir ve ardından her çözünürlük için temel yazı tipi boyutunu ölçekleyebilirsiniz.