【发布时间】:2016-07-13 23:10:12
【问题描述】:
首先,我是前端编码的新手,所以请原谅显而易见的问题(如果问题是这样的话)。
在过去的几天里,我一直在尝试使用 SVG 圆圈,并且在这方面度过了一段糟糕的时光。目的是对齐 3 个 SVG 圆圈(页面中心的一个小圆圈和每侧的两个大圆圈)。我今天终于实现了,但是悬停状态行为现在表现得很奇怪(我发誓这永远不会结束)。
以下是相关代码:
<div id = "nodes">
<!-- <object id = "about_nodes">
<embed id = "left_about_svg" src = "resources/node-images/left-about-subnode.svg" type = "image/svg-iml"></embed>
<embed id = "about_svg" src = "resources/node-images/about-node.svg" type = "image/svg-iml"></embed>
<embed id = "right_about_svg" src = "resources/node-images/right-about-subnode.svg" type = "image/svg-iml"></embed>
</object>-->
<div id = "about_node">
<object>
<embed id = "about_svg" src = "resources/node-images/about-node.svg" type = "image/svg-iml"></embed>
</object>
</div>
<div id = "left_about_subnode">
<object>
<embed id = "left_about_svg" src = "resources/node-images/left-about-subnode.svg" type = "image/svg-iml"></embed>
</object>
</div>
<div id = right_about_subnode>
<object>
<embed id = "right_about_svg" src = "resources/node-images/right-about-subnode.svg" type = "image/svg-iml"></embed>
</object>
</div>
如您所见,有一些被注释掉的 HTML。我正在试验不同级别的容器,看看这是否是问题所在。不是。
CSS:
#about_svg{
display: inline;
position: absolute;
width: 10%;
height: 10%;
left: 50%;
margin-top: 2%;
-moz-transform: translateX(-50%);
-webkit-border-radius: 100%;
-moz-border-radius: 100%;
border-radius: 100%;
text-align: center;
}
#left_about_svg{
display: inline;
position: absolute;
width: 65%;
height: 65%;
left: 25%;
top: 3%;
-moz-transform: translateX(-50%);
-webkit-border-radius: 100%;
-moz-border-radius: 100%;
border-radius: 100%;
text-align: center;
}
#right_about_svg{
display: inline;
position: absolute;
width: 65%;
height: 65%;
left: 75%;
top: 3%;
-moz-transform: translateX(-50%);
-webkit-border-radius: 100%;
-moz-border-radius: 100%;
border-radius: 100%;
text-align: center;
}
还有 SVG:
<svg version="1.1" id="about_node" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="-0.531 -0.583 25.063 25.114" preserveAspectRatio="xMidYMid meet"
style="enable-background:new -0.531 -0.583 25.063 25.114;" xml:space="preserve">
<defs>
<style type="text/css">
.circle{
fill:white;
stroke:#000000;
stroke-miterlimit:10;}
#about_node:hover .circle{
fill: red;
transition: 1s;
stroke: red;
}
</style>
</defs>
<circle class = "circle" cx="12" cy="12" r="12"/>
目前所有 3 个圆圈的 SVG 基本相同(左右圆圈没有悬停状态)所以我只发布这个。
基本上,我发现绝对定位会导致我的嵌入对象在我的圆圈周围有一个大的矩形框(当我使用inspect element时观察到) (大约 3 个直径长)。小居中的左侧和右侧的较大的遮挡了居中的悬停状态。
如果我满足以下条件,则悬停状态有效:
1) 将我的所有圆圈混合在一起,将窗口缩小一半(我需要解决的另一个问题),我可以触摸小圆圈的尖端并改变它的颜色。
2) 去掉中间的左右两个大圆圈。但是,这会将悬停状态置于嵌入对象的大矩形上,而不是圆形本身。
3) 将所有内容更改为相对定位,所有内容都搞砸了,但圆圈的悬停状态正常工作,嵌入对象框变为正方形
这似乎归结为绝对定位。但是,我不能使用相对,因为我失去了可伸缩性并且不可能定位元素(至少对我来说)。
有谁知道我做错了什么?天哪,我只想要三个具有悬停功能的圆圈!为什么这么难!?
【问题讨论】:
-
如果没有一个有效的例子——甚至是一张图片,就很难理解你想要实现的目标。你的宽度看起来很奇怪。 65%+10%+65% > 100%。你为什么要给你的 SVG 一个边界半径?另外,您的 SVG 是外部的是否有原因?
-
抱歉,这些高度和宽度值不是容器元素的百分比吗?所以 50% 的宽度会在水平方向占据容器的一半,50% 的高度会在垂直方向占据容器的 50%。我想因为它是一个圆圈,我只需要一个,但我认为它不必总和为 100%。并非所有浏览器都支持内联 svg,因此是外部的。
标签: svg hover positioning geometry absolute