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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

1777閲覧

SVG内のcontenteditableが効かない

tarotarosu

総合スコア114

SVG

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/07/06 02:31

編集2022/01/12 10:55

前提・実現したいこと

厳密にはcontenteditableが効かないわけではなく、「フォーカスが合わない」という問題が発生しています。

今、下記のようなSVGを描画させるhtmlファイルがあります。

normal.html

html:normal.html

1<!DOCTYPE html> 2<html lang="en" dir="ltr"> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 </head> 7 <body> 8 <div> 9 <svg style="border: 1px solid rgba(0, 0, 0, 0.4);" class="injected-svg" xml:space="preserve" enable-background="new 0 0 533 1071.6" viewBox="0 0 533 1071.6" y="0px" x="0px" id="Top" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"> 10 <g xmlns="http://www.w3.org/2000/svg" id="Background"> 11 <rect fill="#FFFFFF" width="533" height="1071.6"></rect> 12 </g> 13 <g xmlns="http://www.w3.org/2000/svg" id="Name"> 14 <foreignObject xmlns="" x="0" y="897.6101000000001" width="533" height="100" font-size="48" font-family="NotoSansCJKjp-Regular"> 15 <div xmlns="http://www.w3.org/1999/xhtml" style="text-align: center;"> 16 <span xmlns="http://www.w3.org/1999/xhtml" contenteditable="true">Name</span> 17 </div> 18 </foreignObject> 19 </g> 20 <g xmlns="http://www.w3.org/2000/svg" id="Message"> 21 <foreignObject xmlns="" x="0" y="0" width="533" height="336.7" font-size="64" font-family="NotoSansCJKjp-Regular"> 22 <div xmlns="http://www.w3.org/1999/xhtml" style="width: 533px; height: 336.7px; display: flex; flex-direction: column; justify-content: center; text-align: center; line-height: 1.1;"> 23 <span xmlns="http://www.w3.org/1999/xhtml" contenteditable="true">Message</span> 24 </div> 25 </foreignObject> 26 </g> 27 </svg> 28 </div> 29 </body> 30</html> 31

<span>contenteditable属性を持たせ、テキスト編集できるようにしました。

svg

1<span xmlns="http://www.w3.org/1999/xhtml" contenteditable="true">Message</span>

normal.htmlの方は何も問題なく<span>で囲まれたテキストをクリックし、フォーカスを当て、テキストを編集することができます。

しかし、下記(big.html)のようにサイズをものすごく大きくしたSVGを表示した場合、<span>で囲まれたテキストをクリックしてもフォーカスが合いません(テキスト部分をクリックしてもキャレットが表示されません)。
id=Name内の<span>の場合、「N」の横周辺をクリックするとなんとかフォーカスがあってくれることがあります。

big.html

html:big.html

1<!DOCTYPE html> 2<html lang="en" dir="ltr"> 3 <head> 4 <meta charset="utf-8"> 5 <title></title> 6 </head> 7 <body> 8 <div> 9 <svg style="border: 1px solid rgba(0, 0, 0, 0.4);" class="injected-svg" xml:space="preserve" enable-background="new 0 0 4989 10431.5" viewBox="0 0 4989 10431.5" y="0px" x="0px" id="Top" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"> 10 <g xmlns="http://www.w3.org/2000/svg" id="Background"> 11 <rect x="56.7" y="141.7" fill="#FFFFFF" width="4875.6" height="10148"></rect> 12 </g> 13 <g xmlns="http://www.w3.org/2000/svg" id="Name"> 14 <foreignObject xmlns="" x="0" y="7849" width="4989" height="100" font-size="500" font-family="NotoSansCJKjp-Regular"> 15 <div xmlns="http://www.w3.org/1999/xhtml" style="text-align: center;"> 16 <span xmlns="http://www.w3.org/1999/xhtml" contenteditable="true">Name</span> 17 </div> 18 </foreignObject> 19 </g> 20 <g xmlns="http://www.w3.org/2000/svg" id="Message"> 21 <foreignObject xmlns="" x="0" y="141.7" width="4989" height="2915.3" font-size="700" font-family="NotoSansCJKjp-Regular"> 22 <div xmlns="http://www.w3.org/1999/xhtml" style="width: 4989px; height: 2915.3px; display: flex; flex-direction: column; justify-content: center; text-align: center; line-height: 1.1;"> 23 <span xmlns="http://www.w3.org/1999/xhtml" contenteditable="true">Message</span> 24 </div> 25 </foreignObject> 26 </g> 27 </svg> 28 </div> 29 </body> 30</html> 31

normal.htmlのようにテキストのどこをクリックしてもフォーカスが合い、テキストを編集できるようにしたいのですが、
原因は何なのでしょうか?
また、どうすれば解決できるのでしょうか?
何かご回答を頂けると助かります<(_ _)>

追記

Firefoxでbig.htmlを表示して試してみたところ、<span>内のテキストをクリックしたところ、テキスト編集がてきました。しかし、id=Nameの部分はなぜかテキストの表示すらされませんでした。
ホントに原因がわからない...

追記2

下図の青く囲んだ部分あたりをクリックするとテキストにフォーカスが当たり、テキストを編集できます。
イメージ説明

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問