srcのない画像を含める有効な方法は何ですか?


234

私は後でJavaScriptで動的にsrcを入力する画像を持っていますが、簡単にするために、ページロード時に画像タグを存在させて、何も表示しないようにします。私<img src='' />は無効であることを知っているので、これを行うための最良の方法は何ですか?


4
これは比較的古い質問ですが、srcのないイメージは本質的に無意味であることを考慮する価値があります。そのため、仕様では、最初に画像にsrcが埋め込まれたリソースを指す必要があると述べています。妥当性やセマンティクスについて検討している場合は、画像を完全に省略し、事後に追加する方がはるかに便利です。HTMLには、後でデータが入力されるプレースホルダー画像を指定する方法がないためです。
BoltClock

1
Mika Tuupolaの遅延読み込みjQueryプラグインを使用する場合、マークアップ '<img class = "lazy" data-original = "img / example.jpg" width = "640" height = "480">'を使用するため、ある意味で、ソースを指す必要がありますが、src属性を使用して行う必要はありません。
iWillGetBetter

代わりにdiv要素を使用できます。これを参照してください=> stackoverflow.com/a/5513934/1395101
Amin Ghaderi

回答:


237

画像のソースを省略する有効な方法はありませんが、そこにあるサーバーのヒットを引き起こすことはありませんソースが。私は最近、iframesに同様の問題//:0があり、最良の選択肢であると判断しました。いや、本当に!

//(プロトコルを省略して)で開始すると、現在のページのプロトコルが使用され、HTTPSページでの「安全でないコンテンツ」警告が防止されます。ホスト名をスキップする必要はありませんが、短くします。最後に、のポートは:0、サーバー要求が行われないことを保証します(仕様によると、これは有効なポートではありません)。

これが私が見つけた唯一のURLで、どのブラウザでもサーバーヒットやエラーメッセージは発生しませんでした。通常の選択— javascript:void(0)— HTTPS経由で提供されるページで使用すると、IE7で「安全でないコンテンツ」の警告が表示されます。他のポートが原因で、無効なアドレスであってもサーバー接続が試行されました。(ブラウザによっては、無効なリクエストを出し、タイムアウトになるのを待つだけです。)

これはChrome、Safari 5、FF 3.6、およびIE 6/7/8でテストされましたが、試行されたリクエストを強制終了するネットワークレイヤーであるため、どのブラウザーでも機能するはずです。


16
この回答により、ファイアウォールが、たとえばポート0へのアクセスについて警告する可能性があります。または、サーバーのセキュリティログが発生する可能性があります。助言する答えabout:blankはおそらくより良い解決策です。
Florian Margaine、2013年

10
これにより、壊れた画像アイコンが表示されます。これを見た人はいますか?最新のFirefox(27)を使用しています。
dmikester1 14

10
これもw3cバリデーターに失敗します。要素imgの属性srcの不正な値//:0:無効なホスト:空のホスト。
ysrb 2014

これは機能しません。ASP.NETMVC 4アプリケーションには、clearingという画像ギャラリープラグインが含まれています。プラグインは画像を動的に作成し、実際に画像がフェッチされるまで//:0をsrcに配置します。これにより、私のホームコントローラーのインデックスアクションが2回呼び出されました。だから注意してください。
jpgrassi 2014

2
Firefox 38では、このアプローチは画像のonerrorハンドラーをトリガーします。
Nate Whittaker、2015年

221

別のオプションは、空白の画像を埋め込むことです。目的に合った画像であれば何でも可能ですが、次の例では、26バイトのGIFをエンコードしています-http://probablyprogramming.com/2009/03/15/the-tiniest-gif-everから

<img src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" width="0" height="0" alt="" />

以下のコメントに基づいて編集:

もちろん、ブラウザのサポート要件を考慮する必要があります。IE7以下のサポートは注目に値しません。http://caniuse.com/datauri


14
いい案!しかし、私にとってこれは画像要素を殺します- imgたとえば背景や境界線を表示するために要素の他の側面が必要な場合src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="は、1px x 1pxの透明gifから取得してみてください。Photoshopでbase64-image.de
user56reinstatemonica8

4
リソースをデータURIでインライン化することについて、2度考えてみてください。mobify.com
blog

1
このオプションの実行可能性は、サポートする必要のあるブラウザーによって異なります。caniuse.com
Jeff Clemens

6
ここでは透明1つのピクセルのPNGがあります:data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNgYAAAAAMAASsJTYQAAAAASUVORK5CYII=
Keavon

2
私のために働いた透明画像のURL -data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7
ビクラムラオ

34

最近の私は、空のimg srcのための最良の短くて健全で有効な方法は次のとおりです。

<img src="data:," alt>
or
<img src="data:," alt="Alternative Text">

2番目の例では、「代替テキスト」(およびChromeとIEのbroken-image-icon)が表示されます。

"data:,"有効なURIです。空のメディアタイプのデフォルトはtext/plainです。したがって、それは空のテキストファイルを表し、以下と同等です。"data:text/plain,"


