タグによって:hover
埋め込まれた SVG 要素のスタイルを設定するために CSS 疑似クラスを使用しようとしていますが、うまくいかないようです :-/ これが私のコードです:<defs>
<use>
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>
<style type="text/css" media="screen">
.active { fill: #0BE; }
.active:hover { opacity: 0.8; stroke: #F0F; stroke-width: 4px; }
.active2 #p2 { fill: #0BE; }
.active2:hover #p2 { opacity: 0.8; stroke: #F0F; stroke-width: 4px; }
#p2:hover { opacity: 0.8; stroke: #F0F; stroke-width: 4px; }
</style>
</head>
<body>
<svg version="1.1" width="640" height="480"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<polygon id="p0" points="100,0 50,86.6 -50,86.6 -100,0 -50,-86.6 50,-86.6" class="active"/>
<g id="gr1">
<polygon id="p1" points="130,0 50,86.6 -50,86.6 -100,0 -50,-86.6 50,-86.6"/>
<polygon id="p2" points="100,0 50,86.6 -50,86.6 -100,0 -50,-86.6 50,-86.6" class="active"/>
</g>
</defs>
<g transform="translate(70,100)">
<use xlink:href="#p0" transform="translate(40,0)"/>
<use xlink:href="#p0" transform="translate(250,0)"/>
<use xlink:href="#p0" transform="translate(460,0)" class="active" />
</g>
<g transform="translate(100,300)">
<polygon id="style" points="110,0 50,86.6 -50,86.6 -100,0 -50,-86.6 50,-86.6" class="foo"/>
<use xlink:href="#gr1" transform="translate( 350,2)" class="active2"/>
</g>
</svg>
</body>
</html>
ユーザーが埋め込み要素の上にマウスポインターを置くと、クラスが「アクティブ」な内部要素のスタイルが変更されるように機能させたいと考えています。から 1 つのシェイプを<defs>
直接埋め込み、<use>
それを埋め込む CSS クラスを適用すると機能します。ただし、 を介して埋め込まれたグループ内のクラスまたは ID では機能しません<use>
。
修正方法は?
または、もっと良い方法がありますか?
グループ全体ではなく、ユーザーがホバーしたときに埋め込みオブジェクト内のこの特定の部分のみを変更する必要があります。これは、このグループのさまざまな部分にさまざまなスタイルが適用され、マウスでホバーしたときにさまざまに変更する必要があるためです。
編集:取得したいもの
私が取得したいのは、1 つの「ライブラリ オブジェクト」を<defs>
SVG ドキュメントのさまざまな場所に埋め込む方法です。ライブラリ オブジェクトのコードを変更せずにこれらの色を簡単にカスタマイズする必要があるため、このオブジェクトの一部は CSS のカスタム カラーでスタイル設定する必要があります。
次に、マウス ポインターがそのような「アクティブな」オブジェクトの上にあるときに、そのパーツのスタイルを変えることでユーザーに知らせる必要があります。
残念ながら、<use>
要素のサブ要素にスタイルを適用することはできません。DOM のサブ要素ではないためです<use>
(他の人が既に述べたように)。<defs>
DOM 内にあり、CSS セレクターでアドレス指定できるため、セクション内の要素にいくつかのスタイルを適用できますが、非表示であるためホバーできず:hover
、疑似クラスを適用しても機能しません。また、このクラスが に適用された場合も機能しません<use>
。適切なサブ要素をサブ選択できないためです (それらは のサブ要素ではありません<use>
)。したがって、これらの疑似クラスを適用するためのフックはありません:hover
。
多分私の問題に対する他の解決策がありますか?