Ваша проблема связана с разницей между внутренними размерами холста и количеством пикселей CSS, которые он занимает. Спецификация HTML гласит:
Внутренние размеры холста
элемент равен размеру
координатное пространство, с числами
интерпретируется в CSS-пикселях. Тем не мение,
размер элемента может быть произвольным
по таблице стилей. Во время рендеринга
изображение масштабируется, чтобы соответствовать этому макету
размер.
Это означает, что ваш холст по умолчанию использует пространство для рисования размером 300x150 пикселей по координатам, используемым для рисования изображений. Однако ваши правила CSS будут растягивать холст до размера страницы (по крайней мере, в отношении ширины). По-прежнему будет только 300 пикселей в ширину для логического рисования, но он будет масштабирован и физически визуализирован на 100% ширины страницы.
В любом случае, свойства width
и height
соответствуют внутренним размерам чертежа холста. Поскольку вы заботитесь о размере CSS, вы можете использовать window.getComputedStyle .
http://jsfiddle.net/3DDsX/
<head>
<style>
canvas { width: 100%; height: 100% }
</style>
<script>
function init() {
var canvas = document.getElementById('canvas');
var style = getComputedStyle(canvas);
alert(style.width + ' x ' + style.height);
}
</script>
</head>
<body onload="init();">
<canvas id="canvas"></canvas>
</body>