Глядя на текущие ответы, я чувствую, что отсутствует одно простое и понятное исправление. На всякий случай, если кто-то проходит мимо и ищет правильное решение.
Я довольно успешен с некоторыми простыми CSS и javascript.
Центр холста по центру экрана или родительского элемента. Без упаковки.
HTML:
<canvas id="canvas" width="400" height="300">No canvas support</canvas>
CSS:
#canvas {
position: absolute;
top:0;
bottom: 0;
left: 0;
right: 0;
margin:auto;
}
Javascript:
window.onload = window.onresize = function() {
var canvas = document.getElementById('canvas');
canvas.width = window.innerWidth * 0.8;
canvas.height = window.innerHeight * 0.8;
}
Работает как шарм - проверено: Firefox, Chrome
скрипка: http://jsfiddle.net/djwave28/j6cffppa/3/