概要
- CSSでinfinity値を指定 した場合のブラウザ挙動の検証
- Safari、Chrome、Firefox での結果比較
- width, height, font-size, line-height それぞれの制限値や挙動の違い
- 計算値とレイアウト値の 不一致や謎の制限値
- さらなる調査の余地 と、読者への情報提供呼びかけ
CSSでinfinity値を指定した際のブラウザ挙動調査
- Andy Pのtoot で紹介されたCSSトリック「width: calc(infinity * 1px); height: calc(infinity * 1px);」を検証
- box modelの影響排除 のため、marginとpaddingも0に設定
- div { width: calc(infinity * 1px); height: calc(infinity * 1px); margin: 0; padding: 0; }
- テスト環境 :macOS上のFirefox Nightly、Chrome stable、Safari stable
width, heightの挙動
- Safari: 計算値・レイアウト値ともに33,554,428px
- Chrome: 計算値・レイアウト値ともに33,554,400px
- Firefox: 計算値はheightが19.2px(デフォルト行高)、widthは17,895,700px。レイアウト値はheightが19.2px、widthが8,947,840px
- heightのみinfinity指定がほぼ無視され、デフォルトの行高に
- widthは計算値とレイアウト値が大きく異なる
制限値の考察
- Safari/Chrome は約33,554,431(2^25-1)付近で制限
- 24bitや32bit境界の可能性、もしくは内部実装の都合
- Firefox は独自の制限や処理
- heightではinfinityを無視、widthでは計算値とレイアウト値が大きく乖離
font-sizeにinfinityを指定した場合
- Safari: 計算値・レイアウト値ともに100,000px
- Chrome: 計算値・レイアウト値ともに10,000px
- Firefox: 計算値は3.40282e38(32bit floatの最大値)、レイアウト値は2,400px(実際は2,000px+line-height1.2の可能性)
- line-height: 1; を指定すると、divの高さが8,947,840pxに拡大
font-size制限値の特徴
- Safari/Chrome は明確な10進数の上限
- Firefox は計算値と実際の描画値が大きく異なる
- line-heightの設定 でレイアウト値が大きく変動
line-heightにinfinityを指定した場合
- Safari: 計算値・レイアウト値ともに33,554,428px
- Chrome: 計算値・レイアウト値ともに33,554,400px
- Firefox: 計算値17,895,700px、レイアウト値8,947,840px
- width指定時とほぼ同じ挙動
考察と今後の課題
- 各ブラウザごとに異なる制限値や実装方針
- 計算値とレイアウト値の不一致 が特にFirefoxで顕著
- infinity指定の値がどこで、なぜ制限されるか は謎が多い
- さらなる検証や情報提供 を読者に呼びかけ
- calc(-infinity) など他のパターンの実験余地
まとめ
- CSSでinfinityを指定した場合のブラウザ挙動 は一様ではなく、各エンジンの実装や歴史的経緯に依存
- 制限値や処理方法の違い から、限界値テストやデバッグ時の参考情報
- 今後の調査や知見の共有 が期待される分野