Non puoi davvero ottenere le dimensioni fisiche reali o il DPI effettivo e anche se potessi, non puoi farci nulla.
Questa è una storia piuttosto lunga e complessa, quindi perdonami.
Il web e tutti i browser definiscono 1px come un'unità chiamata pixel CSS. Un pixel CSS non è un pixel reale, piuttosto un'unità considerata pari a 1/96 di pollice in base all'angolo di visualizzazione del dispositivo. Viene specificato come pixel di riferimento .
Il pixel di riferimento è l'angolo visivo di un pixel su un dispositivo con una densità di pixel di 96 dpi e una distanza dal lettore della lunghezza di un braccio. Per una lunghezza nominale del braccio di 28 pollici, l'angolo visivo è quindi di circa 0,0213 gradi. Per la lettura a distanza di un braccio, 1px corrisponde quindi a circa 0,26 mm (1/96 di pollice).
In 0,26 mm di spazio potremmo avere molti pixel reali del dispositivo.
Il browser lo fa principalmente per motivi legacy - la maggior parte dei monitor era a 96 dpi quando è nato il Web - ma anche per coerenza, ai "vecchi tempi" un pulsante da 22 px su uno schermo da 15 pollici a 800x600 sarebbe il doppio di un pulsante da 22 px su un monitor da 15 pollici a 1600x1200. In questo caso il DPI dello schermo è effettivamente 2x (il doppio della risoluzione in orizzontale ma nello stesso spazio fisico). Questa è una brutta situazione per il Web e le app, quindi la maggior parte dei sistemi operativi ha escogitato molti modi per astrarre i valori dei pixel in unità indipendenti dal dispositivo (DIPS su Android, PT su iOS e CSS Pixel sul web ).
Il browser iPhone Safari è stato il primo (a mia conoscenza) ad introdurre il concetto di viewport. Questo è stato creato per abilitare il rendering di applicazioni in stile desktop completo su un piccolo schermo. La visualizzazione è stata definita per essere larga 960 px. Questo essenzialmente ha ingrandito la pagina 3x (iPhone era originariamente 320px) quindi 1 pixel CSS è 1/3 di un pixel fisico. Quando hai definito una visualizzazione, potresti fare in modo che questo dispositivo corrisponda a 1 pixel CSS = 1 pixel reale a 163 dpi.
Utilizzando un viewport in cui la larghezza è "device-width" ti evita di dover impostare la larghezza del viewport in base al dispositivo sulla dimensione ottimale in pixel CSS, il browser lo fa per te.
Con l'introduzione dei dispositivi a doppio DPI, i produttori di telefoni cellulari non volevano che le pagine per dispositivi mobili apparissero più piccole del 50%, quindi hanno introdotto un concetto chiamato devicePixelRatio (il primo su mobile webkit credo), questo consente loro di mantenere 1 pixel CSS all'incirca 1 / 96esimo di pollice ma ti fa capire che le tue risorse come le immagini potrebbero dover essere il doppio delle dimensioni. Se guardi la serie iPhone, tutti i loro dispositivi dicono che la larghezza dello schermo in pixel CSS è 320px anche se sappiamo che non è vero.
Pertanto, se hai impostato un pulsante in modo che sia 22px nello spazio CSS, la rappresentazione sullo schermo fisico è il rapporto pixel del dispositivo di 22 *. In realtà dico questo, non è esattamente questo perché il rapporto pixel del dispositivo non è mai esatto, i produttori di telefoni lo impostano su un bel numero come 2.0, 3.0 anziché 2.1329857289918 ....
In sintesi, i pixel CSS sono indipendenti dal dispositivo e non dobbiamo preoccuparci delle dimensioni fisiche degli schermi e delle densità di visualizzazione, ecc.
La morale della storia è: non preoccuparti di capire la dimensione fisica dei pixel dello schermo. Non ne hai bisogno. 50px dovrebbe avere più o meno lo stesso aspetto su tutti i dispositivi mobili, potrebbe variare leggermente, ma CSS Pixel è il nostro modo indipendente dal dispositivo per creare documenti e interfacce utente coerenti
Risorse: