Атрибуты canvas width
и height
отделены от стилей width
и height
того же холста. Атрибуты width
и height
- это размер поверхности рендеринга холста в пикселях, тогда как его стили выбирают место в документе, где браузер должен рисовать содержимое с поверхности рендеринга. Так уж получилось, что значением по умолчанию для стилей width
и height
, , если они не указаны , являются ширина и высота поверхности рендеринга. Итак, вы правы насчет № 1: нет причин оборачивать это в div. Вы можете установить процентные значения для всех стилей элемента canvas, как и для любого другого элемента.
Для # 3 довольно просто (и кроссбраузерно) получить размер вещей с помощью clientWidth и clientHeight, если вы не используете заполнение элемента canvas.
Я закодировал немного упрощенную версию здесь .
Для # 4, вы правы, что вам не повезло. Можно проверить перед установкой ширины и высоты и оставить холст в покое, если ему не нужно изменять размер, что устранит некоторые из перерисовок, но вы не можете избавиться от всех из них.
РЕДАКТИРОВАТЬ: Портман указал, что я испортил стиль центрирования. Обновленная версия здесь .