2011年09月29日(木)言い訳争い

以前に「940*0.85=799」「800-799=1」だからAndroidに内蔵のブラウザ解像度800pxに収まります。「文字サイズは小を推奨します」。と書いた内容は間違っていた。

WebKitのプロパティ「devicePixelRatio(デバイスピクセルレシオ)」。これの内容を考慮しないとパソコンと同じ状況をスマートフォンでも表示可能にはならない。

そもそもスマートフォンと言う括り方自体が非常に劣悪。

・「devicePixelRatio(デバイスピクセルレシオ)」 → 「1pxを何pxにレンダリングするか」

Androidの大半は「1.5px(元の1.5倍)」、iPhone4の場合は「2px(元の2.0倍)」。その内容は画像だけではなくフォントにも適用される。
パソコンでは「1pxは当然1pxとしてレンダリングする。すなわち『1』」なのでAndroidの大半を占める「1.5」と言う仕様が謎になる事が良く分かる。

・パソコン上の画面にて13pxのフォントで文字列を記し、その文字列の横幅が930pxにまで至った状態。

これが「Android内蔵ブラウザの本当の解像度800pxにスクロールバーの横幅の数ピクセル分の存在も考慮したプラスアルファを用いない状態での限度」となる。

「計算式1:930*0.833...=774.69」 …Androidの大半は「1.5px(元の1.5倍)」と言う謎の仕様であるがゆえ、割り切れない数を使って計算を行う必要性が出てくる。
小数点第3位までを使って四則演算を行い、計算結果は切り上げを行って整数値とする。devicePixelRatio「1.5」と言う謎の極悪仕様が生み出した悪しき展開。

「計算式2:775*1.5=1162.5」 横幅775pxの状態が、Androidの内蔵ブラウザによって「1.5倍」される。そう言う事をされた「あとの」数字はこの様に算出される。

「計算式3:1163*0.66=767.58」 Androidの内蔵ブラウザが「文字サイズ:中」の状態で、1.5倍された内容を一体何倍として処理するのか。「2/3倍」。

…整数ではなく分数。分数を小数点以下のある数に直そうとしてもこの場合には直しきれない。「1/3=0.333...」、「2/3=0.666...」、「3/3=1」
…「3/3はどうして1になるのか。0.999...になるのではなくどうして1になるのか。およそ0.001の数字はどこから現れたのか」。数学の摩訶不思議。

最初の謎仕様がdevicePixelRatio「1.5」、次の謎仕様が「1.5倍した後の内容を、文字サイズ中の設定だったら2/3倍に縮小させる」。それがAndroidの現実。

「計算式2:775*1.5=1162.5」、「計算式3:1163*0.66=767.58」 …775と767.58と言う数字の差異となっている。これでは「殆ど同じ」とは言えない。

それは計算式3が小数点第2位までの数字で計算したからそうなったのであって本当は小数点第3位までの数字を使って計算する必要があると言う事。
わざと小数点第2位までの数字で計算を行い「775と767.58」と言うそれだけの数字の差異が現れるんですよ。と言う内容を指し示す為に計算式3を見せただけ。

「計算式3(改):1163*0.666=774.558」 …775と774.558と言う数字の差異となっている。「774.558の数字を切り上げる」事で775になって「(一応)元に戻る」。

Android内蔵ブラウザの実際の解像度は800pxなので「800-775=15」の予備分を持って「収まる」事になる。予備分を削ればもう少し文字も書けるとは思うが
フォントの違いによる文字列への影響は無視出来ないのでそこも考慮すればきちんと予備分は持っておいた方がいい事とする。

一連の内容としてまとめると「930*0.833(およそ83%)=775(切り上げ済)」 → 「775*1.5=1163(切り上げ済)」 → 「1163*0.666=775(切り上げ済)」となる。

…ここで1つの疑問が浮かぶ。「0.833...ってどこからその数字が出てきたの?」と。

出所は単純。「パソコン上でフォントサイズ13pxで記した文字列の長さ」÷「パソコン上でフォントサイズ10pxで記した文字列の長さ」
実際にフォントサイズ13pxの状態で文字列を打ち込み、CSSのフォントサイズ指定を10pxにしてから文字列の横の長さを測ってみたらそうなった。

「計算式4:775/930=0.833...」 Androidの内蔵ブラウザ。「パソコン上で13pxのフォント → 16pxに見える」、「パソコン上で10pxのフォント → 13pxに見える」。
そう言う風にレンダリングする。従って「文字列の長さを0.833...倍した数字がAndroidのdevicePixelRatioが1.5の状況下では13pxと同等の価値を持つ」事になる。

以上が計算の流れとなる。やはり極悪仕様であると言わざるを得ない。これが現実なのでやはりスマートフォンは軽視した方がいいと言う俺の結論は変わらない。

2011年09月29日(木)15時44分27秒