Es gibt keine richtige Antwort, es gibt tatsächlich zwei:
- Von Google empfohlen (z. B. im Udacity-Kurs über Materialdesign): Verwenden Sie eine einfache Konvertierung, die in vielen Fällen genau wie in der Polymerbibliothek 1: 1 ist. Es ist beispielsweise nicht für die Retina-Anzeige geeignet. Verwenden Sie daher anstelle von 1: 1 ein Dichteverhältnis, das in der Gerätetabelle im offiziellen Material Design Guide ( Tabelle mit Verhältnissen und spezifischen Metriken für einige gängige Geräte ) angegeben ist, und geben Sie geeignete @media-Abfragen für an Auflösungsschwellen und Assets, unter der Annahme, dass 1dp für eine mdpi-Anzeige (160dpi / ppi) gleich 1px ist .
Hinweis: Gesamtidee: am unteren Rand der Seite: Bildskalierung mit einigen Bildern zur Visualisierung der Verhältnisse für mehrere Schwellenwerte für die Bildschirmauflösung (Haltepunktbild)
- Wenn Sie eine ultrakonsistente Gestaltung für bestimmte Geräte wünschen , müssen Sie mehr Nachforschungen und Berechnungen anstellen, und was wichtiger ist, ist ein Stapel weiterer @media - Abfragen, um so viele Geräte zu unterstützen, wie Sie möchten, und Fallback - Funktionen bereitzustellen (mit dem Methode, die an erster Stelle erwähnt wurde) für diejenigen, die Sie nicht so sehr interessieren.
Hier finden Sie detailliertere Informationen für diejenigen, die sich eingehender mit dem Thema befassen möchten. Dies ist jedoch eine Erklärung und Logik. Die obigen Ausführungen sind eine vollständige Antwort :
Die Sache ist, dass "Pixeldichte" laut dem offiziellen Leitfaden von Material Design (Layout> Einheiten und Maße) ist:
Die Anzahl der Pixel, die in einen Zoll passen.
Die Pixeldichte ist also im Grunde genommen ein neuer Name für einen ppi-Wert oder ein dpi-Wert, den viele Leute nicht als eigenständiges Element erkennen.
Definition von 1dp nach dem gleichen Leitfaden:
Ein dp entspricht einem physikalischen Pixel auf einem Bildschirm mit einer Dichte von 160 . Dp berechnen:
dp = (Breite in Pixel * 160) / Bildschirmdichte
Verwenden Sie beim Schreiben von CSS px, wo dp oder sp angegeben sind. Dp muss nur bei der Entwicklung für Android verwendet werden.
Kernprinzip des Materialdesigns ist die Beibehaltung einheitlicher physischer Dimensionen über verschiedene Plattformen hinweg, was das Problem der Desktopauflösung, des ppi (/ dpi) und des css-Pixels aufwirft. In diesem Fall sollten Sie wie im Fall von Android bei der Berechnung des dp bleiben Geräte, und es ist nicht wahr, dass die meisten Bildschirme 96ppi sind (eine Annahme, die für CSS wichtig ist), ein großer Teil von ihnen hat ein etwas höheres ppi, und wenn Sie nicht nur traditionelle Desktops, sondern auch normale Laptops berücksichtigen Für Tablets oder "Convertibles" wie "Surface" ist eine Konvertierung erforderlich: Diese reichen normalerweise von 100 bis 130 ppi, wobei der Wert, den ich derzeit verwende, 127 ppi beträgt:
100% = 160ppi -> physikalische 1 Pixel Breite = 1dp -> Rechteck 100x100px = 100x100dp
79% = 127ppi -> physikalische 1 Pixel Breite = ca. 0,8dp -> Rechteck 100x100px = 80x80dp
Obwohl dp ein reines und neues Gerät nur für Android ist, sollten Sie einige Berechnungen durchführen, um die MD-Layouts anzupassen, die alle in dp enthalten sind. Wenn Sie eine genauere Vorstellung davon haben möchten, wie groß das spezifische Element im physischen Sinne sein wird, ist der Wert für den idealen Berührungsgrößenbereich in den Materialdesignrichtlinien für bestimmte Geräte der nützlichste für den Zweck der Frage eine physische. ** Der dp-Wert ändert sich, aber der physikalische Wert bleibt gleich.
Das Problem, warum Sie Einheiten berechnen müssen, wird im Android API-Handbuch (Konvertieren von dp-Einheiten in Pixeleinheiten) näher erläutert. Es gilt weiterhin für mit CSS gestaltete Elemente:
In einigen Fällen müssen Sie Dimensionen in dp ausdrücken und sie anschließend in Pixel konvertieren.
Stellen Sie sich eine Anwendung vor, in der eine Bildlauf- oder Schleudergeste erkannt wird, nachdem sich der Finger des Benutzers um mindestens 16 Pixel bewegt hat. Auf einem Basisbildschirm muss sich der Benutzer um 16 Pixel / 160 dpi bewegen, was einem Zehntel Zoll (oder 2,5 mm) entspricht, bevor die Geste erkannt wird. Auf einem Gerät mit einer Anzeige mit hoher Dichte (240 dpi) muss sich der Benutzer um 16 Pixel / 240 dpi bewegen, was 1/15 Zoll (oder 1,7 mm) entspricht. Die Entfernung ist viel kürzer und die Anwendung erscheint dem Benutzer daher empfindlicher.
Die zuvor erwähnte Polymerumwandlung 1: 1 ist wahrscheinlich darauf zurückzuführen, dass die Dichte von 96 dpi oder sogar die von mir angegebene Dichte irgendwo in einer niedrigen Dichte oder sogar (wie im Fall von 96 dpi) darunter liegt. Unter Berücksichtigung der Tatsache, dass der dp-Wert nicht als CSS akzeptiert wird, ist es einfacher anzunehmen, dass das Dichteverhältnis (0,75 für niedrig, 1,0 für mittel usw.) dasjenige ist, das zur Vereinfachung und für mehrere Größen verwendet werden sollte Bildschirmunterstützung, die in der Gerätetabelle für Material Design (siehe oben) aufgeführt ist. Es wird sogar als eine der Best Practices im oben genannten Kapitel des Android API-Handbuchs erwähnt. Und hier könnte die Polymerumwandlung 1: 1 gut sein, da viele Geräte das Dichteverhältnis auf Stufe 1 haben.
Zurück zum letzten Dilemma: das CSS PX, wenn Sie sich entscheiden, in subtile Nuancen verschiedener Geräte einzutauchen. Wenn Sie nicht so anfragend sind, halten Sie sich einfach an das Dichteverhältnis aus der MD-Tabelle. Aber wenn Sie ein Perfektionist sind, hat dieser Zusammenhang zwischen CSS-Pixeln und physischen Dimensionen eine perfekte (und ziemlich einfache Erklärung) in einer W3C-Kandidatenempfehlung:
Die absoluten Längeneinheiten sind relativ zueinander festgelegt und auf einem physikalischen Maß verankert. Sie sind hauptsächlich dann nützlich, wenn die Ausgabeumgebung bekannt ist. Die absoluten Einheiten bestehen aus den physikalischen Einheiten ('in', 'cm', 'mm', 'pt', 'pc', 'q') und der Einheit für den visuellen Winkel ('px') :
Beim Ablesen auf Armlänge entspricht 1px also etwa 0,26 mm (1/96 Zoll).
Hinweis: Beachten Sie, dass sich diese Definition der Pixeleinheit und der physischen Einheiten von früheren Versionen von CSS unterscheidet. Insbesondere in früheren Versionen von CSS standen die Pixeleinheit und die physikalischen Einheiten nicht in einem festen Verhältnis zueinander: Die physikalischen Einheiten waren immer an ihre physikalischen Abmessungen gebunden, während die Pixeleinheit so variierte, dass sie dem Referenzpixel am ehesten entsprach. (Diese Änderung wurde vorgenommen, weil zu viel vorhandener Inhalt von der Annahme von 96 dpi abhängt, und wenn diese Annahme gebrochen wird, bricht der Inhalt.)
Diese neue Definition von px (unter Berücksichtigung der physischen Dimensionen) füllt die Lücke zwischen CSS-Pixeln und dps und lässt uns mithilfe einfacher Messberechnungen sicherstellen, dass die sogenannte Ausgabeumgebung, die in diesem Fall konsistent ist (im physischen Sinne) ) MD-Layout , bleibt auf verschiedenen Geräten und Plattformen gleich. Darüber hinaus verwenden sowohl die W3C- als auch die MD-Richtlinien Gerätebilder mit niedriger und hoher Auflösung, um die Grundidee der Pixel- / Punktabdeckung zu veranschaulichen. Auf einem hochauflösenden Gerät sind mehr Gerätepixel (Punkte) erforderlich, um einen Bereich von 1 x 1 Pixel abzudecken Dies bedeutet, dass die in CSS-Abfragen für die Retina-Anzeige weit verbreiteten Funktionen dasselbe sind, das Sie für Material Design und alle Mobilgeräte bereitstellen müssen (jedoch mit mehr Schwellenwerten).
Verwenden Sie abschließend entweder das von Google empfohlene MD-Dichteverhältnis oder, wenn Sie auf Präzision fixiert sind oder wenn Ihr Design in Bezug auf die physischen Größen absolut konsistent sein muss, die genaue Konvertierung unter Verwendung von ppi / dpi-Werten der spezifischen oder allgemeinen Werte Geräte (was ziemlich verrückt ist), was Sie leicht mit dem Google Resizer-Online-Tool testen können, da sie die in MD Guide empfohlenen gemeinsamen Schwellenwerte und Teilungsregeln für das Verhältnis und die relevanten Namen der Anzeigetypen (xlarge, medium und so weiter) einhalten ) implementiert.
Halten Sie sich also an die MD-Verhältnisse in der Tabelle, und denken Sie daran, dass die Referenz-Pixelgröße dp gleich der Auflösung von mdpi (160) entspricht .
em/rem
überall s verwenden und dann die Grundschriftgröße für jede Auflösung skalieren.