‘height’ の値をパース中にエラーが発生しました。


ハマっていたというほどでもなくスルーできる問題だったのだけど、
ずっとエラーが出ていて不思議に思っていたのでメモ。

もんだい

enchant.jsとかstats.jsとかを使いながらゲームを作っていたところ、
Firefoxの開発ツールバー(not firebug)で次のようなエラーがでた。

‘height’ の値をパース中にエラーが発生しました。 このスタイル宣言は無視されました。

なんのheightかわからんし、エラー行わかんないし、
Chromeではエラーでないし、ゲームは正常に動いてるし、不思議だなぁ。
ゲームで座標突っ込んでるところに特に問題ないしなぁ…。

げんいん

と困っていたのだけど、どうもstats.jsがhtmlのタグ内に吐いてるスタイルシートの指定が気に食わなかったようだ。

height : 16.1 px;

なるほど、単位がpxなんだから整数を指定しろよというわけである。
整数だと思って読みにいってるのに変な点がついているのでパースに失敗するわけである。

でもでも待って。stats.jsちゃんが全部悪いの?死ねばいいの?
確かにpxには整数を指定するんだとか書いてあるサイトも見たことがある気がするが、そうだったっけ?

犯人はお前だ

CSS仕様書先生曰く、

Lengths refer to distance measurements.

The format of a length value (denoted by <length> in this specification) is a <number> (with or without a decimal point) immediately followed by a unit identifier (e.g., px, em, etc.). After a zero length, the unit identifier is optional.

Some properties allow negative length values, but this may complicate the formatting model and there may be implementation-specific limits. If a negative length value cannot be supported, it should be converted to the nearest value that can be supported.

If a negative length value is set on a property that does not allow negative length values, the declaration is ignored.

In cases where the used length cannot be supported, user agents must approximate it in the actual value.

だそうである。

英語が不得意なのでフィーリングでしか読めないけど、

  • 負の長さの値を許可しないプロパティではその負の値の宣言を無視するよ
  • サポートできない長さが指定してあったらとりあえずサポートできる値に近似するよ

みたいなことを感じ取った。
小数についての項目は、小数点があろうがなかろうがその後に単位が続くんじゃよとしか書いてないように見える。
つまりstats.jsちゃんは悪くなく、FirefoxさんのCSS Parserが独自の正義をふるっているだけのようだ。

なんでこんな実装になっているのかしら?

# 全然関係ないんだけどこのブログ、間に挟んでいるはずの改行が全部無効になっていて困っている。
#どうするんだっけ。




うらんさん備忘録 , WordPress - Daydream 2.0 , Entries (RSS) , Comments (RSS).