[解決済み] CSSによるフォールバック画像
2022-02-19 02:19:04
質問
を持っています。
<img>
は、リモート画像を表示するものです。
以下のようにしたい。
リモート画像にアクセスできない場合、別のローカル画像にフォールバックします。
.
<img class="cc_image fallback" src="http://www.iconarchive.com/download/i82888/limav/flat-gradient-social/Creative-Commons.ico">
.cc_image {
width: 256px;
height: 256px;
}
.cc_image.fallback {
/* this URL here is theoretically a local one (always reachable) */
background-image: url('https://cdn2.iconfinder.com/data/icons/picons-basic-3/57/basic3-010_creative_commons-256.png');
}
というように動作します。 src が見つからない場合は、背景画像が表示されます。
欠点は
- 常に背景画像を読み込む(HTTPリクエストの追加)。
- が表示されます。 not-found-icon (Safariではクエスチョンマーク)が背景画像の上に表示されます。(大きな問題ではありませんが、これを取り除きたいのです。)
どうすればこれらの問題を解決できますか? または:同じ結果を得るための他のテクニックがありますか?
私が見つけたのは
この質問
が、与えられた解決策は、Javascriptに依存しているか、または
<object>
(Chromeでは動作しないようです)。できればJavascriptを使わない、純粋なCSS/HTMLのソリューションを希望しています。
複数の
background-image
が、それが良い選択肢かどうかはわかりません(ブラウザのサポート? と、到達できない画像でフォールバックするのか?)
あるいは、SVG画像を以下のように埋め込むことを考えていました。
データ-ウリ
.
最も柔軟な(そして互換性のある)方法の提案は?
解決方法は?
残念ながら、Javascriptやobjectタグがないと、この2つを実現することはできません。
画像アイコンが欠けるのを回避するために、このようにすることもできます。
画像をコンテナ内に配置します(すでにコンテナ内に入っている場合もあります)。 コンテナの幅と高さは画像と同じにする。
- フォールバック画像をコンテナの背景画像として設定します。
- リモート画像をimgタグの背景画像として設定します。
- 1x1 ピクセルの透明な png を画像の src として読み込みます (余分な HTTP リクエストなしで実行する方法については、コードを参照してください)。
コード
HTML
<!-- you could use any other tag, such as span or a instead of div, see css below -->
<div class="cc_image_container fallback">
<img class="cc_image" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" style="background-image: url(*your remote image*)"/>
</div>
CSS
.fallback {
background-image: url(*fallback image here*);
display: inline-block; /*to ensure it wraps correctly around the image, even if it is a a or span tag*/
min-width: specify a minimum width (could be the width of the fallback image) px;
min-height: specify a minimum height (could be the height of the fallback image) px;
background-position: center center; // fallback for older browsers
background-size: cover;
background-repeat: no-repeat;
}
.cc_image {
min-width: same as container px;
min-height: same as container px;
background-position: center center; // fallback for older browsers
background-size: cover;
background-repeat: no-repeat;
}
-
min-width
とmax-width
は、背景画像が表示されたままであることを確認します。 -
background-position
画像の中心部分が見えるようにし、古いブラウザのために緩やかに劣化させます。 -
background-size
は、要素の背景を埋めるように背景画像をリサイズします。そのためcover
の値は、画像が要素を完全に覆うようにリサイズされることを意味します(画像の外側の縁が一部切り取られることがあります)。 - img srcタグのbase64データは、透明な1pxのpngです。
- これにより、一般ユーザーや一部のボットがあなたの画像を保存できない可能性があるという利点もあります(初歩的な画像保護)。
- 唯一の欠点は、フォールバック画像のためのHTTPリクエストが1回余分に発生することです。
関連
-
[解決済み] ピンクの背景のアイコンを透明にするには?
-
[解決済み] RGBAカラーをRGBに変換する
-
[解決済み] CSSの親セレクタはありますか?
-
[解決済み] CSSでcellpaddingとcellspacingを設定する?
-
[解決済み] CSSでテキストや画像の背景を透明にするには?
-
[解決済み] div' コンテナに合わせて画像を自動リサイズするにはどうしたらいいですか?
-
[解決済み] div 内の画像を縦に並べる方法
-
[解決済み】linuxでコマンドラインから一連の画像をPDFに変換するにはどうすればいいですか?[クローズド]
-
[解決済み] [Solved] How do you stretch an image to fill a <div> while keeping the image's aspect-ratio?
-
[解決済み】HTML5入力のプレースホルダの色をCSSで変更する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 8bit PNGと32bit PNGの違い?
-
[解決済み] CSSによるフォールバック画像
-
[解決済み] URLからPNGをダウンロードする LookIntoBitcoin
-
[解決済み] kubernetesでデプロイメント/イメージを削除する方法
-
[解決済み] RGBAカラーをRGBに変換する
-
[解決済み] RGBカラーの知覚的な明るさを決定する公式
-
[解決済み] [Solved] Inputting a default image in case the src attribute of an html <img> is not valid?
-
[解決済み】JPGとJPEGの画像フォーマット比較
-
[解決済み] HTML5 アップロード前に画像をプリリサイズする
-
[解決済み] knitr for markdownを使用してローカルイメージのサイズを設定する方法は?