ズームしてもモバイルブラウザで流体の改行を取得するにはどうすればよいですか?ズームしてもモバイルブラウザで液体の改行を取得するにはどうすればよいですか?
私はテキストが1列しかない非常に単純なウェブページを持っています。ここではCSSの関連する部分です:
/* ✂---------------- */
body {
/* To avoid problems with some older browsers, that do not calculate
* relative values correctly without this statement. */
font-size: 100%;
/* ✂---------------- */
/* Center the content and leave a margin at the left and at the right. */
margin-left: auto;
margin-right: auto;
/* ✂---------------- */
}
/* ✂---------------- */
@media not print {
body {
/* ✂---------------- */
/* Do not put too many words in a single line: */
width: 41em;
/* Avoid horizontal scrolling, and leave a small margi
* at the left and at the right. */
max-width: 90%;
}
/* ✂---------------- */
}
/* ✂---------------- */
目的は次のとおりです。
は、固定されたフォントサイズを使用しますが、ユーザがブラウザの設定で選択したことをデフォルトのフォントサイズを尊重していない
ブラウザウィンドウの幅が非常に大きい場合、行を広すぎる(文字数が多すぎる)ようにしないでください。代わりに、左と右にスペースを残します。
ブラウザウィンドウの幅が小さい場合(現在のズームレベルで現在のフォントサイズに41emのテキストを表示するのに十分なスペースがない場合)、ブラウザウィンドウの幅全体に改行を使用します(左右(100%〜90%)÷2 = 5%の小さなマージンで)、水平スクロールを回避します。
ユーザーがズームインまたはズームアウトすると、改行が正しく適用されます。したがって、ユーザーが実際にズームインしても、行の長さがブラウザーウィンドウよりも広くないため、水平スクロールは必要ありません。
これはデスクトップブラウザで正常に動作します。しかし、モバイルブラウザはビューポートについて嘘をついています。彼らは実際のブラウザウィンドウの幅の代わりに約800ピクセルのビューポートを持っていると主張しています(これは「レイアウトビューポート」 - 実際の「ビジュアルビューポート」とは異なります - 詳細はhttp://www.quirksmode.org/mobile/viewports2.htmlを参照してください)。モバイルブラウザでは、HTMLに<"viewport" content="width=device-width, initial-scale=1"/>
を追加し、CSSには
@viewport {
/* 100% of viewport’s width */
width: 100vw;
zoom: 1.0;
}
を追加しました。今や、目標#1、2、3はFirefox Mobileでも動作します。しかし、目標#4はありません。最近のFirefox Mobileでは、ズームインまたはズームアウト時に改行は変更されません。 (おもしろい事は、私の古いAndroid 2.3.6標準ブラウザでは動作します)<meta>
タグが読み込まれ、このレイアウトビューポートのCSSピクセル幅が変更されても、モバイルブラウザのレイアウトビューポートの幅は決まっていると思いますユーザーは拡大(ズーム時にビューポートを採用するデスクトップブラウザとは対照的に)してズームインまたはズームアウトします。 max-width: 90%;
はビューポート(これは周囲のコンテナ)と相対的なものなので、ズームインまたはズームアウト時に改行はそれ以上変更されません。 JavaScriptを使用してDOM値を表示するhttp://ryanve.com/lab/dimensions/を試してください。デスクトップブラウザでこのサイトを実行すると、ズームイン時またはズームアウト時にwindow.innerWidth
が変化することがわかります。モバイルブラウザで同じことを行うと、ズームインまたはズームアウト時にwindow.innerWidth
の値は変わりません。私の知る限り、この動きは現代のモバイルブラウザや一般的なモバイルWebページの標準的な動作でもあるようです。これはモバイルブラウザの開発者が意図的に選択したものです(古いデスクトップ対応の非応答のWebページも表示したいと考えています)。しかし、欠点は、仮想の「レイアウトビューポート"
私が知る限り、実際の「ビジュアルビューポート」サイズに関連する測定単位はCSSではなく、仮想の「レイアウトビューポート」ではありません。
だから私の質問は以下のとおりです。
そこに任意のクリーンであり、この(ズーム+流体改行)を取得するには、Webページのすべての可能性を、標準準拠している場合、私は疑問と同じようにモバイルブラウザに取り組んでデスクトップ版では?
このような可能性がある場合、どのように正確に機能することができますか(JavaScriptなしで優先されます)? 「視覚的なビューポートの幅」÷「画面の幅」を計算することで、モバイルブラウザでズームファクタ(それ自体はJSでブラウザ間でアクセスできないと分かっている限り)を推定し、それに応じてビューポートを採用するという唯一の可能性はありますか?
これは不運にも機能しません。自分のコードと同じ結果:デスクトップブラウザではうまく動作しますが、流体線の改行はFirefox Mobileでは動作しません。 –