这个问题很好地告诉我,SVG不支持CSStransform3d
:SVG元素上的3d转换
但回复中的评论者建议,可以使用SVG原生rotate()
和scale()
转换的组合来模拟效果。
这是我的演示 SVG:
<svg viewBox="0 0 300 100" xmlns="http://www.w3.org/2000/svg">
<circle id="circle1" cx="50" cy="50" r="40" stroke="red" fill="grey" />
<circle id="circle2" cx="150" cy="50" r="4" stroke="red" fill="grey" />
</svg>
是否有可能通过修改 SVGcircle
元素上的transform
属性来模拟将 CSStransform3d(1.05, 1.05, 1.05)
应用于#circle1
的效果?transform3d
的x,y,z
与组合旋转和缩放的 5 个参数之间的数学关系是什么? 或者也许它是不可能的?
transform-函数现在像在CSS中一样工作,但参考资料指出两者之间的语法差异和可能存在问题,即没有保证。将鼠标悬停在块上,查看此代码段中 rotate3d 的示例:
* {
box-sizing: border-box;
margin: 0;
padding: 10;
}
@keyframes transform {
from {transform:perspective(800px) rotate3d(1,0,0,-95deg)}
to {transform:perspective(800px) rotate3d(1,0,0, 0deg)}
}
#thing:active {
animation: transform .8s steps(100) both;
transform-origin: 0% 90%;
}
<html>
<head>
<link href="seat2.css" rel="stylesheet" />
</head>
<svg id="thing" xmlns="http://www.w3.org/2000/svg" width="150px" height="150px" viewBox="0 0 150 150">
<rect width="100" height="100"/>
</svg>
</html>