<Image>
このAPIリファレンスは、Imageコンポーネントで利用可能なpropsと設定オプションの使い方を理解するのに役立ちます。機能と使用方法については、Imageコンポーネントのページを参照してください。
Props
以下はImageコンポーネントで利用可能なpropsの概要です:
Prop | 例 | 型 | ステータス |
---|---|---|---|
src | src="/profile.png" | String | 必須 |
width | width={500} | Integer (px) | 必須 |
height | height={500} | Integer (px) | 必須 |
alt | alt="著者の写真" | String | 必須 |
loader | loader={imageLoader} | Function | - |
fill | fill={true} | Boolean | - |
sizes | sizes="(max-width: 768px) 100vw, 33vw" | String | - |
quality | quality={80} | Integer (1-100) | - |
priority | priority={true} | Boolean | - |
placeholder | placeholder="blur" | String | - |
style | style={{objectFit: "contain"}} | Object | - |
onLoadingComplete | onLoadingComplete={img => done())} | Function | 非推奨 |
onLoad | onLoad={event => done())} | Function | - |
onError | onError(event => fail()} | Function | - |
loading | loading="lazy" | String | - |
blurDataURL | blurDataURL="data:image/jpeg..." | String | - |
overrideSrc | overrideSrc="/seo.png" | String | - |
必須のProps
Imageコンポーネントには以下のプロパティが必須です: src
、alt
、width
、height
(またはfill
)。
src
以下のいずれかである必要があります:
デフォルトのloaderを使用する場合は、ソース画像について以下の点も考慮してください:
- srcが外部URLの場合は、remotePatternsも設定する必要があります
- srcがアニメーションの場合、または既知のフォーマット(JPEG、PNG、WebP、AVIF、GIF、TIFF)でない場合、画像は最適化されずにそのまま提供されます
- srcがSVGフォーマットの場合、
unoptimized
またはdangerouslyAllowSVG
が有効化されていない限りブロックされます
width
width
プロパティは、画像の本来の幅をピクセル単位で表します。このプロパティは、画像の正しいアスペクト比を推測し、読み込み中のレイアウトのシフトを防ぐために使用されます。HTMLの<img>
タグのwidth
属性と同様に、レンダリングされる画像のサイズはCSSによって制御され、このプロパティでは決定されません。
静的にインポートされた画像またはfill
プロパティを持つ画像を除き、必須です。
height
height
プロパティは、画像の本来の高さをピクセル単位で表します。このプロパティは、画像の正しいアスペクト比を推測し、読み込み中のレイアウトのシフトを防ぐために使用されます。HTMLの<img>
タグのheight
属性と同様に、レンダリングされる画像のサイズはCSSによって制御され、このプロパティでは決定されません。
静的にインポートされた画像またはfill
プロパティを持つ画像を除き、必須です。
補足:
width
とheight
の両プロパティを組み合わせることで、ブラウザが画像を読み込む前にスペースを確保するために使用する画像のアスペクト比が決定されます。- 本来のサイズは、必ずしもブラウザでレンダリングされるサイズを意味するわけではありません。レンダリングサイズは親コンテナによって決定されます。例えば、親コンテナが本来のサイズよりも小さい場合、画像はコンテナに合わせて縮小されます。
- 幅と高さが不明な場合は、
fill
プロパティを使用できます。
alt
alt
プロパティは、スクリーンリーダーと検索エンジンのために画像を説明するために使用されます。また、画像が無効化されている場合や画像の読み込み中にエラーが発生した場合のフォールバックテキストとしても使用されます。
ページの意味を変えることなく画像を置き換えることができるテキストを含める必要があります。画像を補完することは意図されておらず、画像の上下のキャプションですでに提供されている情報を繰り返すべきではありません。
画像が純粋に装飾的であるか、ユーザー向けではない場合、alt
プロパティは空の文字列(alt=""
)にする必要があります。
オプションのProps
<Image />
コンポーネントは、必須のプロパティ以外にも多くの追加プロパティを受け入れます。このセクションでは、Imageコンポーネントの最も一般的に使用されるプロパティについて説明します。より一般的でないプロパティについては、高度なPropsセクションで詳細を確認してください。
loader
画像URLを解決するためのカスタム関数です。
loader
は以下のパラメータを受け取り、画像のURL文字列を返す関数です:
以下はカスタムローダーを使用する例です:
補足:
loader
のような関数を受け入れるpropsを使用する場合は、提供される関数をシリアライズするためにクライアントコンポーネントを使用する必要があります。
あるいは、next.config.js
のloaderFile設定を使用して、propを渡すことなくアプリケーション内のすべてのnext/image
インスタンスを設定することもできます。
fill
画像を親要素に合わせて表示するブール値で、width
とheight
が不明な場合に便利です。
親要素にはposition: "relative"
、position: "fixed"
、またはposition: "absolute"
スタイルを割り当てる必要があります。
デフォルトでは、img要素に自動的にposition: "absolute"
スタイルが割り当てられます。
画像にスタイルが適用されていない場合、画像はコンテナに合わせて拡大されます。コンテナに合わせてレターボックス化され、アスペクト比を維持する場合は、object-fit: "contain"
を設定することをお勧めします。
あるいは、object-fit: "cover"
を使用すると、画像はコンテナ全体を埋め、アスペクト比を維持するためにトリミングされます。
詳細については、以下も参照してください:
sizes
メディアクエリに似た文字列で、異なるブレークポイントでの画像の幅に関する情報を提供します。fill
を使用する画像やレスポンシブサイズにスタイリングされた画像のパフォーマンスに大きく影響します。
sizes
プロパティは、画像のパフォーマンスに関連する2つの重要な目的を果たします:
- 第一に、
sizes
の値は、ブラウザがnext/image
が自動生成するsrcset
からどのサイズの画像をダウンロードするかを決定するために使用されます。ブラウザが選択する際、まだページ上の画像のサイズを知らないため、ビューポートと同じサイズまたはそれより大きい画像を選択します。sizes
プロパティを使用すると、画像が実際には全画面よりも小さくなることをブラウザに伝えることができます。fill
プロパティを持つ画像でsizes
値を指定しない場合、デフォルト値として100vw
(全画面幅)が使用されます。 - 第二に、
sizes
プロパティは自動生成されるsrcset
値の動作を変更します。sizes
値が存在しない場合、固定サイズの画像(1x/2x/など)に適した小さなsrcset
が生成されます。sizes
が定義されている場合、レスポンシブ画像(640w/750w/など)に適した大きなsrcset
が生成されます。sizes
プロパティにビューポート幅のパーセンテージを表す50vw
などのサイズが含まれている場合、必要とされることのない小さすぎる値を含まないようにsrcset
がトリミングされます。
例えば、スタイリングによって画像がモバイルデバイスで全幅、タブレットで2列レイアウト、デスクトップディスプレイで3列レイアウトになることがわかっている場合、以下のようなsizes
プロパティを含める必要があります:
このsizes
の例は、パフォーマンス指標に劇的な影響を与える可能性があります。33vw
のsizesがない場合、サーバーから選択される画像は必要な幅の3倍になってしまいます。ファイルサイズは幅の2乗に比例するため、sizes
がない場合、ユーザーは必要以上に9倍大きい画像をダウンロードすることになります。
srcset
とsizes
について詳しく学ぶ:
quality
最適化された画像の品質を、1から100の整数で指定します。100が最高品質で、したがって最大のファイルサイズとなります。デフォルトは75です。
priority
trueの場合、画像は高優先度とみなされ、プリロードされます。priority
を使用する画像については、遅延読み込みは自動的に無効化されます。loading
プロパティも使用されており、lazy
に設定されている場合、priority
プロパティは使用できません。loading
プロパティは高度なユースケース用です。priority
が必要な場合はloading
を削除してください。
Largest Contentful Paint (LCP)要素として検出された画像には、priority
プロパティを使用する必要があります。異なるビューポートサイズで異なる画像がLCP要素となる可能性があるため、複数の優先画像を持つことが適切な場合があります。
フォールド上に表示される画像にのみ使用してください。デフォルトはfalseです。
placeholder
画像の読み込み中に使用するプレースホルダーです。blur
、empty
、またはdata:image/...
のいずれかを指定できます。デフォルトはempty
です。
blur
の場合、blurDataURL
プロパティがプレースホルダーとして使用されます。src
が静的インポートからのオブジェクトで、インポートされた画像が.jpg
、.png
、.webp
、または.avif
の場合、画像がアニメーション化されているとして検出された場合を除き、blurDataURL
は自動的に設定されます。
動的な画像の場合は、blurDataURL
プロパティを提供する必要があります。Plaiceholderのようなソリューションはbase64
の生成に役立ちます。
data:image/...
の場合、画像の読み込み中にData URLがプレースホルダーとして使用されます。
empty
の場合、画像の読み込み中にプレースホルダーはなく、空のスペースのみが表示されます。
試してみる:
高度なProps
場合によっては、より高度な使用方法が必要になることがあります。<Image />
コンポーネントは、以下の高度なプロパティをオプションで受け入れます。
style
基礎となる画像要素にCSSスタイルを渡すことができます。
必須の幅と高さのpropsは、スタイリングと相互作用する可能性があることに注意してください。スタイリングを使用して画像の幅を変更する場合は、本来のアスペクト比を維持するために高さもauto
にスタイリングする必要があります。そうしないと、画像が歪んでしまいます。
onLoadingComplete
警告: Next.js 14以降では
onLoad
に置き換えられ、非推奨となりました。
画像が完全に読み込まれ、placeholderが削除された時に呼び出されるコールバック関数です。
コールバック関数は、基礎となる<img>
要素への参照を1つの引数として受け取ります。
補足: 関数を受け入れる
onLoadingComplete
のようなpropsを使用する場合は、提供される関数をシリアライズするためにクライアントコンポーネントを使用する必要があります。
onLoad
画像が完全に読み込まれ、placeholderが削除された時に呼び出されるコールバック関数です。
コールバック関数は、基礎となる<img>
要素への参照を含むtarget
を持つEventを1つの引数として受け取ります。
補足: 関数を受け入れる
onLoad
のようなpropsを使用する場合は、提供される関数をシリアライズするためにクライアントコンポーネントを使用する必要があります。
onError
画像の読み込みに失敗した場合に呼び出されるコールバック関数です。
補足: 関数を受け入れる
onError
のようなpropsを使用する場合は、提供される関数をシリアライズするためにクライアントコンポーネントを使用する必要があります。
loading
画像の読み込み動作です。デフォルトはlazy
です。
lazy
の場合、ビューポートからの計算された距離に達するまで画像の読み込みを遅延させます。
eager
の場合、画像を直ちに読み込みます。
loading
属性について詳しく学ぶ。
blurDataURL
Data URLで、src
画像が正常に読み込まれるまでのプレースホルダー画像として使用されます。placeholder="blur"
と組み合わせた場合にのみ有効です。
base64エンコードされた画像である必要があります。拡大されぼかされるため、非常に小さな画像(10px以下)を推奨します。より大きな画像をプレースホルダーとして含めると、アプリケーションのパフォーマンスに悪影響を与える可能性があります。
試してみる:
また、単色のData URLを生成することで、画像に合わせることもできます。
unoptimized
trueの場合、ソース画像は品質、サイズ、フォーマットを変更せずにそのまま提供されます。デフォルトはfalseです。
Next.js 12.3.0以降、このpropはnext.config.js
に以下の設定を追加することで、すべての画像に割り当てることができます:
overrideSrc
<Image>
コンポーネントにsrc
propを提供する場合、結果として生成される<img>
のsrcset
とsrc
属性は自動的に生成されます。
場合によっては、src
属性を自動生成させたくない場合があり、overrideSrc
propを使用して上書きすることができます。
例えば、既存のウェブサイトを<img>
から<Image>
にアップグレードする際に、画像ランキングや再クロールを避けるためなど、SEO目的で同じsrc
属性を維持したい場合があります。
decoding
画像のデコードを待ってから他のコンテンツの更新を表示するかどうかをブラウザに示すヒントです。デフォルトはasync
です。
指定可能な値は以下の通りです:
async
- 他のコンテンツが画像のデコードが完了する前にレンダリングされることを許可し、非同期的に画像をデコードします。sync
- 他のコンテンツと同時に表示するため、同期的に画像をデコードします。auto
- デコードモードの設定をブラウザに任せ、特に選好しません。
decoding
属性について詳しく学ぶ。
その他のProps
以下を除き、<Image />
コンポーネントの他のプロパティは基礎となるimg
要素に渡されます:
srcSet
。代わりにDevice Sizesを使用してください。
設定オプション
propsに加えて、next.config.js
でImageコンポーネントを設定することができます。以下のオプションが利用可能です:
localPatterns
next.config.js
ファイルでlocalPatterns
を設定して、特定のパスの最適化を許可し、他のすべてのパスをブロックすることができます。
補足: 上記の例では、
next/image
のsrc
プロパティが/assets/images/
で始まり、クエリ文字列を持たない必要があることを保証します。それ以外のパスを最適化しようとすると、400 Bad Requestで応答します。
remotePatterns
アプリケーションを悪意のあるユーザーから保護するために、外部画像を使用する場合は設定が必要です。これにより、Next.js Image Optimization APIから提供できる外部画像がアカウントからのものに限定されます。これらの外部画像は、以下のようにnext.config.js
ファイルのremotePatterns
プロパティで設定できます:
補足: 上記の例では、
next/image
のsrc
プロパティがhttps://example.com/account123/
で始まり、クエリ文字列を持たない必要があることを保証します。他のプロトコル、ホスト名、ポート、またはマッチしないパスは400 Bad Requestで応答します。
以下は、next.config.js
ファイルのremotePatterns
プロパティでhostname
にワイルドカードパターンを使用する例です:
補足: 上記の例では、
next/image
のsrc
プロパティがhttps://img1.example.com
やhttps://me.avatar.example.com
など、任意の数のサブドメインで始まる必要があります。ポートやクエリ文字列は持てません。他のプロトコルやマッチしないホスト名は400 Bad Requestで応答します。
ワイルドカードパターンはpathname
とhostname
の両方で使用でき、以下の構文を持ちます:
*
単一のパスセグメントまたはサブドメインにマッチします**
末尾の任意の数のパスセグメントまたは先頭のサブドメインにマッチします
**
構文はパターンの途中では機能しません。
補足:
protocol
、port
、pathname
、またはsearch
を省略した場合、ワイルドカード**
が暗黙的に指定されます。これは、意図しないURLの最適化を許可する可能性があるため推奨されません。
以下は、next.config.js
ファイルのremotePatterns
プロパティでsearch
を使用する例です:
補足: 上記の例では、
next/image
のsrc
プロパティがhttps://assets.example.com
で始まり、正確なクエリ文字列?v=1727111025337
を持つ必要があることを保証します。他のプロトコルやクエリ文字列は400 Bad Requestで応答します。
domains
警告: アプリケーションを悪意のあるユーザーから保護するため、Next.js 14以降では厳格な
remotePatterns
に置き換えられ、非推奨となりました。domains
はドメインのコンテンツがすべて自分のものである場合にのみ使用してください。
remotePatterns
と同様に、domains
設定は外部画像の許可されたホスト名のリストを提供するために使用できます。
ただし、domains
設定はワイルドカードパターンのマッチングをサポートせず、プロトコル、ポート、パス名を制限することもできません。
以下はnext.config.js
ファイルでのdomains
プロパティの例です:
loaderFile
Next.jsの組み込みImage Optimization APIの代わりにクラウドプロバイダーを使用して画像を最適化する場合、以下のようにnext.config.js
でloaderFile
を設定できます:
これはNext.jsアプリケーションのルートからの相対パスを指定する必要があります。ファイルは文字列を返すデフォルト関数をエクスポートする必要があります。例:
あるいは、loader
propを使用してnext/image
の各インスタンスを設定することもできます。
例:
補足: 関数を受け入れるカスタムイメージローダーファイルを使用する場合は、提供される関数をシリアライズするためにクライアントコンポーネントを使用する必要があります。
高度な設定
以下の設定は高度なユースケース用であり、通常は必要ありません。以下のプロパティを設定することを選択した場合、将来のアップデートでのNext.jsのデフォルトへの変更を上書きすることになります。
deviceSizes
ユーザーの予想されるデバイス幅がわかっている場合、next.config.js
のdeviceSizes
プロパティを使用してデバイス幅のブレークポイントのリストを指定できます。これらの幅はnext/image
コンポーネントがsizes
propを使用する際、ユーザーのデバイスに適した画像が提供されることを保証するために使用されます。
設定が提供されない場合、以下のデフォルトが使用されます。
imageSizes
next.config.js
ファイルのimages.imageSizes
プロパティを使用して、画像の幅のリストを指定できます。これらの幅はデバイスサイズの配列と連結され、画像のsrcsetを生成するために使用される完全なサイズ配列を形成します。
2つの別々のリストがある理由は、imageSizesがsizes
プロパティを提供する画像にのみ使用され、これは画像が画面の全幅よりも小さいことを示すためです。したがって、imageSizesのサイズはすべてdeviceSizesの最小サイズよりも小さくする必要があります。
設定が提供されない場合、以下のデフォルトが使用されます。
formats
デフォルトの画像最適化APIは、リクエストのAccept
ヘッダーを通じてブラウザがサポートする画像フォーマットを自動的に検出し、最適な出力フォーマットを決定します。
Accept
ヘッダーが設定された形式の複数にマッチする場合、配列の最初のマッチが使用されます。したがって、配列の順序は重要です。マッチがない場合(または元の画像がアニメーションの場合)、画像最適化APIは元の画像のフォーマットにフォールバックします。
設定が提供されない場合、以下のデフォルトが使用されます。
以下の設定で、AVIFサポートを有効にしつつWebPにフォールバックすることができます。
補足:
- AVIFは一般的にエンコードに50%長い時間がかかりますが、WebPと比較して20%小さく圧縮されます。つまり、画像が最初にリクエストされる際は通常遅くなり、その後のキャッシュされたリクエストは高速になります。
- Next.jsの前にプロキシ/CDNを使用してセルフホストする場合、プロキシが
Accept
ヘッダーを転送するように設定する必要があります。
キャッシュの動作
以下はデフォルトのloaderのキャッシュアルゴリズムについて説明します。他のすべてのローダーについては、クラウドプロバイダーのドキュメントを参照してください。
画像はリクエストに応じて動的に最適化され、<distDir>/cache/images
ディレクトリに保存されます。最適化された画像ファイルは、有効期限に達するまで、その後のリクエストに提供されます。キャッシュされているが期限切れのファイルにマッチするリクエストがあった場合、期限切れの画像はすぐに古い状態で提供されます。その後、画像はバックグラウンドで再度最適化され(再検証とも呼ばれます)、新しい有効期限日でキャッシュに保存されます。
画像のキャッシュ状態は、x-nextjs-cache
レスポンスヘッダーの値を読み取ることで判断できます。可能な値は以下の通りです:
MISS
- パスがキャッシュにない(最初の訪問時に最大1回発生)STALE
- パスはキャッシュにあるが再検証時間を超過したため、バックグラウンドで更新されるHIT
- パスはキャッシュにあり、再検証時間を超過していない
有効期限(あるいは最大期間)は、minimumCacheTTL
設定または上流の画像のCache-Control
ヘッダーのいずれか大きい方によって定義されます。具体的には、Cache-Control
ヘッダーのmax-age
値が使用されます。s-maxage
とmax-age
の両方が見つかった場合、s-maxage
が優先されます。max-age
はCDNやブラウザを含む下流のクライアントにも引き継がれます。
- 上流の画像に
Cache-Control
ヘッダーが含まれていない場合や値が非常に低い場合、minimumCacheTTL
を設定してキャッシュ期間を延長できます。 deviceSizes
とimageSizes
を設定して、生成される可能性のある画像の総数を減らすことができます。- formatsを設定して、複数のフォーマットを無効にし、単一の画像フォーマットを優先することができます。
minimumCacheTTL
最適化された画像のキャッシュ有効期間(Time to Live、TTL)を秒単位で設定できます。多くの場合、ファイルの内容を自動的にハッシュ化し、Cache-Control
ヘッダーがimmutable
の画像を永続的にキャッシュする静的画像インポートを使用する方が良いでしょう。
最適化された画像の有効期限(あるいは最大期間)は、minimumCacheTTL
または上流の画像のCache-Control
ヘッダーのいずれか大きい方によって定義されます。
画像ごとにキャッシュの動作を変更する必要がある場合、headers
を設定して上流の画像(/_next/image
自体ではなく、例えば/some-asset.jpg
)にCache-Control
ヘッダーを設定できます。
現時点ではキャッシュを無効化するメカニズムがないため、minimumCacheTTL
を低く保つのがベストです。そうでない場合、手動でsrc
propを変更するか、<distDir>/cache/images
を削除する必要があるかもしれません。
disableStaticImages
デフォルトの動作では、import icon from './icon.png'
のような静的ファイルのインポートを許可し、それをsrc
プロパティに渡すことができます。
場合によっては、他のプラグインがインポートが異なる動作をすることを期待している場合、この機能を無効にすることができます。
next.config.js
内で静的画像のインポートを無効にできます:
dangerouslyAllowSVG
デフォルトのloaderはいくつかの理由でSVG画像を最適化しません。第一に、SVGはベクター形式であり、ロスレスでリサイズできます。第二に、SVGはHTML/CSSと同様の機能を多く持っており、適切なコンテンツセキュリティポリシー(CSP)ヘッダーがない場合、脆弱性につながる可能性があります。
したがって、src
プロパティがSVGであることがわかっている場合は、unoptimized
プロパティを使用することを推奨します。これはsrc
が".svg"
で終わる場合、自動的に行われます。
しかし、デフォルトの画像最適化APIでSVG画像を提供する必要がある場合は、next.config.js
でdangerouslyAllowSVG
を設定できます:
加えて、ブラウザに画像をダウンロードさせるためのcontentDispositionType
の設定と、画像に埋め込まれたスクリプトの実行を防ぐためのcontentSecurityPolicy
の設定を強く推奨します。
contentDispositionType
デフォルトのloaderは、APIが任意のリモート画像を提供できるため、保護のためにContent-Disposition
ヘッダーをattachment
に設定します。
デフォルト値はattachment
で、直接訪問時にブラウザに画像をダウンロードさせます。これは特にdangerouslyAllowSVG
が真の場合に重要です。
オプションでinline
を設定して、直接訪問時にブラウザが画像をダウンロードせずにレンダリングすることを許可できます。
アニメーション画像
デフォルトのloaderは、アニメーション画像を自動的に検出し、画像最適化をバイパスしてそのまま画像を提供します。
アニメーションファイルの自動検出はベストエフォートで、GIF、APNG、WebPをサポートしています。特定のアニメーション画像で画像最適化を明示的にバイパスしたい場合は、unoptimizedプロパティを使用してください。
レスポンシブ画像
デフォルトで生成されるsrcset
は、異なるデバイスのピクセル比をサポートするために1x
と2x
の画像を含みます。ただし、ビューポートに合わせて伸縮するレスポンシブ画像をレンダリングしたい場合があります。その場合、sizes
とともにstyle
(またはclassName
)を設定する必要があります。
以下のいずれかの方法を使用してレスポンシブ画像をレンダリングできます。
静的インポートを使用したレスポンシブ画像
ソース画像が動的でない場合、静的インポートを使用してレスポンシブ画像を作成できます:
試してみる:
アスペクト比を持つレスポンシブ画像
ソース画像が動的またはリモートURLの場合、レスポンシブ画像の正しいアスペクト比を設定するためにwidth
とheight
も提供する必要があります:
試してみる:
fill
を使用したレスポンシブ画像
アスペクト比がわからない場合は、fill
プロパティを設定し、親要素にposition: relative
を設定する必要があります。必要に応じて、希望の伸縮対トリミングの動作に応じてobject-fit
スタイルを設定できます:
試してみる:
テーマ検出CSS
ライトモードとダークモードで異なる画像を表示したい場合、CSSメディアクエリに基づいて正しい画像を表示する2つの<Image>
コンポーネントをラップする新しいコンポーネントを作成できます。
補足: デフォルトの
loading="lazy"
の動作により、正しい画像のみが読み込まれることが保証されます。両方の画像が読み込まれてしまうため、priority
やloading="eager"
は使用できません。代わりにfetchPriority="high"
を使用できます。
試してみる:
getImageProps
より高度なユースケースでは、getImageProps()
を呼び出して基礎となる<img>
要素に渡されるpropsを取得し、それらを別のコンポーネント、スタイル、canvas等に渡すことができます。
これにより、React useState()
の呼び出しを避けることができるため、より良いパフォーマンスにつながりますが、プレースホルダーが削除されることがないためplaceholder
プロパティとは使用できません。
テーマ検出Picture
ライトモードとダークモードで異なる画像を表示したい場合、<picture>
要素を使用してユーザーの優先カラースキームに基づいて異なる画像を表示できます。
アートディレクション
モバイルとデスクトップで異なる画像を表示したい場合(アートディレクションとも呼ばれます)、異なるsrc
、width
、height
、quality
プロパティをgetImageProps()
に提供できます。
バックグラウンドCSS
srcSet
文字列をimage-set()
CSS関数に変換して、バックグラウンド画像を最適化することもできます。
既知のブラウザのバグ
このnext/image
コンポーネントはブラウザネイティブの遅延読み込みを使用します。これはSafari 15.4より前の古いブラウザでは即時読み込みにフォールバックする可能性があります。ブラー効果のプレースホルダーを使用する場合、Safari 12より前の古いブラウザでは空のプレースホルダーにフォールバックします。width
/height
をauto
に設定したスタイルを使用する場合、アスペクト比を保持しないSafari 15より前の古いブラウザでレイアウトシフトを引き起こす可能性があります。詳細については、このMDNビデオを参照してください。
- Safari 15 - 16.3は読み込み中にグレーの境界線を表示します。Safari 16.4はこの問題を修正しました。可能な解決策:
- CSS
@supports (font: -apple-system-body) and (-webkit-appearance: none) { img[loading="lazy"] { clip-path: inset(0.6px) } }
を使用する - 画像がフォールド上にある場合は
priority
を使用する
- CSS
- Firefox 67+は読み込み中に白い背景を表示します。可能な解決策:
- AVIF
formats
を有効にする placeholder
を使用する
- AVIF
バージョン履歴
バージョン | 変更内容 |
---|---|
v15.0.0 | decoding propが追加されました。contentDispositionType のデフォルト設定がattachment に変更されました。 |
v14.2.0 | overrideSrc propが追加されました。 |
v14.1.0 | getImageProps() が安定化されました。 |
v14.0.0 | onLoadingComplete propとdomains 設定が非推奨になりました。 |
v13.4.14 | placeholder propがdata:/image... をサポートするようになりました |
v13.2.0 | contentDispositionType 設定が追加されました。 |
v13.0.6 | ref propが追加されました。 |
v13.0.0 | next/image のインポートがnext/legacy/image に名前が変更されました。next/future/image のインポートがnext/image に名前が変更されました。インポートを安全に自動的に名前変更するコードモッドが利用可能です。<span> ラッパーが削除されました。layout 、objectFit 、objectPosition 、lazyBoundary 、lazyRoot プロパティが削除されました。alt が必須になりました。onLoadingComplete がimg 要素への参照を受け取ります。組み込みのloader設定が削除されました。 |
v12.3.0 | remotePatterns とunoptimized 設定が安定化されました。 |
v12.2.0 | 実験的なremotePatterns と実験的なunoptimized 設定が追加されました。layout="raw" が削除されました。 |
v12.1.1 | style propが追加されました。layout="raw" の実験的サポートが追加されました。 |
v12.1.0 | dangerouslyAllowSVG とcontentSecurityPolicy 設定が追加されました。 |
v12.0.9 | lazyRoot propが追加されました。 |
v12.0.0 | formats 設定が追加されました。AVIFサポートが追加されました。 ラッパー <div> が<span> に変更されました。 |
v11.1.0 | onLoadingComplete とlazyBoundary プロパティが追加されました。 |
v11.0.0 | src propが静的インポートをサポートするようになりました。placeholder propが追加されました。blurDataURL propが追加されました。 |
v10.0.5 | loader propが追加されました。 |
v10.0.1 | layout propが追加されました。 |
v10.0.0 | next/image が導入されました。 |