У меня есть файл SVG, который использует шаблон, чтобы создать фон графика. В Google Chrome это отображается так, как ожидалось, при этом каждая строка не будет сглаживаться. Однако в Firefox, Safari и Internet Explorer он отображает с каждой строкой 2px, которые являются полупрозрачными.SVG рендеринга размыта во всех браузерах, кроме chrome
Что я Пробовал
После многих часов поиска и пробовать различные подходы, я пришел к следующим выводам:
- размытость отчасти вызвана тем, что SVG имеет динамическая ширина и решается, когда применяется атрибут
viewBox
, однако это теряет всю масштабируемость, которая поражает цель использования svg. - Если на странице есть только один svg, он выглядит нормальным (или достаточно близко к нормальному), однако, когда есть несколько последовательно, каждый другой (или иногда случайный) будет отображаться с каждой строкой 1px, отображаемой как 2px anti-aliased line (выглядит плохо).
- Смещение значений x и/или y на 0,5 пикселя ничего не меняет и может иногда ухудшать рендеринг.
- Добавление
shape-rendering: crispEdges;
к стилю каждой линии может либо а) сделать линии полностью исчезают или просто не оказывают никакого влияния или б) сделать цвета в 2рх линий темнее, но на самом деле не делает линии 1 пиксели. enable-background
атрибут, кажется, не имеет никакого влияния на
Опять же, ни одна из этих проблем не появится в Chrome, но сделать в всех других современных браузерах
SVG в вопросе
<svg width="100%" height="500" xmlns="http://www.w3.org/2000/svg">
<defs>
<pattern id="day" width="100%" x="0" height="40" patternUnits="userSpaceOnUse">
<line x1="0" y1="0" x2="100%" y2="0" style="stroke:#bbb;stroke-width:1" />
<line x1="0" y1="20" x2="100%" y2="20" style="stroke:#ccc;stroke-width:1" stroke-dasharray="3,3" />
</pattern>
<pattern id="hours" width="100%" x="0" height="40" patternUnits="userSpaceOnUse">
<line x1="0" y1="0" x2="100%" y2="0" style="stroke:#000;stroke-width:1" />
</pattern>
</defs>
<rect x="0" width="5%" height="500" fill="url(#hours)" />
<rect x="7%" width="17%" height="500" fill="url(#day)" />
<rect x="26%" width="17%" height="500" fill="url(#day)" />
<rect x="45%" width="17%" height="500" fill="url(#day)" />
<rect x="64%" width="17%" height="500" fill="url(#day)" />
<rect x="83%" width="17%" height="500" fill="url(#day)" />
</svg>
Фотографии Изображения
ВИД ПОЛНОЭКРАННЫЙ ВИДЕТЬ ЭФФЕКТ
Хром (ссылка):
http://i.imgur.com/BMjFmH6.png
Firefox (с shape-rendering: crispEdges;
):
http://i.imgur.com/4cgZjq7.png
Firefox (с визуализацией .5px, после нескольких включенных svg. Обратите внимание, изображение оказывается в другом размере, чем предыдущие)
(не может опубликовать 3 ссылки, но использовать этот идентификатор после imgur.com). JiuswRF.png
Любая помощь по этой проблеме была бы очень apreciated.
Спасибо!
вы пытались использовать 'viewBox' настройки его значения динамически с JavaScript атрибут? – collapsar