Je vois que c'est probablement une question noob, mais cela me confond vraiment.
Je lis des documents de Google Material Design, ainsi que certaines de ses implémentations en CSS. La spécification est écrite dans Android dp
, tandis que les codes CSS utilisent px
comme unité de longueur.
Ce qui m'embrouille, c'est que les implémentations css utilisent souvent la valeur exacte de la spécification, par exemple, un toast devrait avoir :
Hauteur du snack-bar à une ligne: 48 dp de hauteur
Largeur minimale: 288 dp
Coin arrondi 2 dp
min-height: 48px;
min-width: 288px;
...
border-radius: 2px;
Dans ma compréhension actuelle, un Android DP
est généralement affiché à la taille d'un pixel sur un écran de 160 dpi, tandis que le CSS px
est défini comme un angle visuel. Donc, un px
arrive- t- il à être le même que dp
lorsque vous voyez à une certaine distance? Si c'est le cas, est-ce un modèle commun à utiliser px
comme dp
dans CSS, ou ai-je mal compris le code CSS?
Je ne connais rien au développement Android avant, et pas un designer. Merci pour toute aide.
em/rem
s partout, puis simplement mettre à l'échelle la taille de police de base pour chaque résolution.Réponses:
Je pense que l'acceptation est fausse. Le px css est en fait un pixel indépendant du périphérique (dip), et il est courant d'utiliser px comme dp dans css.
la source
Je pense que la réponse complète à votre question se trouve ici:
/programming/2025282/difference-between-px-dp-dip-and-sp-in-android
Pour convertir dp en px, vous devez tenir compte des dimensions d'affichage auxquelles vous vous adressez. Plus le DPI est élevé, plus vous devrez entasser de pixels dans la même zone pour lui donner une belle apparence et éviter la pixellisation :
ldpi: 1 dp = 0,75 px
mdpi: 1 dp = 1 px
hdpi: 1 dp = 1,5 px
xhdpi: 1 dp = 2 px
xxhdpi: 1 dp = 3 px
xxxhdpi: 1 dp = 4 px
Par exemple:
Un carré dp 3x3 en CSS ou Photoshop doit être:
2,25x2,25 px - ldpi
3x3 px - mdpi (Samsung ACE, Xperia X8)
6x6 px - xhdpi (Xperia S, Google Nexus 4)
9x9 px - xxhdpi (Samsung S4 - S5, HTC One)
12x12 px - xxxhdpi (cette résolution) sera utilisé sur les appareils de prochaine génération)
Sur la base de ce qui précède, vos calculs devraient ressembler à ceci, en utilisant un multiplicateur 3x dp pour les écrans XXHDPI:
Android réduit automatiquement les images s'il constate que la résolution de l'appareil utilisé est inférieure, vous pouvez donc développer en toute sécurité avec XXHDPI, car il s'adresse à la majorité des appareils haut de gamme d'aujourd'hui sur le marché.
Voici un convertisseur simple pour faire le travail pour vous: http://androidpixels.net/
la source
Le W3C dit :
Et tout cela dit:
Cela dit aussi:
Compte tenu du fait que par défaut, les périphériques d'écran sont configurés en 96 dpi, c'est la meilleure hypothèse sur la façon dont les navigateurs interprètent un pixel CSS:
Et nous savons que dans Android:
Donc:
Et selon cela:
Eh bien, je pensais que c'était vrai jusqu'à ce que je vérifie la taille des toasts de Google Polymer :
Il s'agit donc d'une conversion de 1 à 1, et à partir de cela, nous avons obtenu que les navigateurs Android utilisent:
Et 96 css-px par pouce est utilisé sur d'autres appareils comme les ordinateurs de bureau et les ordinateurs portables.
Pour conclure: les pixels css sont indépendants du dpi de l'appareil et sur les appareils Android 1 css-px est égal à 1dp.
la source
Il n'y a pas qu'une seule bonne réponse, il y en a en fait deux:
Remarque: idée générale: en bas de la page: mise à l' échelle de l'image avec une image pour visualiser les ratios pour plusieurs seuils de résolution d'écran (image de point d'arrêt)
Voici des informations plus détaillées pour ceux qui souhaitent approfondir le sujet, mais c'est une explication et une logique derrière, ce qui précède est une réponse complète :
Le fait est que la "densité de pixels", selon le guide officiel de Material Design (Disposition> Unités et mesures), est:
Donc, fondamentalement, la densité de pixels est un nouveau nom pour une valeur ppi ou, car beaucoup de gens ne reconnaissent pas cela comme une chose distincte, une valeur dpi.
Définition de 1dp selon le même guide:
Le principe de base de la conception matérielle est de maintenir des dimensions physiques cohérentes sur différentes plates-formes, ce qui pose le problème de la résolution du bureau, du ppi (/ dpi) et du pixel css, auquel cas vous devriez vous en tenir au calcul du dp comme dans le cas d'Android et il n'est pas vrai que la plupart des écrans sont en 96ppi (c'est une hypothèse qui est importante pour CSS), une grande partie d'entre eux a un ppi un peu plus élevé, et si vous prenez en compte non seulement le bureau traditionnel mais aussi les ordinateurs portables ordinaires , ou les tablettes, ou les "convertibles" comme Surface, il y a un besoin pour la conversion: ils vont généralement de 100 à 130ppi, cela dit que celui que j'utilise en ce moment est 127ppi:
100% = 160ppi -> largeur physique de 1 pixel = 1dp -> rectangle 100x100px = 100x100dp
79% = 127ppi -> largeur physique de 1 pixel = env. 0,8dp -> rectangle 100x100px = 80x80dp
Bien que dp soit une unité pure et nouvelle uniquement pour Android, vous devriez faire quelques calculs afin d'adapter les dispositions MD qui viennent toutes en dp. Si vous voulez avoir une idée plus précise de la taille de l'élément spécifique au sens physique, le plus utile aux fins de la question est la valeur de la plage de taille de contact idéale dans les directives de conception des matériaux pour des appareils spécifiques ** En dessous de la valeur dp, il y a physique. ** La valeur dp change, mais le physique reste le même.
Le problème, pourquoi vous devez calculer les unités, est expliqué plus en détail dans le guide Android API (Conversion des unités dp en unités pixel) et s'applique toujours aux éléments stylisés avec CSS:
La conversion Polymère 1: 1 mentionnée précédemment est probablement due au fait que la densité de 96 dpi, ou même celle que j'ai donnée est quelque part en basse densité ou même (comme dans le cas de 96 dpi), même en dessous. Étant donné que la valeur dp n'est pas acceptée par css, il est plus facile de supposer que le rapport de densité (0,75 - pour faible, 1,0 moyen, etc.) est celui qui devrait être utilisé pour la simplification et la taille multiple prise en charge des écrans, qui est indiquée dans le tableau des périphériques pour Material Design mentionné précédemment. Il est même mentionné comme l'une des meilleures pratiques dans le chapitre ci-dessus du guide API Android. Et c'est là que la conversion polymère 1: 1 peut être bonne, car de nombreux appareils ont le rapport de densité au niveau 1.
Revenons au dernier dilemme: le css px, si vous décidez de plonger dans les nuances subtiles de différents appareils. Si vous n'êtes pas si curieux, respectez simplement le rapport de densité du tableau MD. Mais si vous êtes perfectionniste, ce nœud de pixels CSS et de relation entre les dimensions physiques a une explication parfaite (et assez simple) dans une recommandation candidate W3C:
Cette nouvelle définition de px (en tenant compte des dimensions physiques) comble l'écart entre les pixels CSS et les dps et nous permet de nous assurer qu'en utilisant de simples calculs de mesure, l' environnement dit de sortie, qui dans ce cas est cohérent (au sens physique) ) La disposition MD reste la même sur différents appareils et plates-formes. De plus, les directives W3C et MD utilisent les images des appareils à basse et haute résolution pour illustrer l'idée de base de la couverture pixel / points - plus de pixels de l'appareil (points) sont nécessaires pour couvrir une zone 1px par 1px sur un appareil haute résolution que sur une résolution basse, ce qui signifie que les largement utilisés dans les requêtes CSS pour l'affichage de la rétine sont en effet la même chose que vous devez fournir (mais avec plus de seuils) pour Material Design et tous les appareils mobiles.
En conclusion, utilisez le rapport de densité MD qui est la meilleure pratique recommandée par Google , ou si vous êtes obsédé par la précision ou que votre conception doit être absolument cohérente sur les tailles physiques: utilisez la conversion précise en utilisant les valeurs ppi / dpi des valeurs spécifiques ou courantes appareils (ce qui est assez fou), ce que vous pouvez facilement tester sur l'outil en ligne Google Resizer car ils respectent les seuils communs suggérés dans le guide MD en premier lieu et les règles de division pour le rapport et les noms de types d'affichage pertinents (xlarge, medium, etc.) ) qui y est mise en œuvre.
Donc, respectez les rapports MD du tableau en vous souvenant que la taille de pixel dp de référence est pour la résolution mdpi (160) et vous serez bon.
la source