--- title: ': 画像埋め込み要素' slug: Web/HTML/Element/Img tags: - Content - Element - Graphics - HTML - HTML Graphics - HTML Images - HTML Photos - HTML Pictures - HTML embedded content - Image - Image Element - Media - Multimedia - Photos - Pictures - Reference - Web translation_of: Web/HTML/Element/img ---
HTML の <img>
要素は、文書に画像を埋め込みます。
上記の例では、 <img>
要素のとてもシンプルな使い方を示しています。
src
属性は必須で、埋め込みたい画像へのパスを入れます。alt
属性は画像のテキストによる説明で、必須ではありませんがアクセシビリティのために非常に有用です。 — 読み上げソフトがこの説明を読み上げることで、画像が何を表すかをユーザーが知ることができます。また、ネットワークエラーやコンテンツのブロック、リンク切れ等の理由で画像が読み込めなかった場合にも代替テキストが表示されます。他にも、様々な目的で指定できる属性がたくさんあります。
HTML 標準では、対応しなければならない画像形式を指定していないので、{{glossary("user agent", "ユーザーエージェント")}}によって対応する画像形式は異なります。ウェブで最もよく使われている画像形式のリストを以下に示します。
{{page("/ja/docs/Web/Media/Formats/Image_types", "Common_image_file_types")}}
注: ウェブブラウザーが対応している画像形式に関する、より包括的な情報については、画像ファイルの種類と形式ガイドを参照してください。こちらには、対応されているがウェブコンテンツでは推奨されていない画像形式 (例: ICO、BMP など)も含まれています。
画像の読み込みまたは表示の間にエラーが発生した場合、かつ {{htmlattrxref("onerror")}} イベントハンドラーが {{event("error")}} イベントを扱うよう設定されていた場合は、イベントハンドラーが呼び出されます。これはいくつもの状況がありえます。
src
属性が空 (""
) または null
である。src
の {{glossary("URL")}} が現在ユーザーがいるページの URL と同じである。<img>
要素の属性に寸法が指定されていなかった場合。この要素にはグローバル属性があります。
注: ブラウザーは常に画像を表示するわけではありません。ブラウザーが画像を表示しない状況はいくつかがあります。
このような場合、ブラウザーは、画像をこの要素の alt
属性で定義された文字列に置き換えます。このような理由から、 alt
には可能な限り役に立つ値を指定するべきです。
alt
属性を省略すると、画像がコンテンツの鍵となる部分であり、同等のテキスト表現を行うことができないことを表します。この属性に空文字列を設定すると (alt=""
)、この画像がコンテンツにおいて重要な箇所ではないことを示し、視覚ブラウザーではない場合は{{glossary("Rendering engine", "レンダリング")}}を省略することがあります。視覚ブラウザーでは、 alt
が空欄で画像の表示に失敗した場合は、壊れた画像のアイコンの表示が省略される場合もあります。
この属性は画像をテキストにコピー&ペーストした場合や、リンクされた画像をブックマークに保存したときにも使用されます。
関連する画像の取得の際に {{glossary("CORS")}} を使用しなければならないかどうかを示します。 CORS リクエストから返されたCORS が有効な画像は、 {{HTMLElement("canvas")}} 要素で「汚染」されることなく再利用することができます。
crossorigin
属性が指定されていない場合は、 ({{httpheader("Origin")}} リクエストヘッダーがない) CORS 以外のリクエストが送信され、ブラウザーは画像が汚染されたものとしてマークし、その画像データへのアクセスを制限して、 {{HTMLElement("canvas")}} 要素での使用を防ぎます。
crossorigin
属性が指定されている場合は、({{httpheader("Origin")}} リクエストヘッダーを伴う) CORS リクエストが送信されます。しかし、サーバーがオリジンのサイトによる画像データへのオリジン間アクセスを許可することをオプトインしない場合 ({{httpheader("Access-Control-Allow-Origin")}} レスポンスヘッダーが一切送信されていないか、送信された {{httpheader("Access-Control-Allow-Origin")}} レスポンスヘッダーにサイトのオリジンが含まれていない場合)、ブラウザーは画像が汚染されていると判断し、画像データへのアクセスを制限し、 {{HTMLElement("canvas")}} 要素での使用を禁止します。
許可されている値:
anonymous
use-credentials
Authorization
リクエストヘッダー) が含まれた状態で送信されます。サーバーが元のサイトとの資格情報の共有を選択する (Access-Control-Allow-Credentials: true
レスポンスヘッダーを送り返す) ことをしなかった場合、ブラウザーは画像を汚染されたものとしてマークし、その画像データへのアクセスを制限します。この属性がの値が無効である場合は、列挙型のキーワードに anonymous
が指定されたものとして扱われます。詳しくは CORS 設定属性を参照してください。
ブラウザーに画像のデコードのヒントを提供します。次のような値が使用できます。
sync
async
auto
naturalWidth
/naturalHeight
はこの属性で指定された値が返されます。説明と例注: この属性は <img>
要素が、有効な {{htmlattrxref("href","a")}} 属性を持つ {{htmlelement("a")}} 要素の子孫である場合に限り許可されます。
eager
: 画像が現在可視ビューポートに入っているかどうかにかかわらず、直ちに画像を読み込みます (これが既定値です)。lazy
: 画像がブラウザーで定義されたビューポートからの距離に達するまで、画像の読み込みを遅延させます。これは、画像が必要とされるのが合理的に確実になるまで、処理に必要なネットワークやストレージの帯域幅を使用しないようにするためです。これは一般的に、ほとんどの典型的な使用法において、コンテンツの性能を向上させることができます。
no-referrer
: {{httpheader("Referer")}} ヘッダーを送信しないことを表します。no-referrer-when-downgrade
: {{glossary("TLS")}} ({{glossary("HTTPS")}}) を使用せずにあるオリジンへ移動する場合は、 Referer
ヘッダーを送信しないことを表します。これは他にポリシーが定められていない場合の、{{glossary("user agent", "ユーザーエージェント")}}の既定の動作です。origin
: Referer
ヘッダーにそのページのオリジンのスキーム、{{glossary("host", "ホスト名")}}、{{glossary("port", "ポート番号")}}を含めます。origin-when-cross-origin
: 異なるオリジンへのナビゲーションでは、リファラーをスキーム、ホスト、ポートのみに制限します。同一のオリジンへのナビゲーションでは、リファラーのフルパスを含めます。unsafe-url
: Referer
ヘッダーにオリジンとパスを含めることを表します (ただし、フラグメント、パスワード、ユーザー名は含めません)。これはオリジンやパスの情報が TLS で保護されたリソースからセキュアでないオリジンへ漏えいしますので、安全ではありません。メディアの状態はビューポートのプロパティで記述するものであり、画像のプロパティではありません。例えば、 (max-height: 500px) 1000px
は、ビューポートの高さが 500px 以下であれば 1000px 幅のソースを使用することを提案します。
ソースサイズ値は、画像の表示サイズを指定するものです。{{glossary("User agent", "ユーザーエージェント")}}は srcset
属性で与えられたソースからひとつを選択するために、現在のソースサイズを使用します。そのとき、ソースは幅記述子 ('w
') を使用して説明します。選択したソースサイズは画像の{{glossary("intrinsic size", "固有の寸法")}} ({{glossary("CSS")}} スタイルが適用されていない場合の、画像の表示サイズ) に影響します。srcset
属性がない場合、あるいは幅記述子 (w
) を持つ値がない場合は、sizes
属性の効果はありません。
<img>
要素に必須です。 srcset
に対応する{{glossary("Browser", "ブラウザー")}}では src
を、画素密度記述子 1x
の候補画像であるように扱います。ただし、この画素密度記述子が srcset
で定義済みである、または srcset
に 'w
' 記述子が含まれている場合を除きます。w
' を付加した正の整数です。幅記述子は実際の画素密度を計算するために、sizes
属性で与えられたソースサイズで割られます。x
' を付加した正の浮動小数点数です。記述子を指定しない場合は、ソースを既定の記述子 1x
に割り当てます。
幅記述子と画素密度記述子を同一の srcset
属性に混在させると無効になります。重複した記述子 (例えばひとつの srcset
に2つのソースがあり、どちらも '2x
' とする) も無効になります。
ユーザーエージェントには、利用可能なソースからひとつを選択する裁量があります。これは、ユーザー設定や{{glossary("bandwidth", "帯域幅")}}の条件などに基づいて選択を適合させるような、かなりの裁量が与えられています。例としてはレスポンシブ画像のチュートリアルをご覧ください。
#
' で始まる) です。
注: <img>
要素が {{htmlelement("a")}} または {{HTMLElement("button")}} 要素の子孫である場合は、この属性を使用することはできません。
top
vertical-align: top;
または vertical-align: text-top;
と等価です。middle
vertical-align: -moz-middle-with-baseline;
と等価です。bottom
vertical-align: unset;
または vertical-align: initial;
と等価です。left
float: left;
と等価です。right
float: right;
と等価です。この属性は、最新の {{glossary("W3C")}} のバージョンである HTML 5.2 でも言及されていますが、一方、 {{glossary("WHATWG")}} の HTML Living Standard では完全に削除されています。将来が不確実なので、代わりに、 aria-describedby
または aria-details
のような {{glossary("WAI")}}-{{glossary("ARIA")}} の代替手段を検討してください。
<img>
は置換要素です。 {{cssxref("display")}} の値が既定で inline
ですが、既定の寸法は埋め込まれた画像の内部的な値で定義されます。画像には {{cssxref("border")}}/{{cssxref("border-radius")}}, {{cssxref("padding")}}/{{cssxref("margin")}}, {{cssxref("width")}}, {{cssxref("height")}}, などのプロパティを設定することができます。
<img>
にはベースラインがありません。つまり {{cssxref("vertical-align")}}: baseline
を伴うインライン整形文脈内で使用したときに、画像の下端はコンテナーのベースラインに揃えられます。
{{cssxref("object-position")}} プロパティを使用して、要素ボックス内の画像の位置を指定したり、 {{cssxref("object-fit")}} プロパティを使用して、ボックス内の画像の寸法を調整したり(例えば、クリッピングが必要な時に画像をボックスに合わせるか埋めるか)することができます。
画像の種類に応じて、固有の寸法を持つことができます。ただし、固有の寸法が必須ではない画像形式があります。例えば {{glossary("SVG")}} 画像は、固有の寸法を持ちません。つまり、 SVG 画像には {{SVGElement("svg")}} 要素に width
または height
が設定されていない限り、固有の寸法はありません。
以下の簡単な例では、ページに画像を埋め込み、アクセシビリティを向上させるために代替テキストを含めています。
<img src="https://developer.mozilla.org/static/img/favicon144.png" alt="MDN ロゴ — MDN のテキストが入った恐竜のロゴ">
{{ EmbedLiveSample('Alternative_text', '100%', '160') }}
この例は前回のを土台に、画像をリンクにする方法を示しています。これを行うのはとても単純です。 — <img>
タグを {{HTMLElement("a")}} の中に組み込むだけです。一つの考慮事項として、リンクが指すリソースを説明する代替テキストを作成するようにしてください。
<a href="https://developer.mozilla.org"> <img src="https://developer.mozilla.org/static/img/favicon144.png" alt="MDN サイトにおいでください"> </a>
{{ EmbedLiveSample('Image_link', '100%', '160') }}
この例では、 srcset
属性によって高解像度版のロゴの参照を指定しています。これで、高解像度の端末では src
画像の代わりにこちらが読み込まれます。 src
で参照される画像は、 srcset
に対応している{{glossary("User agent", "ユーザーエージェント")}}では、 1x
の候補としてカウントされます。
<img src="https://developer.mozilla.org/static/img/favicon72.png" alt="MDN logo" srcset="https://developer.mozilla.org/static/img/favicon144.png 2x">
{{EmbedLiveSample("Using_the_srcset_attribute", "100%", "160")}}
src
属性は、 srcset
に対応している{{glossary("User agent", "ユーザーエージェント")}}で 'w
' 記述子を使用している場合は無視されます。 (max-width: 600px)
のメディア条件に一致すると、 200px の幅の画像 (200px にもっと近いもの) が読み込まれ、そうでなければ他の画像が読み込まれます。
<img src="/files/16796/clock-demo-200px.png" alt="時計" srcset="/files/16864/clock-demo-200px.png 200w, /files/16797/clock-demo-400px.png 400w" sizes="(max-width: 600px) 200px, 50vw">
{{EmbedLiveSample("Using_the_srcset_and_sizes_attributes", "100%", 350)}}
その場で大きさを変更してみるには、この例を別なページで表示させる必要があり、そうすればコンテンツエリアの大きさを実際に使用することができます。
<img>
要素の多くは無害な使用ですが、ユーザーのセキュリティとプライバシーに望ましくない結果をもたらす可能性もあります。詳細情報と緩和策については Referer ヘッダー: プライバシーとセキュリティの考慮事項を参照してください。
alt
属性の値は明確で簡潔に画像の内容を説明するものにしてください。画像そのもの存在を説明するものであったり、画像のファイル名であったりするべきではありません。画像が言葉で説明できるものではなく、 alt
属性を意図的に省略する場合は、画像が伝えようとしていることの内容を他の方法で表すように考慮してください。
<img alt="image" src="penguin.jpg">
<img alt="海岸に立っているイワトビペンギン" src="penguin.jpg">
alt
属性が画像にない場合、読み上げソフトによっては代わりに画像のファイル名を読み上げることがあります。ファイル名が画像の内容を表していない場合、これが操作を混乱させる可能性があります。
The {{htmlattrxref("title")}} 属性を alt
属性の代わりに利用することはできません。加えて、 alt
属性の値を同じ画像の title
属性に複製して宣言することは避けてください。このようにすると、読み上げソフトが説明を二回読み上げ、操作を混乱させる可能性があります。
title
属性は、画像の alt
の説明と組み合わせた補助的な説明として使用するべきでもありません。画像にキャプションが必要であれば、 figure
および figcaption
要素と組み合わせて使用してください。
title
属性の値は、よくツールチップとして、画像の上でカーソルを停止させた後で間もなく表示されます。これはユーザーに追加の情報を提供することができますが、ユーザーが必ず見ると仮定してはいけません。ユーザーが見ることが特に重要または有益である情報があるのであれば、上記の title
を使用するのではなく、何らかの方法で行内に表示するべきです。
alt
属性が空ではない場合:
alt
属性が空の場合、 {{ARIARole("none")}} または {{ARIARole("presentation")}}alt
属性がない場合、許可されている role
なしコンテンツカテゴリ | フローコンテンツ、記述コンテンツ、埋め込みコンテンツ、知覚可能コンテンツ。要素が usemap 属性を持つ場合は、対話型コンテンツのカテゴリの一角にもなります。 |
---|---|
許可されている内容 | なし。これは{{Glossary("empty element", "空要素")}}です。 |
タグの省略 | 開始タグは必須。終了タグを記述してはならない。 |
許可されている親要素 | 埋め込みコンテンツを受け入れるすべての要素。 |
暗黙の ARIA ロール | |
許可されている ARIA ロール | すべて |
DOM インターフェイス | {{domxref("HTMLImageElement")}} |
仕様書 | 状態 | 備考 |
---|---|---|
{{SpecName('Referrer Policy', '#referrer-policy-delivery-referrer-attribute', 'referrer attribute')}} | {{Spec2('Referrer Policy')}} | referrerpolicy 属性を追加。 |
{{SpecName('HTML WHATWG', 'embedded-content.html#the-img-element', '<img>')}} | {{Spec2('HTML WHATWG')}} | |
{{SpecName('HTML5 W3C', 'semantics-embedded-content.html#the-img-element', '<img>')}} | {{Spec2('HTML5 W3C')}} | |
{{SpecName('HTML4.01', 'struct/objects.html#h-13.2', '<img>')}} | {{Spec2('HTML4.01')}} |
{{Compat("html.elements.img")}}