То, с чем вы сталкиваетесь, действительно является случаем удивительного субпиксельного рендеринга. Видите ли, штрихи SVG применяются точно на пути , где они указаны. Пример: если путь проходит от точки (0,0) до (0,5) и ему назначается обводка шириной 1 пиксель, обводка охватывает прямоугольник (-0,5,0), (0,5,0), (0,5,5 ), (-0,5,5). Первый из этих изображений иллюстрирует это:
Ваш прямоугольник нарисован от (0,0) (позиция по умолчанию) до (36,36). Следовательно, штрих размещается таким образом, чтобы он находился точно на между пикселями экрана. Вот почему правый и нижний края выглядят размытыми.
Что случилось с верхним и левым краями? Ну, поскольку вы не определили размер для своего изображения SVG, браузер определил его за вас. По умолчанию начинается с (0,0) (верхний левый угол) и SVG составляет 300x150 пикселей шириной.
Поскольку верхний и левый края контура прямоугольника находятся непосредственно на края изображения, они по-прежнему размыты, но вы не видите части за пределами изображения. Следовательно, линия кажется резкой, но если вы присмотритесь, то заметите, что она не полностью черная, а наполовину прозрачная.
Как это исправить? Есть два варианта. Вариант 1 - разместить прямоугольник angular на половине пикселей:
<rect x="0.5" y="0.5" .../>
Другой вариант - переместить область просмотра вашего изображения так, чтобы изображение в целом было сдвинуто на полпикселя:
<svg viewBox="-0.5 -0.5 37 37">
Обратите внимание, что я установил ширину и высоту области просмотра на 37 пикселей. Это потому, что ваш прямоугольник будет иметь конечный размер 37 пикселей: 36 пикселей для контура, а затем по 0,5 пикселей с каждой стороны, где находится внешняя половина обводки в 1 пиксель.
Для общего обзора масштабирования SVG я предлагаю этот пост на CSS Приколы .