Você não pode realmente obter as dimensões físicas reais ou o DPI real e, mesmo se pudesse, você não pode fazer nada com eles.
Esta é uma história muito longa e complexa, então me perdoe.
A web e todos os navegadores definem 1px como uma unidade chamada pixel CSS. Um pixel CSS não é um pixel real, e sim uma unidade considerada 1/96 de polegada com base no ângulo de visão do dispositivo. Isso é especificado como um pixel de referência .
O pixel de referência é o ângulo visual de um pixel em um dispositivo com uma densidade de pixels de 96dpi e a uma distância de um braço do leitor. Para um comprimento nominal de braço de 28 polegadas, o ângulo visual é, portanto, cerca de 0,0213 graus. Para leitura no comprimento do braço, 1px corresponde a cerca de 0,26 mm (1/96 polegada).
Em 0,26 mm de espaço, podemos ter muitos pixels de dispositivos reais.
O navegador faz isso principalmente por motivos legados - a maioria dos monitores tinha 96 dpi quando a web nasceu - mas também por consistência, nos "velhos tempos" um botão de 22 pixels em uma tela de 15 polegadas a 800x600 teria o dobro do tamanho de um botão de 22 pixels em um monitor de 15 polegadas em 1600x1200. Neste caso, o DPI da tela é na verdade 2x (duas vezes a resolução horizontalmente, mas no mesmo espaço físico). Esta é uma situação ruim para a web e aplicativos, então a maioria dos sistemas operacionais inventou muitas maneiras de abstrair valores de pixel em unidades independentes de dispositivo (DIPS no Android, PT no iOS e CSS Pixel na web ).
O navegador Safari do iPhone foi o primeiro (até onde sei) a introduzir o conceito de janela de visualização. Isso foi criado para permitir que aplicativos de estilo desktop completo sejam renderizados em uma tela pequena. A janela de visualização foi definida para ter 960 px de largura. Isso basicamente ampliou a página 3x (o iphone tinha originalmente 320px), então 1 pixel CSS é 1/3 de um pixel físico. Ao definir uma janela de visualização, você pode fazer com que este dispositivo corresponda a 1 pixel CSS = 1 pixel real a 163dpi.
Ao usar uma janela de visualização em que a largura é "largura do dispositivo", você não precisa mais definir a largura da janela de visualização por dispositivo para o tamanho de pixel CSS ideal, o navegador faz isso por você.
Com a introdução de dispositivos de DPI duplo, os fabricantes de telefones celulares não queriam que as páginas móveis parecessem 50% menores, então eles introduziram um conceito chamado devicePixelRatio (primeiro no webkit móvel, eu acredito), que os permite manter 1 pixel CSS em cerca de 1 / 96º de polegada, mas permite que você entenda que seus ativos, como imagens, podem precisar ter o dobro do tamanho. Se você olhar para a série do iPhone, todos os seus dispositivos dizem que a largura da tela em pixels CSS é de 320 px , embora saibamos que isso não é verdade.
Portanto, se você criou um botão para ter 22 pixels no espaço CSS, a representação na tela física é a proporção de pixels do dispositivo de 22 *. Na verdade, eu digo isso, não é exatamente isso porque a proporção de pixels do dispositivo nunca é exata também, os fabricantes de telefones configuram um bom número como 2.0, 3.0 em vez de 2.1329857289918 ....
Resumindo, os pixels CSS são independentes do dispositivo e não precisamos nos preocupar com os tamanhos físicos das telas e as densidades de exibição, etc.
A moral da história é: não se preocupe em entender o tamanho físico do pixel da tela. Você não precisa disso. 50px deve ser praticamente o mesmo em todos os dispositivos móveis, pode variar um pouco, mas o Pixel CSS é nossa forma independente de dispositivo para construir documentos e IUs consistentes
Recursos: