【发布时间】:2021-08-26 13:38:04
【问题描述】:
我绘制了一组 3 个 svg 元素:一个蓝色正方形、一个红色圆圈和一个绿色椭圆(参见下面的代码)。 当鼠标悬停其中一个元素时,这三个元素会按比例放大。
我正在尝试应用稍微复杂一点的行为,但到目前为止没有成功:
。当鼠标悬停在蓝色方块上时,所有 3 个元素都应该按比例放大(这部分有效),
。当鼠标悬停在红色圆圈上时,只有红色圆圈和蓝色方块会放大(绿色椭圆不应该移动),
。当鼠标悬停在绿色椭圆上时,只有绿色椭圆和蓝色方块应该放大(红色圆圈不应该移动)。
是否有可能实现这种行为?
.zoom * {
transition: all .4s;
transform-box: fill-box;
}
.zoom:hover * {
transform: scale(1.2);
transform-origin: 50% 50%;
}
<svg width="500" height="500">
<g id="all_shapes" class="zoom">
<rect id="square" x="20" y="20" width="100" height="100" fill="blue"/>
<circle id="circle" cx="170" cy="45" r="25" fill="red" />
<ellipse id="ellipse" cx="170" cy="100" rx="40" ry="25" fill="green" />
</g>
</svg>
编辑
仅使用 CSS 不是强制性的。如果更简单的话,也可以使用 JavaScript,也许可以按照以下步骤操作?
(1)从组'all_shapes'中获取所有元素'id,
(2) 默认创建一个id为'square'的数组,
(3) 追加悬停元素的id,
(4) 将 CSS '.zoom' 应用于数组元素。
【问题讨论】:
-
#2 和 #3 不能仅通过 CSS 实现,因为 CSS 选择器是级联的,它们只能选择 after 的元素,而不是 before 他们。
-
@Terry 谢谢。所以我假设我需要一些 JavaScript?像 (1) 列出特定组中名为“all_shapes”的所有元素的 ID,(2) 默认选择“方形”,以及 (3) 添加被鼠标悬停的元素的 ID?这样的任务似乎太复杂了,不是吗?
-
我有一个想法,我回家后会测试它...
-
@biberman 通用兄弟选择器
~只选择下游兄弟,从不选择上游。 -
@Terry: 我知道...
标签: javascript css svg