OT:すべてのブラウザはプレーンを理解しますalt。を省略でき=""ます。これはHTML仕様により暗黙的です。


1
W3CバリデーターチェックでのHTMLエラーはありません。不要なリクエストはありません。itそれを行う方法として有効な方法のようです。
カイノアック

ベスト!あなたはそれが、srcsetでの使用を確認したい場合は、1つのより多くの事、srcset="data:,x"
ルシアンDavidescu

18

要素を動的に追加することをお勧めします。jQueryまたは他のJavaScriptライブラリを使用する場合、それは非常に簡単です。

また、見てprependappend。それ以外の場合、そのような画像タグがあり、それを検証したい場合は、1pxの透明gifやpngなどのダミー画像の使用を検討してください。


7
+1これが最良の答えです。とにかく画像ソースが動的に設定されている場合は、要素全体を動的に追加する必要があります。srcが設定されるまでそれを表示したくない場合は、その前に要素が存在する必要がある理由は考えられません。
Andrew Ensley、2014年

15

私はしばらくこれをしていませんが、これと同じことを一度経験しなければなりませんでした。

<img src="about:blank" alt="" />

私のお気に入りは、//:0ポート0(tcpmuxポート?)でオリジンサーバーへのHTTP / HTTPS接続を試行することを意味します-これはおそらく無害ですが、とにかくやりたくないです。ブラウザーはポート0を表示し、リクエストを送信しないこともあります。しかし、私はまだそれがおそらくあなたが意味するものではないときは、そのように指定されない方がいいです。

とにかく、about:blank私がテストしたすべてのブラウザで、のレンダリングは実際には非常に高速です。私はそれをW3Cバリデーターに入れただけで、文句は言われなかったので、有効であるかもしれません。

編集:それをしないでください。すべてのブラウザで機能するわけではありません(この回答のコメントで指摘されているように、「壊れた画像」アイコンが表示されます)。<img src='data:...以下のソリューションを使用してください。または、妥当性は気にしないが、サーバーへの余分なリクエストを避けたい場合は<img alt="" />、src属性を指定せずに実行できます。しかし、それは無効です HTMLなので、慎重に選択してください。

さまざまなメソッドの全体を示すテストページ:http : //desk.nu/blank_image.php-あらゆる種類の異なるdoctypeとcontent-typeで提供されます。-以下のコメントで言及されているように、http://memso.com/Test/BlankImage.htmlにあるMark Ormstonの新しいテストページを使用してください。


これは、ネットワーク層にエラーを発行させるよりもきれいに見えます。
DenysSéguret2013年

少なくとも、あなたは愚かなファイアウォールがポート0を呼び出す許可を求めないことを確信しています...
DenysSéguretJan

1
言及することの価値、このディスプレイ(あまりにそしておそらく他のブラウザ)クロームの「壊れた画像」アイコン
user56reinstatemonica8

1
思ったよりも悪い-html5 doctypeを使用しても、SafariやChromeでは動作しないようです。私はページのContent-typeとDoctypeをいじるテストページを持っています、そして今のところ私のお気に入りは-src 属性のない<img />イメージタグです。これはない(ので、そこに空のALTタグを入れない点はありません、どちらかの)有効。私はそれをいじり続けており、それに応じて私の答え(または取り消し線)を更新します。
Uberbrady 2013

2
テストページを取得して更新したので、画像が適切に機能しない場合の方がはるかにわかりやすくなっています。古い空の画像は、「常に機能する」の例と、表示されている内容の簡単な説明として含まれています。memso.com / Test / BlankImage.html これにより、有効な空のデータgifが唯一の再利用可能であることがわかりました古い空白のgif画像(古いIE7以下ではまだ必要)以外の最新のブラウザのオプション
Mark Ormston 2014年

12

コメントに書かれているように、この方法は間違っています。

以前にこの答えは見つかりませんでしたが、W3仕様によると、有効な空のsrcタグはアンカーリンクになり#ます。

例:src="#"src="#empty"

ページは正常に検証され、追加のリクエストは行われません。


1
このアプローチに反対する議論はありますか?ブラウザ間でどうですか?
2015年

18
FirefoxとChromeの両方がこのアプローチを使用するときに2番目のリクエストを行うのを見たので、お勧めしません。
マリウス

5
FirefoxとChromeが2番目のリクエストを行い、JMeterもimg srcを解析するため、再帰的にページがロードされます(最大の深さに達するまで)
burna

1
あなたは葉にページをしたい場合は、URLが神秘的に変化するため、FFでは、二回のブラウザのバックボタンをヒットしなければなりません...
Kalaschni

3
これは明らかに間違っています。たまたまコメントを読んだ人-これは使用しないでください
Shadow WizardはEar For You

11

srcを空の文字列に設定し、CSSにルールを追加して壊れた画像のアイコンを非表示にするだけでうまくいくことがわかりました。

