私は、ビューポートとその中のコンテンツが、WebViewまたはネイティブブラウザーでコンテンツを描画するために使用されるビューポートメタタグによってどのように影響を受けるかを判断しようとしました。
私が遭遇したのは、明らかな矛盾です。画像とビューポートサイズを表示するためのJavaScriptを含む小さなページ(以下を参照)を作成し、画像のスケーリングを視覚的に確認し、正確な数値を取得できるようにしました。
まず、いくつかの観察:
デバイス#1:物理画面は1024x600で、実行中Android 2.2。
デバイス#2:物理画面は800x480で、実行中Android 2.3.2。
これらの結果のうち、以下は意味をなしません。
誰も意味をなさないもので何が起こっているか知っていますか?
なぜ多くの値が物理ピクセルと一致するのが10ピクセル恥ずかしがるのか誰もが知っていますか?しかし、結果は一致するかのようです? (例:1.7および2.6)
私は何か間違ったことをしていますか、またはユーザーがスケーリングを許可され、最小スケール値が設定されていない限り、1.0を超えてズームアウトすることは不可能と思われますか?
つまり、有効な値は0.01〜10ですが、最小スケールも設定できない限り、1.0未満の初期スケール値は無視されます。
Android docs do user-scalableがnoの場合、最小/最大スケール値は無視されます。それはあまり有用ではないようです。また、2.9-2.11は、自分で計算して幅を設定することはできないことを示しているようです。
最後に、私が使用しているHTML:
<html>
<script src="http://code.jquery.com/jquery-1.4.4.js"></script>
<head>
<meta name="viewport" content="initial-scale=0.5, width=device-width, target-densitydpi=device-dpi, minimum-scale=0.1, user-scalable=no" />
</head>
<body style="margin:0;">
<div id="bld" class="bld" style="position:absolute; width:250px; height:125px; left:50px; background-color:#ccccff;">Hello world.</div>
<img id="bl1" src="http://commondatastorage.googleapis.com/kf6nvr/images/1024x768.png" />
<script>
$("#bl1").click(function(){
var pageWidth = $(document).width();
var pageHeight = $(document).height();
var viewportWidth = $(window).width();
var viewportHeight = $(window).height();
$("#bld").html("Page width: "+pageWidth+"<br />pageHeight: "+pageHeight+"<br />port width: "+viewportWidth+"<br />port height: "+viewportHeight);
});
</script>
</body>
</html>
だから...私は何が欠けていますか?
あなたがそこに開いたワームの興味深い缶。より多くのデバイスを試してみると、おそらくさらに奇妙で、ランダムなバグが発生するでしょう。興味深い時代! :-)
あなたはあきらめたいと思うかもしれないと思うので、ただ試してみてください...
border-image
sおよびbackground-image
sを、よくサポートされている background-size
プロパティと組み合わせて使用します1 物事を素敵で鮮明にする2。1) 古いブラウザ(MSIE8など)との後方互換性を提供するには、二重のbackground-image
宣言を使用する必要があります。
background-image: url(low-res.png); /* CSS2 */
background-image: url(high-res.png), none; /* CSS3 */
background-size: 100px 10px; /* CSS3 */
2) -webkit-max-device-pixel-ratio
メディアクエリも役立ちますが、名前が示すように、Webkitブラウザーでのみ機能します。
ランブル:
新世代のAndroidとiOSデバイスには、実際のデバイスピクセルではなく、レポート CSSピクセル に頼るほどのさまざまな画面DPIがあります。これは良いか悪いかの両方-あなたがそれを見る方法に応じて。
これはbadです。これは、これまで使用していたデバイスピクセルまでのコントロールがほとんど保証されておらず、ほとんど同種の画面で作業しているためです。昔の。
一方、goodは、デザインが非常に小さくレンダリングされないため、通常の人間が読み取ったり使用したりできないことがわかっているためです。
target-densitydpi=device-dpi
を使用する際の問題は、7インチ幅の800px画面では驚くほど機能しますが、4インチ幅の960px画面ではアプリケーションが完全に台無しになることです。
$(document).ready(function() {
$('meta[name=viewport]').attr('content','width=1024, user-scalable=no');
});
正しいスケーリングが適用された後、ユーザーのスケーリングを無効にするために動作するようです