Рисование круга с помощью dropshadow в SVG зажимает края
Я пытаюсь нарисовать простой круг с тенью в SVG, но по какой-то причине верхний и левый края обрезаны. Это происходит как в Chrome, так и в Safari.
![enter image description here]()
Я использую код, который я нашел в учебнике w3schools SVG Drop Shadows, измененный для использования круга.
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<filter id="f1" x="0" y="0" width="200%" height="200%">
<feOffset result="offOut" in="SourceAlpha" dx="2" dy="2" />
<feGaussianBlur result="blurOut" in="offOut" stdDeviation="1" />
<feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
</filter>
</defs>
<circle r="30" cx="50" cy="50" style="stroke:gray; fill:aliceblue; stroke-width:3px" filter="url(#f1)" />
</svg>
Я попытался перемещать круг вокруг, увеличивая размер контейнера SVG и т.д., но получил тот же результат. Я также попробовал различные обучающие программы для Dropshadow Googling и всегда изменял код примера, чтобы использовать круг. Тот же результат каждый раз.
Итак, как мне нарисовать простой круг с dropshadow в SVG?
Ответы
Ответ 1
Оказывается, проблема заключается в смещении фильтра. В окружности не хватает обивки вокруг него, чтобы разместить недавно добавленный фильтр. Чтобы добавить это, используйте следующие атрибуты (при необходимости отрегулируйте):
<filter id="f1" x="-20%" y="-20%" width="200%" height="200%">
x и y помещают поле для фильтра вверх и влево, что было ранее. Затем ширину и высоту определяют размер окна. В этом случае 200% является излишним, но может потребоваться для больших теней.
Ответ 2
Заменить это:
<filter id="f1" x="0" y="0" width="200%" height="200%">
Для этого:
<filter id="f1" x="-40%" y="-40%" height="200%" width="200%">
См. пример:
http://jsfiddle.net/sRfck/1/