[src=''] {
    visibility: hidden;
}

[ng-src = ''] {可視性:非表示; angularjsでng-srcディレクティブを使用している場合
Ivan Paredes

1
srcはに設定する''必要があり、未定義であってはならないことに注意してください。
Vincent Hoch-Drei

私が間違っていない場合でも、要求は実行されます
ニコ

9

src属性を空のままにしておくと、ブラウザは現在のページのURLにリクエストを送信します。URLが必要ない場合は、常に1 * 1の透過imgをsrc属性に追加します。

src="data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA="

1
一部のブラウザでは、これは黒い点として表示されます。
tomasz86 2015


1
このsrc data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==は機能しました
Max Yari 2016年

9

私はそれを使用してそれを見つけました:

<img src="file://null">

リクエストを行わず、正しく検証します。

ブラウザは、ローカルファイルシステムへのアクセスをブロックするだけです。

ただし、たとえば、Chromeのコンソールログにエラーが表示される場合があります。

Not allowed to load local resource: file://null/

2
反対票を説明しますか?議論のためのケースを提供するだけでこの方法を使用することはお勧めしません。そして、それは正しく検証し、追加の要求を行わないという質問の要件を満たしています。
tenkod

8

この記事に基づいて、真に空白の有効で互換性の高いSVGを使用してください

src="data:image/svg+xml;charset=utf8,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%3E%3C/svg%3E"

他のSVGと同じように、デフォルトのサイズは300x150pxになりますimgが、実際の実装ではいずれの場合でも必要になる可能性があるため、要素のデフォルトスタイルで操作できます。


回答を更新していただきありがとうございます。IE9まで互換性のなかったsvgを使用していることを考えると、互換性は他のdata-uriソリューションよりもさらに悪いと思います。幸いにも、レガシーIEをサポートする必要があったのは久しぶりですが、それでも一部の人には関係があります。
funkylaundry 2016年

しかし、これはこの記事と同じ問題を抱えていませんか?dev.mobify.com/blog/data-uris-are-slow-on-mobile。<img src = "about:blank">オプションとcss img [src = "about:blank"] {opacity:0}のソリューションが最適だと思います。または、そのレベルのCSSセレクターが古いブラウザーでサポートされていない場合は、imgタグに「ロードイン」などのクラスを指定します。さらに良いことは、クラスを指定し、JavaScriptを使用してdata-srcをスワップし、次にロード関数を画像に設定して、ロード時にフェードインするようにします。ロード中にスピナーを表示するように設定することもできます。本当にプロフェッショナルに見えます。
ジョーダンカーター

@JordanCarter確かに、詳細なパフォーマンスが気になる場合。補足として、あなたが提案している属性セレクターvisibility: hiddenよりも少しふさわしいとopacity: 0思います。
mystrdat 2016

6

ベン・ブランクの答えを基にして、これをw3バリデーターで検証する唯一の方法は次のとおりです。

<img src="/./.:0" alt="">`

検証はしますが、Firefoxで空のalt属性を使用しても画像が壊れます。
James Wright、

4

私は個人的にを使用してabout:blank srcimg要素の不透明度をに設定することで、壊れた画像アイコンに対処しています0


7
汚い!
mystrdat 2014

@mystrdat:なぜそれが汚いのか、詳しく説明しますか?「//:0」を使用した受け入れられた答えは、Firefoxで壊れた画像アイコンと変な終わりのないリクエストを私に与えました。1ピクセルのbase64 png代替案も、投票数が多いため、<img>をプレースホルダーとして使用すると、高さと幅を指定する場合と指定しない場合の両方で問題が発生しました。これは、不必要な要求なしにすべてのリンターと検証をパスせずに目標を達成するために見つけた最もクリーンな方法です。
ミゲル

上記のすべての解決策は、受け入れられたものとして非常にばかげています。時間があれば、新しい返事をします。
mystrdat

@mystrdat:私はあなたがこれについて何を言わなければならないかを学んでも幸せでしょうか?
funkylaundry 2016年

1
@funkylaundry大きな主張をして失踪したことをお詫びします。今、私の回答を投稿しました。また、他のData URIソリューションに気づかなかったことも認めますが、同意しますが、いずれにせよ、私が構文に優れていると思います。
mystrdat

4
<img src="invis.gif" />

ここで、invis.gifは単一ピクセルの透明gifです。これは、将来のブラウザバージョンでは機能しなくなり、90年代以降のレガシーブラウザでも機能しています。

pngも機能するはずですが、私のテストでは、gifは43バイトで、pngは167バイトでしたので、gifが勝ちました。

psはaltタグを忘れないでください。バリデーターも同様です。


-1

単に、このように:

<img id="give_me_src"/>

4
仕様によると良い考えではありません:src属性が存在し、有効なURLが含まれている必要があります...
Michael

1
多分それはクロームでうまく動作しますが、それはWILL ... htmlの検証でエラーを投げると、それはW3有効なHTMLではありません
EhsanT
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.