То же, что и для других элементов, размер чего-либо отображается отдельно от его размера. Примеры:
Отображение 4x4 JPG в формате 4x4 пикселей
<img src="some4x4pixel.jpg" />
Отображение 4x4 JPG с разрешением 16x16 пикселей
<img src="some4x4pixel.jpg" width="16" height="16" />
Отображение 4x4 JPG с разрешением 16x16 пикселей
<img src="some4x4pixel.jpg" style="width:16px; height:16px;"/>
Отображение 4x4 JPG любого размера, в котором он находится
<img src="some4x4pixel.jpg" style="width:100%; height:100%;"/>
Отображение холста 300x150 пикселей (размер по умолчанию) при разрешении 300x150 пикселей
<canvas></canvas>
Отображение холста 4x4 с разрешением 4x4 пикселей
<canvas width="4" height="4"></canvas>
Отображение холста 4x4 с разрешением 16x16 пикселей
<canvas width="4" height="4" style="width:16px; height:16px;"/></canvas>
Отображение холста 4x4 в любом размере контейнера
<canvas width="4" height="4" style="width:100%; height:100%;"/></canvas>
Если вы делаете 3D и используете довольно распространенную функцию перспективы, которая есть в большинстве 3D-библиотек по математике, вы, как правило, хотите установить соотношение сторон для размера экрана, а не для фактического размера.
// 45degrees, assumes math library uses radians
var fieldOfView = Math.PI / 4;
// Use the size the canvas is displayed, NOT the size it actually is.
var aspectRatio = canvas.clientWidth / canvas.clientHeight;
var zNear = 0.1;
var zFar = 1000;
var matrix = someMathLibrary.perspective(fieldOfView, aspectRatio, zNear, zFar, ...)
Если вы хотите, чтобы размер существующего холста совпадал с отображаемым размером, используйте
canvas.width = canvas.clientWidth;
canvas.height = canvas.clientHeight;
Хотя обратите внимание, холст WebGL не обязательно должен быть того размера, который вы запрашиваете, поскольку различные графические процессоры имеют ограничения по размеру. Если вы хотите узнать размер, который вы получили, по сравнению с размером, который вы запрашивали, проверьте
gl.drawingBufferWidth
gl.drawingBufferHeight
Для матрицы перспективы, используемой большинством 3D-приложений, фактический размер холста не так важен. Для определенных видов эффектов или для 2D это часто важно.
Причина, по которой трудно найти документацию, заключается в том, что считается само собой разумеющимся, что люди знают, что CSS решает размер отображения для всех элементов независимо от фактического размера их содержимого.
https://www.google.com/webhp?sourceid=chrome-instant&ix=sea&ie=UTF-8&ion=1#sclient=psy-ab&hl=en&site=webhp&source=hp&q=canvas%20size%20css&pbx=1&oq=&aq=&aqi=&aql=&gs_sm=&gs_upl=&fp=f131b50fb368d7bf&ix=sea&ion=1&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&biw=1629&bih=931