質問者
IE6/7/8 VMLのフォントサイズ問題(emはだめ?)

質問
-
お疲れ様です。周です。
■問題点詳細
下記のURLに記載されてVMLの例を実行しました。
http://msdn.microsoft.com/en-us/library/bb263935%28v=vs.85%29.aspx
問題なく、正常に表示できました。
引き継ぎ、下記のテストを実施しました。
①フォントサイズは36ptから、3emに変更したら、「VML Text」文字は見えなくなる。
②フォントサイズは100000emに変更したら、「VML Text」文字は再度見えるになる。
■テスト環境
IE6/7/8
OSは全部XPでした(SP2/SP3)。
■確認内容
正しく表示できない原因を教えていただきませんか。
IE6/7/8のバグですか?テスト方法の問題?
テスト方法の問題なら、正しく表示できる例をお願いいたします。
すべての返信
-
>動作そのものについてはわかりませんが、どのようなサイズを指定したいのでしょうか?
ただの「em」単位をテストしたいので、サイズは特定していません。
テストの目的は、VML(IE6/7/8)はフォントサイズ単位のem/px/%/ptなど全部正しい対応しているかどうか検証しています。
※結果を言えば、em/exの場合、正しく表示できません。
念のため、検証用コードをリストします。
<修正前>
<v:line from="50 100" to="400 100"> <v:fill on="True" color="red"/> <v:path textpathok="True"/> <v:textpath on="True" string="VML Text" style="font:normal normal normal 36pt Arial"/> </v:line>
※FROM: http://msdn.microsoft.com/en-us/library/bb263935%28v=vs.85%29.aspx
<修正後 例1>
<v:line from="50 100" to="400 100"> <v:fill on="True" color="red"/> <v:path textpathok="True"/> <v:textpath on="True" string="VML Text" style="font:normal normal normal 3em Arial"/> </v:line>
<修正後 例2>
<v:line from="50 100" to="400 100"> <v:fill on="True" color="red"/> <v:path textpathok="True"/> <v:textpath on="True" string="VML Text" style="font:normal normal normal 100000em Arial"/> </v:line>
■補足
>というのも 1em というのはフォントサイズが確定した後で、アルファベット「m」の幅を指す単位ものです。
元のサンプルにあった36ptは約1.27cmです。親要素のフォントサイズは16px(IE6/7/8のデフォルトフォントサイズ)の場合、3emは36ptは同じサイズと思います。
フォントサイズ関連説明は下記URLに参照してください。
http://www.w3.org/Style/Examples/007/units
http://www.adworks24.co.jp/archives/740.html
>ですので 36em とは具体的にはどのような大きさを期待して指定しているのやら。手段が目的になっていませんか?
36emに指定いません。3emに指定しました。
サイズは気にしなくでもOKです。1emに指定もかまいません。
-
>ですが、emは相対サイズであり、その基準となるサイズがない以上、どうしようもないと思うのですが。
明示的にフォントサイズを指定しない場合、ブラウザのデフォルトフォントサイズ利用じゃない?
一つ補足です、同じ相対サイズ単位の%も、表示できます(文字が見える)。
<修正後 例3>
<v:line from="50 100" to="400 100"> <v:fill on="True" color="red"/> <v:path textpathok="True"/> <v:textpath on="True" string="VML Text" style="font:normal normal normal 600% Arial"/> </v:line>
基準となるサイズがないので、見えないの原因なら、なぜ例2、例3で「VML Text」文字が見えるになった?
-
佐祐理さんへ。
一般に、
1.1ポイントは概ね1/72[inch](=0.3528mm)とされています。
(ただし、
didot point:1/72 old french inch=0.3759mm
american point:1/72.27 inch=0.351459mm
JIS-point=0.3514mm)2.ディスプレイは96[dot/inch]と定義されている場合が多いので。
3.1ポイントは 1/72[inch] * 96[dot/inch] = 1.333[dot/pt]となります。さて、Zhouxiaoyongさんの主張どおり、親要素のフォントサイズが
16[dot]だった場合の3[em]ですが、この場合16[dot]が基準になると考えられ、4. 16ピクセルは、16[dot] / 1.333[dot/pt] = 12.000[pt]と換算できます。
従って、3[em]は
5.3[em] * 12.000[pt]と計算すると 36[pt(ポイント)]に計算できます。
6.従って 36[pt]は画面上で、1.333[dot/pt] * 36[pt] = 47.988[dot]
位のサイズで表示されるべきでありますが、
実際には「まったく表示されない」との症状を
Zhouxiaoyongさんは、発見したようですよ。
- 編集済み 仲澤@失業者 2012年12月10日 7:31
-
>ですが、emは相対サイズであり、その基準となるサイズがない以上、どうしようもないと思うのですが。
明示的にフォントサイズを指定しない場合、ブラウザのデフォルトフォントサイズ利用じゃない?
仕様書を確認しましたがそのような記述はありませんでした。VMLのtextpath要素にはfont-sizeはCSS1に従うことが書かれています。CSS1のfont-sizeにはemを指定した場合、親要素のサイズを使用すると書かれています。
さて今回の場合、v:textpathの親要素はv:lineでしょうか、そしてlineはfont-sizeを持っていません。
-
>ですが、emは相対サイズであり、その基準となるサイズがない以上、どうしようもないと思うのですが。
明示的にフォントサイズを指定しない場合、ブラウザのデフォルトフォントサイズ利用じゃない?
仕様書を確認しましたがそのような記述はありませんでした。VMLのtextpath要素にはfont-sizeはCSS1に従うことが書かれています。CSS1のfont-sizeにはemを指定した場合、親要素のサイズを使用すると書かれています。
さて今回の場合、v:textpathの親要素はv:lineでしょうか、そしてlineはfont-sizeを持っていません。
v:lineのフォントサイズを指定したら、結果はどう?
<修正後 例4>
<v:line from="50 100" to="400 100" style="font-size:36pt;"> <v:fill on="True" color="red"/> <v:path textpathok="True"/> <v:textpath on="True" string="VML Text" style="font:normal normal normal 1em Arial"/> </v:line>
残念です。まったく表示されない。
>仕様書を確認しました
すみませんが、どこの仕様書を確認しましたか?
- 編集済み Zhouxiaoyong 2012年12月11日 2:17
-
> さて今回の場合、v:textpathの親要素はv:lineでしょうか、そしてlineはfont-sizeを持っていません。
v:lineのフォントサイズを指定したら、結果はどう?
>仕様書を確認しました
すみませんが、どこの仕様書を確認しましたか?
-
>line要素にはfont-sizeが定義されていません。
styleに定義しました。
例4の一行目
<v:line from="50 100" to="400 100" style="font-size:36pt;">
>該当箇所にリンクしています。リンク先を読んでください。
ありがとうございます。
でも、リンク先のはW3のサイトです。IEのサイトではありません。
各ブラウザでは、CSSの対応状況が違います。
また、「明示的にフォントサイズを指定しない場合、ブラウザのデフォルトフォントサイズ利用じゃない?」のは、IEの現況です。HTMLで検証できます。
-
The font size is defined in points. The values are the same as the standard HTML style attributes.
ptサポートしかない?pxなどもサポートしているじゃない?
私の解釈でも、pointのみを動作保証の対象としているのだと思いました。
#pointとはptだけを指すかは分かりませんが、おそらく。
ドキュメントにないものに関しては、pxのように妥当に動作するケースもあれば、しない場合もあると思います。(自己責任で使用)
特に、remarksに書かれている内容は、実際より厳しく書かれているケースはMSDN内に他にもあります。
# 一般に仕様は厳しめで書くかと思います。 -
The font size is defined in points. The values are the same as the standard HTML style attributes.
ptサポートしかない?pxなどもサポートしているじゃない?
私の解釈でも、pointのみを動作保証の対象としているのだと思いました。
#pointとはptだけを指すかは分かりませんが、おそらく。
ドキュメントにないものに関しては、pxのように妥当に動作するケースもあれば、しない場合もあると思います。(自己責任で使用)
特に、remarksに書かれている内容は、実際より厳しく書かれているケースはMSDN内に他にもあります。
# 一般に仕様は厳しめで書くかと思います。そうですね。
①「The font size is defined in points. 」を読みしたら、ptサポートのみのイメージでした。
②「The values are the same as the standard HTML style attributes. 」を読みしたら、「CSSのfont-size属性と同じ」の認識がありました。
②は余計なもの?画蛇添足?
-