我有一个SVG图形,希望在一个<rect>
元素中的另一个元素上应用:hover
属性。但它不起作用:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="svg">
<style type="text/css"><![CDATA[
#rec1 {
fill:black; // outer element
}
#rec2 {
fill:white; // inner element
display:none; // and element not visible
}
#rec1:hover #rec2 {
display:block; // when hover outer lets inner become visible
// but it doesn't work
}
#rec1:hover {
fill:red; // strange but this hover works
}
]]></style>
<g id="g">
<rect id="rec1" x="0" y="0" width="200" height="50" />
<rect id="rec2" x="100" y="20" width="20" height="20" />
</g>
</svg>
在这种情况下,应用悬停的正确方法是什么?
UPD:找到一个解决方案。
首先,它不是另一个元素中的一个<rect>
元素。他们是兄弟姐妹。由于此类样式仅适用于嵌套元素的#rec1:hover #rec2
,因此在这里不起作用。所以我在最外层的<g>
元素上应用了样式:
#g:hover #rec2 {
display:block; // it works just fine
}
但是,还有其他方法可以解决这个问题吗?
只需使用:
#rec1:hover + #rec2 {
display: block;
}
+
选择器用于选择兄弟(同一元素的子元素——在本例中为g
),这里就是这种情况。
希望有帮助!
就CSS而言,这些矩形并没有嵌套。
只有当#rec2嵌套在#rec1元素中并且#rec1被悬停时,才会应用此样式#rec1:hover #rec2
。
只需将样式应用为#rec2:hover