为什么添加到.circle
属性后scale
它不再居中对齐?
.furniture-item {
position: absolute;
width: 100px;
height: 100px;
top: 50%;
left: 50%;
transform: scale(4);
transform-origin: 50%;
background-color: rgba(110, 100, 204, 0.5);
border-radius: 50%;
cursor: pointer;
z-index: 1;
transition: transform 1s;
}
.circle {
position: absolute;
opacity: 1;
width: 25px;
height: 25px;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
transform-origin: 50%;
border-radius: 50%;
background-color: rgba(0, 100, 204, 0.5);
z-index: 1;
}
<button onclick="document.querySelector('.circle').style.transform='scale(2) translate(-50%, -50%)'">Zoom</button>
<div class="furniture-item active">
<div class="circle"></div>
</div>
使用 将参考点移动到图形的中心
transform: translate(-50%, -50%);
。这里的参数需要根据值进行调整scale
:scale(1)
--50%
scale(2)
--25%
scale(4)
--12.5%
scale(N)
--50% / N
(通式)一个负值
margin
,设置为块宽度和高度的一半(以像素为单位),将工作得更稳定:jsfiddle 上的示例。
转换按顺序应用- 缩放必须在移位 后应用。
transform: translate(-50%, -50%) scale(2);
有必要返回旧尺寸的 50%,即 增加 25%:
SVG解决方案
当使用scale(n)命令时,一切都以与 CSS中
SVG
相同的方式发生——增加越大,对象从初始位置偏移的越多。如您所知,y 的原点
svg
在左上角。使用 cx="40" cy="40" 时,圆心将位于 svg 视口左角 (0,0) 右侧 40px 和下方 40px 处。应用时,
scale(2)
这些数字乘以二。正因为如此,圆圈才会向右下方移动。圆心的新坐标将为 cx="80" 和 cy="80"。
为清楚起见,请参见该过程的动画。
在这里,1-2-4倍的放大率依次应用于粉红色圆圈和背面4-2-1
选项1:
如何处理 - 有几种选择:
假设您需要将对象最多增加 4 倍。
我们考虑中心坐标:40*4=160px;并立即用这些坐标放置圆心: cx="160" cx="160" 现在我们有信心圆在放大时不会超出 SVG 画布。请参见下面的示例。
下一个例子稍微复杂一些,有两个圆圈,沿途可以看到两个动画是如何交互的。
方案2 如果你需要在画布的一角放置一个圆,但不希望它超出画布的边界,或者放大时不希望它沿对角线向中心运行,则使圆心的坐标相等到圆的半径。
在缩放时,还有更多方法可以保持、居中对象。在其他参与者的回答中,一切都已经很好地解释了。感谢所有相关人员。