消えるcanvas
WordPressのテキストモードでcanvas要素
を書いて、ビジュアルモードに切り替えてもう一度テキストモードに戻ったとき、canvas
要素が消えてしまうことがあった。
いろいろと試しているうちに、以下のような挙動があることがわかってきた。
<canvas>
タグと</canvas>
タグを直接一行でつないだ時に消えるらしいcanvas
要素の前後が空行かどうかでも結果が変わるらしい
そこで、タグの書き方と前後の空行の入れ方の組み合わせで、canvasが消えるかどうかをチェックした。
canvasが消える条件
<canvas></canvas>
のように開始タグと改行タグが連続して書かれていて、なおかつ以下のケースの時にcanvas要素が消える。
ケース1:ファイルの中に単独で書いた場合
開始タグと終了タグが<canvas></canvas>のように連続しており、それのみがファイルの中に書かれている場合、ビジュアルエディタを経由すると要素が消える。行末の改行があってもなくても結果は同じ。
1 2 3 4 5 6 |
<!-- 改行なし --> [ファイル開始]<canvas></canvas>[ファイル終了] <!-- 改行あり --> [ファイル開始]<canvas></canvas>[改行] [ファイル終了] |
ケース2:前後に空行がある場合
開始タグと終了タグが<canvas></canvas>
のように連続しており、その行の前後に空行がある場合、ビジュアルエディタを経由すると要素が消え、 
に書き換えられる。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<!-- 前後に空行がある場合 --> ・・・前行 <canvas></canvas> ・・・後行 <!-- 以下のように書き換わる --> ・・・前行   ・・・後行 |
実質的にファイルの中にcanvas要素のみがあることは稀なので、問題となるのは上記の”<canvas></canvas>
の前後に空行がある場合”となる。
canvasが消えない条件
canvasが消えない条件は、上の「canvasが消える条件」の裏返しも含めて以下のようになる。
ケース1:開始タグと終了タグの間に文字があること
開始タグと終了タグの間に文字があれば、周辺条件がどうであってもcanvas要素は消えない。
canvas要素非対応のブラウザ対応のために、この方針をとることには意義がある。
ただし、間にある文字がスペースだけの場合は意味がなく、開始タグと終了タグが連続している場合と同様の結果になる。
1 2 3 |
<!-- 以下のようにすると、前後に空行があっても消えない --> <canvas>a</canvas> |
ケース2:開始タグと終了タグの間で改行されていること
開始タグと終了タグの間で改行されていれば、周辺状況がどうであってもcanvas要素は消えない。
canvas要素内に文を書かない場合は、簡易な一つの解決策。
ただし、開始タグと終了タグの間に空行が入っている場合は結果は複雑で、要素全体が消えたり、いずれかのタグだけが消えたりと結果は複雑になる。
1 2 3 4 |
<!-- 以下のようにしても、canvas要素は消えない --> <canvas> </canvas> |
ケース3:前後に空行がないこと
前後に行があれば(どちらも空行でなければ)開始タグと終了タグが連続していてもcanvas要素は消えない。
ただし、確実にこの記述方法に拠ることを担保しがたい。
1 2 3 4 |
<!-- 前後が空行でなければcanvas要素は消えない --> preceding line <canvas></canvas> succeeding line |
結論
以下の2つのうちいずれかを推奨。
- 開始タグと終了タグの間にcanvas非対応用の文を書く
- 開始タグ
<canvas>
の後で改行し、すぐ次の行に終了タグ</canvas>
を書く
コメント頂きありがとうございます。
自分の覚書のためと考えていて、人様からコメントをいただけるような内容と思っておりませんでした。
お礼遅くなって失礼しました。