Рисование круга с тенью в SVG обрезает края

Я пытаюсь нарисовать простой круг с тенью в SVG, но по какой-то причине верхний и левый края обрезаются. Это происходит как в Chrome, так и в Safari.

введите здесь описание изображения

Я использую код, найденный в руководстве 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 и т. д., но получил тот же результат. Я также пробовал гуглить различные руководства по теням и всегда модифицировал код примера, чтобы использовать круг. Один и тот же результат каждый раз.

Итак, как мне нарисовать простой круг с тенью в SVG?


person Yony    schedule 25.09.2012    source источник


Ответы (2)


Оказывается проблема кроется в смещении фильтра. Вокруг круга недостаточно отступов, чтобы вместить только что добавленный фильтр. Чтобы добавить это, используйте следующие атрибуты (настройте по мере необходимости):

<filter id="f1" x="-20%" y="-20%" width="200%" height="200%">

X и y помещают поле для фильтра вверх и немного влево, чего раньше не было. Затем ширина и высота определяют размер коробки. В данном случае 200% — это перебор, но он может быть необходим для более крупных теней.

person Yony    schedule 26.09.2012

Замените это: <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/

person Timo Kähkönen    schedule 26.09.2012