質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1763閲覧

SVGマスクで画像をくり抜きした要素にホバーした際、画像を拡大させたい

code1001

総合スコア1

SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/11/23 06:47

編集2021/11/23 08:43

前提・実現したいこと

添付画像のような形で画像をくり抜いたデザインのものを実装したい。
IE対応が必要のため以下サイトを参考にSVGマスクを利用し実現はできました。
https://b-risk.jp/blog/2018/07/svg-clippath/
【実装したいイメージ】
イメージ説明

発生している問題・エラーメッセージ

ホバー時に画像だけを拡大したいのですが、この実装方法の場合、マスク部分も一緒に拡大されてしまいます。
【ホバーアクションのイメージ】
https://weconet.co.jp/css_image_zoom/

該当のソースコード

html

1<!-- 表示用SVG --> 2<svg viewBox="0 0 301 186.795" class="maskedElem"> 3 <image xlink:href="https://placekitten.com/g/200/300" width="100%" height="100%" preserveAspectRatio="xMidYMid slice" clip-path="url(#clip01)"/> 4</svg> 5 6<!-- クリップパス用SVG --> 7<svg width="0" height="0" style="position: absolute; top: 0; left: 0;"> 8 <clipPath id="clip01"> 9 <path d="M102.377,185.8a9.5,9.5,0,0,1-9.5-9.5v-4.52c-.269-1.787-1.109-4.917-3.722-6.515a14.2,14.2,0,0,0-4.388-1.64H8.1a8.1,8.1,0,0,1-8.1-8.1V8.1A8.1,8.1,0,0,1,8.1,0H291.9A8.1,8.1,0,0,1,300,8.1V176.3a9.5,9.5,0,0,1-9.5,9.5Z" transform="translate(0.5 0.5)" fill="#fff" stroke="#707070" stroke-width="1"/> 10 </clipPath> 11</svg>

css

1.maskedElem { 2 width: 100%; 3 height: auto; 4}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

IE対応であれば別の手段でも構いません。いい方法あれば教えていただきたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ホバー時に画像だけ拡大したいのなら、scale()は画像だけに適用して、クリッピングは画像の親に適用しましょう。

css

1svg image { 2 transform-origin: center; 3 transition: transform 0.1s; /*必須ではない*/ 4} 5 6svg image:hover { 7 transform: scale(1.2); 8 transition: transform 0.3s; /*必須ではない*/ 9}

html

1<svg viewBox="0 0 301 186.795" class="maskedElem"> 2 <g clip-path="url(#clip01)"><!--親をクリップ--> 3 <image xlink:href="https://placekitten.com/g/200/300" 4 width="100%" height="100%" 5 preserveAspectRatio="xMidYMid slice"/> 6 </g> 7 <clipPath id="clip01"><!--SVGを2つに分ける必要はない--> 8 <path d="M102.377,185.8a9.5,9.5,0,0,1-9.5-9.5v-4.52c-.269-1.787-1.109-4.917-3.722-6.515a14.2,14.2,0,0,0-4.388-1.64H8.1a8.1,8.1,0,0,1-8.1-8.1V8.1A8.1,8.1,0,0,1,8.1,0H291.9A8.1,8.1,0,0,1,300,8.1V176.3a9.5,9.5,0,0,1-9.5,9.5Z" 9 transform="translate(0.5 0.5)" fill="#fff" 10 stroke="#707070" stroke-width="1"/> 11 </clipPath> 12</svg>

投稿2021/11/25 09:27

int32_t

総合スコア21695

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

code1001

2022/01/15 18:12

お返事が遅くなり大変申し訳ございません。 教えていただいたとおり親要素として<g></g>を追加しその要素にclip-pathを適応することで実現できました! IEでは拡大されずでしたが、他のブラウザではホバー時の拡大はできました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問