したがって、CSSでキャンバスのサイズを定義する必要はありません。これは、「実際の」サイズからスケールアウトするだけだからです。代わりに、常にCanvasの属性width
と属性を使用する必要があります。height
しかし、それはあなたがそのようにそれの親のサイズを定義することができないという意味ではありません。キャンバスをdivでラップし、divのCSSの幅/高さを100%(または任意の値)に設定します
セットアップ中のコードでは、次のことを行う必要があります。
// javascript pseudocode
canvas.width = theCanvasParent.clientWidth; // or whatever attribute it is, I'd reccomend putting all of those things in one giant container div
canvas.height = theCanvasParent.clientHeight;
ほとんどのブラウザは、親divのサイズが変更されたときにイベントを発生させないため、たとえば、タイマーで0.5秒ごとに、divのサイズが変更されたかどうかを確認する必要があります。ある場合は、それに応じてキャンバスのサイズを変更します。
ただし、onresize
イベントがあり、ページの設定方法によっては、これでうまくいく場合があります。
Firefox、Opera、Google Chrome、Safariでは、ブラウザウィンドウのサイズが変更された場合にのみonresize
イベントが発生します。
Internet Explorerでは、onresize
ブラウザウィンドウまたは要素のサイズが変更されたときにイベントが発生します。
したがって、divのサイズを変更する唯一の方法がウィンドウのサイズを変更することである場合、onresizeで問題ありません。それ以外の場合は、キャンバスサイズとdivサイズが異なるかどうかを常にチェックするタイマーが必要になります(異なる場合は、キャンバスのサイズを変更します)。
常にチェックするタイマーは、Mozilla Bepsinチームが行ったことです(BespinがSkywriterになり、Aceプロジェクトとマージされ、Canvasの使用がすべて削除される前)