😇
CSSで画像の読み込みがエラーになったときにだけテキストを表示
はじめに:今回のテクニックはあまり実用的ではないかもしれません。
<img>
要素では基本的に疑似要素の:before
を使うことはできません。CSSでimg:before { content: "Foo" }
と書いても表示されるのは画像だけです。テキストは表示されません。
エラーのときだけ疑似要素が表示される
ただし、:before
や:after
のcontent
プロパティに指定したテキストは、画像がエラーになったときにはaltテキストと合わせて表示されます。これを活用して、画像の読み込みが失敗したときにだけメッセージを表示してみます。
↓ CSSはこんな感じにしてみます。altテキストの前に表示するものを:before
で、後に表示するものを:after
で指定します。
CSS
img:before {
content: "表示したかった『";
}
img:after {
content: "』の画像が見つからんかったわ。😇URLは " attr(src) " なんやが…";
}
なお、content
内でattr(src)
を使うと、imgタグに指定されたsrc
の中身を表示することができます。
正しい画像のURLを指定した場合
まずsrc
に正しい画像を指定してみます。
HTML
<img src="正しい画像のURL" alt="ネコの画像" width="300" height="200"/>
問題なく表示される
こんな感じでかわいいネコの画像だけが表示されました。テキストは表示されません。
誤ったURLを指定して読み込みエラーになった場合
続いて、存在しない画像のURLを指定してみます。
HTML
<img src="https://invalid.cat/cat.jpg" alt="二足歩行で歩き回るネコ" width="300" height="200"/>
👇 画像の読み込みエラーになり、こんな表示になりました。
疑似要素テキストに改行を入れる
窮屈なので改行を入れてみます。疑似要素のcontent
内で改行を入れるためにはwhite-space
プロパティにpre
やpre-wrap
を指定したうえで改行したい位置に\A
を挿入します。
CSS
img {
white-space: pre;
}
img:before {
content: "表示したかった\A『";
}
img:after {
content: "』\Aの画像が見つからんかったわ😇\AURLは " attr(src) " なんやが…";
}
👇 結果はこんな感じになりました。
Discussion