Проблема в атрибуте стиля холста.
Установка размера холста с помощью атрибута стиля приведет к проблемам с масштабированием.Это происходит потому, что элемент canvas имеет размер по умолчанию.Если вы устанавливаете размер с помощью css, он отличается от этого размера => проблемы с масштабированием.Вы можете предупредить (canvas.height), и вы увидите, что оно имеет значение, даже если вы его не устанавливаете.
Если вы измените следующее, оно будет работать:
<canvas id="c" width="100" height="100" style="border: solid 1px black;"></canvas>
<script type="text/javascript">
var canvas = document.getElementById("c"),
ctx = canvas.getContext("2d");
ctx.fillRect(0, 0, 50, 50);
</script>