Почему атрибут skew patternTransform не работает?
<svg viewBox="0 0 1000 400" width='1000' height='400' style='border:1px solid black'>
<defs>
<linearGradient id='b'>
<stop offset='20%' stop-color='green'></stop>
<stop offset='40%' stop-color='blue'></stop>
<stop offset='60%' stop-color='red'></stop>
<stop offset='80%' stop-color='yellow'></stop>
<stop offset='100%' stop-color='tomato'></stop>
</linearGradient>
</defs>
<defs>
<pattern patternTransform='skew(10)' id="a" x='5' y='5' width="40" height="40" patternUnits="userSpaceOnUse">
<circle r="15" cx="15" cy="15" fill="url(#b)" stroke="" stroke-width=""/>
</pattern>
</defs>
<rect x="0" y="0" width="200" height="200" fill="url(#a)" stroke="black" stroke-width="2"/>
</svg>
Ответы (1 шт):
Автор решения: Alexandr_TT
→ Ссылка
Автор вопроса уже сам нашёл причину:
ошибка была в том, что
skew(10)надо исправить на skewX(10) или skewY(10)
Дополню это решение примерами с немного измененным кодом для симметричного расположения паттерна внутри прямоугольника
<svg viewBox="0 0 1000 400" width='1000' height='400' style='border:1px solid black'>
<defs>
<linearGradient id='b'>
<stop offset='20%' stop-color='green'></stop>
<stop offset='40%' stop-color='blue'></stop>
<stop offset='60%' stop-color='red'></stop>
<stop offset='80%' stop-color='yellow'></stop>
<stop offset='100%' stop-color='tomato'></stop>
</linearGradient>
</defs>
<defs>
<pattern patternTransform='skewX(10)' id="a" x='5' y='5' width="40" height="40" patternUnits="userSpaceOnUse">
<circle r="15" cx="20" cy="20" fill="url(#b)" stroke="" stroke-width=""/>
</pattern>
</defs>
<rect x="0" y="0" width="200" height="200" fill="url(#a)" stroke="black" stroke-width="2"/>
</svg>
Примеры анимации patternTransform
skewX
<animateTransform begin="rect.mouseover" end="rect.mouseleave"
attributeName="transform" type="skewX"
values="0;15;15;-15;-15;0"
repeatCount="5" dur="2s"/>
<svg viewBox="0 0 1000 400" width='1000' height='400' style='border:1px solid black'>
<defs>
<linearGradient id='b'>
<stop offset='20%' stop-color='green'></stop>
<stop offset='40%' stop-color='blue'></stop>
<stop offset='60%' stop-color='red'></stop>
<stop offset='80%' stop-color='yellow'></stop>
<stop offset='100%' stop-color='tomato'></stop>
</linearGradient>
</defs>
<defs>
<pattern id="a" x='0' y='0' width="40" height="40" patternUnits="userSpaceOnUse">
<circle r="15" cx="20" cy="20" fill="url(#b)">
<animateTransform begin="rect.mouseover" end="rect.mouseleave" attributeName="transform" type="skewX" values="0;15;15;-15;-15;0" repeatCount="5" dur="2s"/>
</circle>
</pattern>
</defs>
<rect id="rect" x="0" y="0" width="200" height="200" fill="url(#a)" stroke="black" stroke-width="2"/>
</svg>
skewY
<svg viewBox="0 0 1000 400" width='1000' height='400' style='border:1px solid black'>
<defs>
<linearGradient id='b'>
<stop offset='20%' stop-color='green'></stop>
<stop offset='40%' stop-color='blue'></stop>
<stop offset='60%' stop-color='red'></stop>
<stop offset='80%' stop-color='yellow'></stop>
<stop offset='100%' stop-color='tomato'></stop>
</linearGradient>
</defs>
<defs>
<pattern id="a" x='0' y='0' width="40" height="40" patternUnits="userSpaceOnUse">
<circle r="15" cx="20" cy="20" fill="url(#b)">
<animateTransform
begin="rect.mouseover"
end="rect.mouseleave"
attributeName="transform"
type="skewY"
values="0;15;15;-15;-15;0"
repeatCount="5"
dur="2s"/>
</circle>
</pattern>
</defs>
<rect id="rect" x="0" y="0" width="200" height="200" fill="url(#a)" stroke="black" stroke-width="2"/>
</svg>
rotate
<svg viewBox="0 0 1000 400" width='1000' height='400' style='border:1px solid black'>
<defs>
<linearGradient id='b'>
<stop offset='20%' stop-color='green'></stop>
<stop offset='40%' stop-color='blue'></stop>
<stop offset='60%' stop-color='red'></stop>
<stop offset='80%' stop-color='yellow'></stop>
<stop offset='100%' stop-color='tomato'></stop>
</linearGradient>
</defs>
<defs>
<pattern id="a" x='0' y='0' width="40" height="40" overflow="visible" patternUnits="userSpaceOnUse">
<circle r="15" cx="20" cy="20" fill="url(#b)">
<animateTransform
begin="rect.mouseover"
end="rect.mouseleave"
attributeName="transform"
type="rotate"
values="0,20,20;360,20,20"
repeatCount="5"
dur="2s"/>
</circle>
</pattern>
</defs>
<rect id="rect" x="0" y="0" width="200" height="200" fill="url(#a)" stroke="black" stroke-width="2"/>
</svg>
scale
<svg viewBox="0 0 1000 400" width='1000' height='400' style='border:1px solid black'>
<defs>
<linearGradient id='b'>
<stop offset='20%' stop-color='green'></stop>
<stop offset='40%' stop-color='blue'></stop>
<stop offset='60%' stop-color='red'></stop>
<stop offset='80%' stop-color='yellow'></stop>
<stop offset='100%' stop-color='tomato'></stop>
</linearGradient>
</defs>
<defs>
<pattern id="a" x='0' y='0' width="40" height="40" overflow="visible" patternUnits="userSpaceOnUse">
<circle r="15" cx="20" cy="20" fill="url(#b)">
<animateTransform
begin="rect.mouseover"
end="rect.mouseleave"
attributeName="transform"
type="scale"
values="1;1.2;1.2;1;1"
repeatCount="5"
dur="2s"/>
</circle>
</pattern>
</defs>
<rect id="rect" x="0" y="0" width="200" height="200" fill="url(#a)" stroke="black" stroke-width="2"/>
</svg>