Was genau ist das Pixelverhältnis des Geräts?

170

Dies wird in jedem Artikel über das mobile Web erwähnt, aber nirgends kann ich eine Erklärung dafür finden, was genau dieses Attribut misst.
Kann jemand bitte näher erläutern, was Anfragen wie diese Prüfung?

@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
only screen and (min--moz-device-pixel-ratio: 1.5),
only screen and (-o-device-pixel-ratio: 3/2), 
only screen and (min-device-pixel-ratio: 1.5) {

    //high resolution images go here

}
ilyo
quelle

Antworten:

161

Kurze Antwort

Das Gerätepixelverhältnis ist das Verhältnis zwischen physischen Pixeln und logischen Pixeln. Beispielsweise geben das iPhone 4 und das iPhone 4S ein Gerätepixelverhältnis von 2 an, da die physikalische lineare Auflösung doppelt so hoch ist wie die logische lineare Auflösung.

  • Physikalische Auflösung: 960 x 640
  • Logische Auflösung: 480 x 320

Die Formel lautet:

linres_p / linres_l

Wo:

linres_pist die physikalische lineare Auflösung

und:

linres_list die logische lineare Auflösung

Andere Geräte melden unterschiedliche Gerätepixelverhältnisse, einschließlich nicht ganzzahliger. Das Nokia Lumia 1020 meldet beispielsweise 1,6667, das Samsumg Galaxy S4 3 und das Apple iPhone 6 Plus 2,46 (Quelle: dpilove ) . Dies ändert jedoch im Prinzip nichts, da Sie niemals für ein bestimmtes Gerät entwerfen sollten.

Diskussion

Das CSS- "Pixel" wird nicht einmal als "ein Bildelement auf einem Bildschirm" definiert, sondern als nichtlineare Winkelmessung des 0,0213 °Betrachtungswinkels, der 1/96bei Armlänge ungefähr einen Zoll beträgt. Quelle: CSS Absolute Längen

Dies hat viele Auswirkungen auf das Webdesign, z. B. die Vorbereitung hochauflösender Bildressourcen und das sorgfältige Anwenden verschiedener Bilder mit unterschiedlichen Pixelverhältnissen des Geräts. Sie möchten ein Low-End-Gerät nicht zwingen, ein Bild mit sehr hoher Auflösung herunterzuladen, sondern es nur lokal zu verkleinern. Sie möchten auch nicht, dass High-End-Geräte Bilder mit niedriger Auflösung für eine verschwommene Benutzererfahrung hochskalieren.

Wenn Sie mit Bitmap-Bildern nicht weiterkommen, um viele verschiedene Gerätepixelverhältnisse zu berücksichtigen, sollten Sie CSS-Medienabfragen verwenden , um verschiedene Ressourcensätze für verschiedene Gerätegruppen bereitzustellen. Kombinieren Sie dies mit netten Tricks wie background-size: coveroder setzen Sie die background-sizeProzentwerte explizit .

Beispiel

#element { background-image: url('lores.png'); }

@media only screen and (min-device-pixel-ratio: 2) {
    #element { background-image: url('hires.png'); }
}

@media only screen and (min-device-pixel-ratio: 3) {
    #element { background-image: url('superhires.png'); }
}

Auf diese Weise lädt jeder Gerätetyp nur die richtige Bildressource. Beachten Sie auch, dass die pxEinheit in CSS immer mit logischen Pixeln arbeitet .

Ein Fall für Vektorgrafiken

Da immer mehr Gerätetypen auftreten, wird es schwieriger, alle mit angemessenen Bitmap-Ressourcen zu versorgen. In CSS sind Medienabfragen derzeit die einzige Möglichkeit, und in HTML5 können Sie mit dem Bildelement verschiedene Quellen für verschiedene Medienabfragen verwenden. Die Unterstützung ist jedoch immer noch nicht 100%, da die meisten Webentwickler IE11 noch eine Weile länger unterstützen müssen ( Quelle: caniuse ) .

