У меня есть 2 холста, один использует атрибуты HTML width
и height
его размер, другой использует CSS:
<canvas id="compteur1" width="300" height="300" onmousedown="compteurClick(this.id);"></canvas>
<canvas id="compteur2" style="width: 300px; height: 300px;" onmousedown="compteurClick(this.id);"></canvas>
Compteur1 отображается так, как должно, но не compteur2. Контент рисуется с использованием JavaScript на холсте размером 300x300.
Почему разница в отображении?
#attr-canvas-width
). Беда в том, что я нажал не на ту кнопкуwidth
и#dom-canvas-width
вместо этого пошел в раздел. Подал w3.org/Bugs/Public/show_bug.cgi?id=9469 об этом.Чтобы установить
width
иheight
вам нужно, вы можете использоватьисточник
el.setAttribute('width', parseInt($el.css('width')))
сделалwidth: 100%;
свойство CSS?canvas.setAttribute('width', window.getComputedStyle(canvas, null).getPropertyValue("width"));
. Повторите для высоты.Для
<canvas>
элементов правила CSSwidth
иheight
установите фактический размер элемента canvas, который будет отображаться на странице. С другой стороны, атрибуты HTMLwidth
иheight
устанавливают размер системы координат или «сетки», которые будет использовать API холста.Например, рассмотрим это ( jsfiddle ):
На обоих были нарисованы одинаковые элементы относительно внутренних координат элемента canvas. Но на втором холсте красный прямоугольник будет в два раза шире, потому что холст в целом растягивается по большей площади по правилам CSS.
Примечание. Если правила CSS для
width
и / илиheight
не указаны, то браузер будет использовать атрибуты HTML для определения размера элемента таким образом, чтобы 1 единица этих значений равнялась 1 пикселю на странице. Если эти атрибуты не указаны , то они будут по умолчанию кwidth
о300
иheight
о150
.источник
Холст будет растянут, если вы установите ширину и высоту в вашем CSS. Если вы хотите динамически манипулировать размером холста, вы должны использовать JavaScript следующим образом:
источник
canvas.setAttribute
перед тем,canvas.getContext('2d')
чтобы избежать растяжения изображения.Браузер использует ширину и высоту CSS, но элемент холста масштабируется в зависимости от ширины и высоты холста. В JavaScript прочитайте ширину и высоту CSS и установите ширину и высоту холста.
источник
Шеннимальная коррекция
источник
CSS устанавливает ширину и высоту элемента canvas, так что он влияет на пространство координат, оставляя все нарисованное перекошенным
Вот мой способ, как установить ширину и высоту с помощью Vanilla JavaScript
источник
Если вы хотите динамическое поведение, основанное, например, на медиазапросах CSS, не используйте атрибуты width и height. Используйте правила CSS, а затем, прежде чем получить контекст визуализации холста, присвойте атрибутам width и height стили CSS width и height:
источник