J’ai essayé de déterminer comment la fenêtre d’affichage – et le contenu de celle-ci – sont affectés par la balise META de fenêtre d’affichage utilisée pour dessiner du contenu avec WebView ou avec le navigateur natif.
Ce que j’ai rencontré sont des incohérences apparentes. J’ai créé une petite page (voir ci-dessous) avec une image et du javascript pour afficher la taille de la fenêtre afin que je puisse voir visuellement la mise à l’échelle avec l’image et obtenir les chiffres exacts.
Tout d’abord, quelques observations:
Device # 1: L’écran physique est 1024×600 et il tourne sous Android 2.2.
Device # 2: L’écran physique est 800×480 et il tourne sous Android 2.3.2.
Parmi ces résultats, les suivants n’ont pas de sens:
Est-ce que quelqu’un sait ce qui se passe avec ceux qui n’ont pas de sens?
Est-ce que quelqu’un sait pourquoi la plupart des valeurs ont 10 pixels de moins que les pixels physiques, mais ce résultat est comme si elles correspondaient? (ex: 1.7 et 2.6)
Est-ce que je fais quelque chose de mal, ou semble-t-il impossible de faire un zoom arrière au-delà de 1,0, à moins que l’utilisateur ne soit autorisé à mettre à l’échelle et que la valeur minimale soit définie?
En d’autres termes, même si les valeurs valides sont comsockets entre 0,01 et 10, les valeurs d’échelle initiales inférieures à 1,0 sont ignorées, sauf si vous pouvez également définir l’échelle minimale.
Les documents Android indiquent que lorsque les données sont évolutives, les valeurs min / max ne sont pas sockets en compte. Cela ne semble pas très utile. Et 2.9-2.11 semblent montrer que vous ne pouvez pas simplement le calculer vous-même et définir la largeur.
Enfin, le code HTML que j’utilise:
Hello world.
$("#bl1").click(function(){ var pageWidth = $(document).width(); var pageHeight = $(document).height(); var viewportWidth = $(window).width(); var viewportHeight = $(window).height(); $("#bld").html("Page width: "+pageWidth+"
pageHeight: "+pageHeight+"
port width: "+viewportWidth+"
port height: "+viewportHeight); });
Alors … qu’est ce qui me manque?
Canette intéressante de vers que vous avez ouverte là-bas. Au fur et à mesure que vous essayez plus d’appareils, vous verrez probablement encore plus de bizarreries et de bugs aléatoires. Temps intéressants! 🙂
Je pense que quelque part, vous voudrez peut-être abandonner, et essayez simplement de …
border-image
haute résolution ainsi que background-image
associées à la propriété de background-size
bien supscope 1 pour rendre les choses plus claires et nettes 2 . 1) Pour assurer la rétrocompatibilité aux navigateurs plus anciens (comme MSIE8), vous devez utiliser des déclarations à double background-image
, comme par exemple:
background-image: url(low-res.png); /* CSS2 */ background-image: url(high-res.png), none; /* CSS3 */ background-size: 100px 10px; /* CSS3 */
2) La requête média -webkit-max-device-pixel-ratio
peut également aider, mais comme son nom l’indique, elle ne fonctionne que pour les navigateurs Webkit.
Randonnée:
Les appareils Android et iOS de nouvelle génération ont des DPI d’écran tellement différents qu’ils ont eu recours à la déclaration des pixels CSS plutôt qu’aux pixels réels de l’appareil. Ceci est à la fois bon ou mauvais – en fonction de la façon dont vous le regardez.
C’est mauvais parce que vous n’êtes plus assuré du contrôle de pixel par appareil que vous aviez l’habitude d’avoir, de travailler avec les écrans les plus homogènes du passé.
D’un autre côté, c’est bien parce que vous savez que vos conceptions ne seront jamais si petites qu’elles ne peuvent pas être lues / utilisées par des humains ordinaires.
Le problème avec l’utilisation de target-densitydpi=device-dpi
est que, même s’il fonctionne à merveille sur un écran de 800 pouces de largeur, il gâchera complètement votre application sur un écran de 960 pixels de large.
$(document).ready(function() { $('meta[name=viewport]').attr('content','width=1024, user-scalable=no'); });
Semble fonctionner pour désactiver la mise à l’échelle de l’utilisateur après l’application correcte de la mise à l’échelle