Wenn Sie gestochen scharfe Bilder für Symbole, Strichzeichnungen und Designelemente benötigen , die keine Fotos sind , müssen Sie über SVG nachdenken, das sich wunderbar auf alle Auflösungen skalieren lässt.

Anders Tornblad
quelle
1
Danke, wenn ich also eine CSS-Datei für das iPhone 4 erstelle und der Seite CSS-Maße von 480 x 320 width=device-widthgebe und ich sie auf Vollbild strecken lasse?
Ilyo
1
Genau. Und wenn Sie hochauflösende Bilder für verwenden background-image, können Sie diese mit kombinieren -webkit-background-size:50%, da sonst die Bildgröße der logischen Pixelanzahl folgt . w3.org/TR/2002/WD-css3-background-20020802/#background-size
Anders Tornblad
2
Das kannst du nicht. Sie müssen Ihre Elemente mit logischen Pixeln gestalten und Bilder mit höherer Auflösung und den background-sizeTrick verwenden, um die Anzeige optimal zu nutzen.
Anders Tornblad
2
Ich habe keine Ahnung von dem Android-Fall. Es kann sein, dass verschiedene Hersteller unterschiedliche Vorstellungen von logischen und physischen Pixeln haben ... Probieren Sie es selbst an ein paar hundert verschiedenen Geräten aus ... Oder nehmen Sie einfach an, dass die vom Gerät gemeldeten Werte korrekt sind. Entwerfen Sie nicht für bestimmte Geräte, sondern für Wertebereiche mithilfe von Medienabfragen!
Anders Tornblad
2
@atornblad Ich denke, es sollte ".. zwischen physischen und logischen Pixeln" sein
Ilya Buziuk
159

Gerätepixelverhältnis == CSS-Pixelverhältnis

In der Welt der Webentwicklung bestimmt das Pixelverhältnis des Geräts (auch als CSS-Pixelverhältnis bezeichnet), wie die Bildschirmauflösung eines Geräts vom CSS interpretiert wird.

Das CSS eines Browsers berechnet die logische (oder interpretierte) Auflösung eines Geräts anhand der folgenden Formel:

Formel

Beispielsweise:

Apple iPhone 6s

  • Tatsächliche Auflösung: 750 x 1334
  • CSS-Pixelverhältnis: 2
  • Logische Auflösung:

Formel

Beim Anzeigen einer Webseite glaubt das CSS, dass das Gerät einen Bildschirm mit einer Auflösung von 375 x 667 hat , und Medienabfragen reagieren so, als ob der Bildschirm 375 x 667 ist . Die gerenderten Elemente auf dem Bildschirm sind jedoch doppelt so scharf wie bei einem tatsächlichen 375 x 667-Bildschirm, da der physische Bildschirm doppelt so viele physische Pixel enthält.

Einige andere Beispiele:

Samsung Galaxy S4

  • Tatsächliche Auflösung: 1080 x 1920
  • CSS-Pixelverhältnis: 3
  • Logische Auflösung:

Formel

iPhone 5s

  • Tatsächliche Auflösung: 640 x 1136
  • CSS-Pixelverhältnis: 2
  • Logische Auflösung:

Formel

Warum existiert das Gerätepixelverhältnis?

Der Grund dafür, dass das CSS-Pixelverhältnis erstellt wurde, liegt darin, dass Webseiten mit höheren Auflösungen eine höhere Auflösung aufweisen und Webseiten zu klein sind, um angezeigt zu werden, wenn jedes Gerät noch ein CSS-Pixelverhältnis von 1 aufweist.

Ein typischer Vollbild-Desktop-Monitor hat eine Auflösung von ca. 24 Zoll bei einer Auflösung von 1920 x 1080. Stellen Sie sich vor, dieser Monitor wäre auf ca. 5 Zoll verkleinert, hätte aber dieselbe Auflösung. Das Betrachten von Dingen auf dem Bildschirm wäre unmöglich, weil sie so klein wären. Aber die Hersteller kommen jetzt konsequent mit Telefonbildschirmen mit einer Auflösung von 1920 x 1080 heraus.

Daher wurde das Pixelverhältnis des Geräts von Telefonherstellern erfunden, damit sie die Auflösung, Schärfe und Qualität von Telefonbildschirmen weiter verbessern können, ohne dass Elemente auf dem Bildschirm zu klein sind, um sie zu sehen oder zu lesen.

Hier ist ein Tool, das Ihnen auch die Pixeldichte Ihres aktuellen Geräts anzeigt:

http://bjango.com/articles/min-device-pixel-ratio/

Jake Wilson
quelle
Wikipedia-Artikel wurde gelöscht. :-( Sind diese Informationen irgendwo anders verfügbar?
Simon East
1
Daher werden Bilder so gestreckt, dass sie mit hohen dpi oder physischen Pixeln übereinstimmen. Angenommen, das Bild ist 300px, das logische / CSS-px ist auch 300px, aber das physische px ist 600, dann würde das Einstellen der Bildbreite bedeuten, dass das Bild gestreckt wurde. Ich habe auch gehört, dass Bilder bei hoher Auflösung manchmal kleiner sind. Warum?
Muhammad Umer
2
@MuhammadUmer In Ihrem Beispiel entspricht ein 300px-Bild mit width: 100%der vollen Breite der Anzeige. Es wird nicht gedehnt. Der Bildschirm "denkt", dass es sich um ein 300px-Display handelt. Bilder werden entsprechend der logischen / CSS-Auflösung angezeigt. In Ihrem Beispiel können Sie jetzt auch ein 600px-Bild bereitstellen. Dies entspricht der vollen Breite des logischen 300-Pixel-Displays. Da Ihr Display jedoch ein natives 600-Pixel-Display ist, sieht das Bild doppelt so scharf aus wie Ihr ursprüngliches 300-Pixel-Bild. Größeres Bild, aber es sieht besser aus, da das Display all diese zusätzlichen Pixel hat. Dies ist die Idee hinter "Retina Displays".
Jake Wilson
@ JakeWilson: Dies ist ein neues Thema für mich und ich verstehe es nicht ganz. Im Beispiel CSS-Pixelverhältnis = 2. Das Bild ist 300 physische Pixel breit. In CSS setzen wir es auf 100%, sodass es 300 CSS-Pixel breit wird. Da das CSS-px-Verhältnis 2 beträgt, wird es 600 physische Pixel breit und seine Breite entspricht genau der Breite des Displays. Aber warum wird es nicht gedehnt, wenn seine ursprüngliche Breite 300 physische Pixel beträgt und jetzt 600 physische Pixel? Mein Verständnis ist, dass seine Qualität geringer ist, weil es physisch von 300 auf 600px gedehnt wurde. Können Sie das bitte etwas näher erläutern?
Peter
1
@ Anuj Ich weiß es nicht und es spielt keine Rolle, wie es in der Hardware / Software definiert ist. Einer wird aus dem anderen berechnet, so oder so, wie Sie es schneiden.
Jake Wilson
9

https://developer.mozilla.org/en/CSS/Media_queries#-moz-device-pixel-ratio

-moz-device-pixel-ratio
Gibt die Anzahl der Gerätepixel pro CSS-Pixel an.

das ist fast selbsterklärend. Die Zahl beschreibt das Verhältnis, wie viel "echte" Pixel (physische Pixel des Bildschirms) zum Anzeigen eines "virtuellen" Pixels (in CSS festgelegte Größe) verwendet werden.

oezi
quelle
4
Woher weiß ich, ob ein Gerät überhaupt eine virtuelle Pixelmessung verwendet und was es ist? und wie verwende ich die Gerätepixel in den CSS-Messungen und nicht die virtuellen?
Ilyo
Leider müssen Sie es googeln oder auf einem realen Gerät testen :(
Netalex
9

Boris Smus 'Artikel Hochauflösende Bilder für variable Pixeldichten enthält eine genauere Definition des Gerätepixelverhältnisses : Die Anzahl der Gerätepixel pro CSS-Pixel ist eine gute Annäherung, aber nicht die ganze Geschichte.

Beachten Sie, dass Sie den DPR von einem Gerät mit verwenden lassen können window.devicePixelRatio.

Sam Dutton
quelle