<Image> コンポーネント
使用例
補足: Next.js 13より前のバージョンを使用している場合は、コンポーネント名が変更されているため、next/legacy/imageのドキュメントを参照してください。
このAPIリファレンスでは、Imageコンポーネントで利用可能なpropsと設定オプションの使用方法を理解するのに役立ちます。機能と使用方法については、Imageコンポーネントページを参照してください。
import Image from 'next/image'
export default function Page() {
return (
<Image
src="/profile.png"
width={500}
height={500}
alt="著者の写真"
/>
)
}
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" | 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 | - |
必須Props
Imageコンポーネントには以下のプロパティが必要です: src
、width
、height
、alt
。
import Image from 'next/image'
export default function Page() {
return (
<div>
<Image
src="/profile.png"
width={500}
height={500}
alt="著者の写真"
/>
</div>
)
}
src
以下のいずれかである必要があります:
外部URLを使用する場合、next.config.js
のremotePatternsに追加する必要があります。
width
width
プロパティはピクセル単位の_レンダリング_幅を表し、画像の表示サイズに影響します。
静的インポートされた画像またはfill
プロパティを持つ画像を除き必須です。
height
height
プロパティはピクセル単位の_レンダリング_高さを表し、画像の表示サイズに影響します。
静的インポートされた画像またはfill
プロパティを持つ画像を除き必須です。
alt
alt
プロパティは、スクリーンリーダーや検索エンジン向けに画像を説明するために使用されます。また、画像が無効になっている場合や画像の読み込み中にエラーが発生した場合のフォールバックテキストでもあります。
ページの意味を変えずに画像を置き換えることができるテキストを含める必要があります。画像を補足するためのものではなく、画像の上下のキャプションですでに提供されている情報を繰り返すべきではありません。
画像が純粋に装飾的であるか、ユーザー向けではない場合、alt
プロパティは空の文字列(alt=""
)にする必要があります。
オプショナルProps
<Image />
コンポーネントは、必須プロパティ以外にも多くの追加プロパティを受け入れます。このセクションでは、Imageコンポーネントの最も一般的に使用されるプロパティについて説明します。より高度なプロパティの詳細については、高度なPropsセクションを参照してください。
loader
画像URLを解決するためのカスタム関数。
loader
は、以下のパラメータを指定して画像のURL文字列を返す関数です:
カスタムローダーを使用する例:
'use client'
import Image from 'next/image'
const imageLoader = ({ src, width, quality }) => {
return `https://example.com/${src}?w=${width}&q=${quality || 75}`
}
export default function Page() {
return (
<Image
loader={imageLoader}
src="me.png"
alt="著者の写真"
width={500}
height={500}
/>
)
}
あるいは、next.config.js
でloaderFile設定を使用して、プロパティを渡さずにアプリケーション内のすべてのnext/image
インスタンスを設定できます。
fill
fill={true} // {true} | {false}
親要素を埋めるように画像を拡大するブール値。width
とheight
が不明な場合に便利です。
親要素にはposition: "relative"
、position: "fixed"
、またはposition: "absolute"
スタイルを割り当てる_必要があります_。
デフォルトでは、img要素には自動的にposition: "absolute"
スタイルが割り当てられます。
画像にスタイルが適用されていない場合、画像はコンテナに合わせて引き伸ばされます。アスペクト比を維持しながらコンテナに収まるようにするには、object-fit: "contain"
を設定することをお勧めします。
あるいは、object-fit: "cover"
を設定すると、画像はコンテナ全体を埋め、アスペクト比を維持しながら切り取られます。これを正しく表示するには、親要素にoverflow: "hidden"
スタイルを割り当てる必要があります。
詳細については、以下も参照してください:
sizes
メディアクエリに似た文字列で、さまざまなブレークポイントで画像の幅がどのようになるかについての情報を提供します。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プロパティを含める必要があります:
import Image from 'next/image'
export default function Page() {
return (
<div className="grid-element">
<Image
fill
src="/example.png"
sizes="(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw"
/>
</div>
)
}
このsizes
の例は、パフォーマンス指標に劇的な影響を与える可能性があります。33vw
サイズがない場合、サーバーから選択される画像は必要な幅の3倍になります。ファイルサイズは幅の2乗に比例するため、sizes
がないとユーザーは必要なサイズの9倍の大きさの画像をダウンロードすることになります。
srcset
とsizes
について詳しく学ぶ:
quality
quality={75} // {number 1-100}
最適化された画像の品質で、1
から100
までの整数です。100
が最高品質で、したがって最大ファイルサイズになります。デフォルトは75
です。
priority
priority={false} // {false} | {true}
trueの場合、画像は高優先度と見なされ、プリロードされます。priority
を使用する画像では、遅延読み込みが自動的に無効になります。
Largest Contentful Paint (LCP)要素として検出された画像にはpriority
プロパティを使用する必要があります。ビューポートサイズごとに異なる画像がLCP要素になる可能性があるため、複数の優先度画像を持つことが適切な場合があります。
画像が折りたたみの上に表示されている場合にのみ使用してください。デフォルトはfalse
です。
placeholder
placeholder = 'empty' // "empty" | "blur" | "data:image/..."
画像の読み込み中に使用するプレースホルダー。可能な値は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スタイルを渡すことができます。
const imageStyle = {
borderRadius: '50%',
border: '1px solid #fff',
}
export default function ProfileImage() {
return <Image src="..." style={imageStyle} />
}
必要なwidthとheightのpropsがスタイルと相互作用する可能性があることに注意してください。スタイルを使用して画像の幅を変更する場合は、アスペクト比を維持するために高さをauto
にスタイル設定するか、画像が歪んで表示されます。
onLoadingComplete
'use client'
<Image onLoadingComplete={(img) => console.log(img.naturalWidth)} />
画像が完全に読み込まれ、プレースホルダーが削除された後に呼び出されるコールバック関数。
コールバック関数は、基になる<img>
要素への参照である1つの引数で呼び出されます。
onLoad
<Image onLoad={(e) => console.log(e.target.naturalWidth)} />
画像が読み込まれたときに呼び出されるコールバック関数。
loadイベントは、画像プレースホルダーが削除され、画像が完全にデコードされる前に発生する可能性があります。画像が完全に読み込まれるまで待ちたい場合は、代わりにonLoadingComplete
を使用してください。
onError
<Image onError={(e) => console.error(e.target.id)} />
画像の読み込みに失敗した場合に呼び出されるコールバック関数。
loading
推奨: このプロパティは高度な使用例のみを対象としています。画像を
eager
で読み込むように切り替えると、通常パフォーマンスが低下します。代わりに、画像を積極的にプリロードするpriority
プロパティを使用することをお勧めします。
loading = 'lazy' // {lazy} | {eager}
画像の読み込み動作。デフォルトはlazy
です。
lazy
の場合、ビューポートから計算された距離に達するまで画像の読み込みを延期します。
eager
の場合、画像をすぐに読み込みます。
loading
属性について詳しく学ぶ。
blurDataURL
src
画像が正常に読み込まれる前にプレースホルダーとして使用されるData URLです。placeholder="blur"
と組み合わせた場合のみ有効です。
base64エンコードされた画像である必要があります。拡大されてぼかされるため、非常に小さい画像(10px以下)が推奨されます。大きな画像をプレースホルダーとして含めるとアプリケーションのパフォーマンスに悪影響を与える可能性があります。
デモを試す:
画像に合わせた単色のData URLを生成することもできます。
unoptimized
unoptimized = {false} // {false} | {true}
trueの場合、ソース画像は品質、サイズ、フォーマットを変更せずそのまま配信されます。デフォルトはfalse
です。
import Image from 'next/image'
const UnoptimizedImage = (props) => {
return <Image {...props} unoptimized />
}
Next.js 12.3.0以降、next.config.js
を以下の設定で更新することで、すべての画像にこのプロパティを適用できます:
module.exports = {
images: {
unoptimized: true,
},
}
その他のプロパティ
<Image />
コンポーネントの他のプロパティは、以下の例外を除いて、基盤となるimg
要素に渡されます:
srcSet
。代わりにデバイスサイズを使用してください。decoding
。常に"async"
です。
設定オプション
プロパティに加えて、next.config.js
でImageコンポーネントを設定できます。以下のオプションが利用可能です:
remotePatterns
悪意のあるユーザーからアプリケーションを保護するため、外部画像を使用するには設定が必要です。これにより、Next.jsの画像最適化APIから配信される外部画像があなたのアカウントからのみであることが保証されます。これらの外部画像は、以下のようにnext.config.js
ファイルのremotePatterns
プロパティで設定できます:
module.exports = {
images: {
remotePatterns: [
{
protocol: 'https',
hostname: 'example.com',
port: '',
pathname: '/account123/**',
},
],
},
}
知っておくと良いこと:上記の例では、
next/image
のsrc
プロパティがhttps://example.com/account123/
で始まる必要があります。他のプロトコル、ホスト名、ポート、または一致しないパスは400 Bad Requestで応答されます。
以下はnext.config.js
ファイルのremotePatterns
プロパティの別の例です:
module.exports = {
images: {
remotePatterns: [
{
protocol: 'https',
hostname: '**.example.com',
},
],
},
}
知っておくと良いこと:上記の例では、
next/image
のsrc
プロパティがhttps://img1.example.com
またはhttps://me.avatar.example.com
、または任意の数のサブドメインで始まる必要があります。他のプロトコルまたは一致しないホスト名は400 Bad Requestで応答されます。
ワイルドカードパターンはpathname
とhostname
の両方で使用でき、以下の構文を持ちます:
*
単一のパスセグメントまたはサブドメインに一致**
末尾の任意の数のパスセグメントまたは先頭のサブドメインに一致
**
構文はパターンの途中では機能しません。
domains
警告:悪意のあるユーザーからアプリケーションを保護するため、
domains
ではなく厳格なremotePatterns
を設定することを推奨します。ドメインから配信されるすべてのコンテンツを所有している場合にのみdomains
を使用してください。
remotePatterns
と同様に、domains
設定を使用して外部画像の許可されたホスト名のリストを提供できます。
ただし、domains
設定はワイルドカードパターンマッチングをサポートせず、プロトコル、ポート、またはパス名を制限できません。
以下はnext.config.js
ファイルのdomains
プロパティの例です:
module.exports = {
images: {
domains: ['assets.acme.com'],
},
}
loaderFile
Next.jsの組み込み画像最適化APIの代わりにクラウドプロバイダーを使用して画像を最適化したい場合、以下のようにnext.config.js
でloaderFile
を設定できます:
module.exports = {
images: {
loader: 'custom',
loaderFile: './my/image/loader.js',
},
}
これはNext.jsアプリケーションのルートからの相対パスでファイルを指定する必要があります。ファイルは文字列を返すデフォルト関数をエクスポートする必要があります。例:
'use client'
export default function myImageLoader({ src, width, quality }) {
return `https://example.com/${src}?w=${width}&q=${quality || 75}`
}
あるいは、loader
プロップを使用してnext/image
の各インスタンスを設定することもできます。
例:
高度な設定
以下の設定は高度なユースケース向けで、通常は必要ありません。以下のプロパティを設定すると、将来の更新でNext.jsのデフォルトに対する変更を上書きします。
deviceSizes
ユーザーの予想されるデバイス幅がわかっている場合、next.config.js
のdeviceSizes
プロパティを使用してデバイス幅のブレークポイントのリストを指定できます。これらの幅は、next/image
コンポーネントがsizes
プロップを使用してユーザーのデバイスに適切な画像を配信する際に使用されます。
設定が提供されない場合、以下のデフォルトが使用されます。
module.exports = {
images: {
deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
},
}
imageSizes
next.config.js
ファイルのimages.imageSizes
プロパティを使用して画像幅のリストを指定できます。これらの幅はデバイスサイズの配列と連結され、画像srcsetを生成するために使用されるサイズの完全な配列を形成します。
2つの別々のリストがある理由は、imageSizesはsizes
プロップを提供する画像にのみ使用されるためです。これは、画像が画面の全幅より小さいことを示します。したがって、imageSizesのサイズはすべてdeviceSizesの最小サイズより小さくする必要があります。
設定が提供されない場合、以下のデフォルトが使用されます。
module.exports = {
images: {
imageSizes: [16, 32, 48, 64, 96, 128, 256, 384],
},
}
formats
デフォルトの画像最適化APIは、リクエストのAccept
ヘッダーを介してブラウザがサポートする画像フォーマットを自動的に検出します。
Accept
ヘッダーが設定されたフォーマットの複数に一致する場合、配列内の最初の一致が使用されます。したがって、配列の順序が重要です。一致がない場合(またはソース画像がアニメーションの場合)、画像最適化APIは元の画像のフォーマットにフォールバックします。
設定が提供されない場合、以下のデフォルトが使用されます。
module.exports = {
images: {
formats: ['image/webp'],
},
}
以下の設定でAVIFサポートを有効にできます。
module.exports = {
images: {
formats: ['image/avif', 'image/webp'],
},
}
知っておくと良いこと:
- AVIFは一般的にエンコードに20%長くかかりますが、WebPと比べて20%小さく圧縮されます。つまり、画像が最初にリクエストされるときは通常遅くなりますが、キャッシュされた後続のリクエストは速くなります。
- Next.jsの前にProxy/CDNを自己ホストしている場合、
Accept
ヘッダーを転送するようにProxyを設定する必要があります。
キャッシュ動作
以下はデフォルトのローダーのキャッシュアルゴリズムについて説明しています。他のすべてのローダーについては、クラウドプロバイダーのドキュメントを参照してください。
画像はリクエスト時に動的に最適化され、<distDir>/cache/images
ディレクトリに保存されます。最適化された画像ファイルは、有効期限が切れるまで後続のリクエストに対して配信されます。キャッシュされているが期限切れのファイルに一致するリクエストが行われた場合、期限切れの画像がすぐに配信されます。その後、バックグラウンドで画像が再最適化され(再検証とも呼ばれます)、新しい有効期限でキャッシュに保存されます。
画像のキャッシュステータスは、x-nextjs-cache
レスポンスヘッダーの値を読むことで確認できます。可能な値は以下の通りです:
MISS
- パスがキャッシュにない(最初の訪問時に最大1回発生)STALE
- パスはキャッシュにあるが再検証時間を超えているため、バックグラウンドで更新されるHIT
- パスはキャッシュにあり、再検証時間を超えていない
有効期限(またはMax Age)は、minimumCacheTTL
設定または上流の画像Cache-Control
ヘッダーのいずれか大きい方によって定義されます。具体的には、Cache-Control
ヘッダーのmax-age
値が使用されます。s-maxage
とmax-age
の両方が見つかった場合、s-maxage
が優先されます。max-age
はCDNやブラウザを含む下流のクライアントにも渡されます。
- 上流の画像に
Cache-Control
ヘッダーがないか値が非常に低い場合、minimumCacheTTL
を設定してキャッシュ期間を延長できます。 - 生成される可能性のある画像の総数を減らすために、
deviceSizes
とimageSizes
を設定できます。 - 単一の画像フォーマットを優先して複数のフォーマットを無効にするために、フォーマットを設定できます。
minimumCacheTTL
キャッシュされた最適化画像のTime to Live(TTL)を秒単位で設定できます。多くの場合、静的画像インポートを使用する方が良いでしょう。これはファイル内容を自動的にハッシュし、Cache-Control
ヘッダーをimmutable
にして永遠にキャッシュします。
module.exports = {
images: {
minimumCacheTTL: 60,
},
}
最適化画像の有効期限(またはMax Age)は、minimumCacheTTL
または上流の画像Cache-Control
ヘッダーのいずれか大きい方によって定義されます。
画像ごとにキャッシュ動作を変更する必要がある場合は、headers
を設定して上流の画像(例:/_next/image
自体ではなく/some-asset.jpg
)にCache-Control
ヘッダーを設定できます。
現時点でキャッシュを無効にするメカニズムはないため、minimumCacheTTL
を低く保つことが最善です。そうでない場合は、手動でsrc
プロップを変更するか、<distDir>/cache/images
を削除する必要があります。
disableStaticImages
デフォルトの動作では、import icon from './icon.png'
のような静的ファイルをインポートし、それをsrc
プロパティに渡すことができます。
場合によっては、インポートの動作が異なることを期待する他のプラグインと競合する場合、この機能を無効にしたいことがあります。
next.config.js
内で静的画像インポートを無効にできます:
module.exports = {
images: {
disableStaticImages: true,
},
}
dangerouslyAllowSVG
デフォルトのローダーはいくつかの理由でSVG画像を最適化しません。第一に、SVGはベクター形式であるため、ロスレスでサイズ変更できます。第二に、SVGにはHTML/CSSと同じ機能が多く含まれており、適切なコンテンツセキュリティポリシーがないと脆弱性につながる可能性があります。
デフォルトの画像最適化APIでSVG画像を配信する必要がある場合、next.config.js
内でdangerouslyAllowSVG
を設定できます:
module.exports = {
images: {
dangerouslyAllowSVG: true,
contentDispositionType: 'attachment',
contentSecurityPolicy: "default-src 'self'; script-src 'none'; sandbox;",
},
}
さらに、ブラウザに画像をダウンロードさせるためにcontentDispositionType
を設定し、画像に埋め込まれたスクリプトの実行を防ぐためにcontentSecurityPolicy
を設定することを強く推奨します。
アニメーション画像
デフォルトのローダーは、アニメーション画像の画像最適化を自動的にバイパスし、画像をそのまま配信します。
アニメーションファイルの自動検出はベストエフォートで、GIF、APNG、WebPをサポートしています。特定のアニメーション画像に対して明示的に画像最適化をバイパスしたい場合は、unoptimizedプロップを使用してください。
レスポンシブ画像
デフォルトで生成されるsrcset
には、異なるデバイスのピクセル密度をサポートするために1x
と2x
の画像が含まれています。ただし、ビューポートに合わせて伸縮するレスポンシブ画像をレンダリングしたい場合があります。その場合、sizes
とstyle
(またはclassName
)を設定する必要があります。
以下のいずれかの方法を使用してレスポンシブ画像をレンダリングできます。
静的インポートを使用したレスポンシブ画像
ソース画像が動的でない場合、静的インポートを使用してレスポンシブ画像を作成できます:
import Image from 'next/image'
import me from '../photos/me.jpg'
export default function Author() {
return (
<Image
src={me}
alt="著者の写真"
sizes="100vw"
style={{
width: '100%',
height: 'auto',
}}
/>
)
}
デモを試す:
アスペクト比のあるレスポンシブ画像
ソース画像が動的またはリモートURLの場合、レスポンシブ画像の正しいアスペクト比を設定するためにwidth
とheight
も提供する必要があります:
import Image from 'next/image'
export default function Page({ photoUrl }) {
return (
<Image
src={photoUrl}
alt="著者の写真"
sizes="100vw"
style={{
width: '100%',
height: 'auto',
}}
width={500}
height={300}
/>
)
}
デモを試す:
fill
を使用したレスポンシブ画像
アスペクト比がわからない場合、fill
プロップを設定し、親にposition: relative
を設定する必要があります。オプションで、目的の伸縮または切り抜き動作に応じてobject-fit
スタイルを設定できます:
import Image from 'next/image'
export default function Page({ photoUrl }) {
return (
<div style={{ position: 'relative', width: '500px', height: '300px' }}>
<Image
src={photoUrl}
alt="著者の写真"
sizes="500px"
fill
style={{
objectFit: 'contain',
}}
/>
</div>
)
}
デモを試す:
テーマ検出
ライトモードとダークモードで異なる画像を表示したい場合、2つの<Image>
コンポーネントをラップし、CSSメディアクエリに基づいて正しい方を表示する新しいコンポーネントを作成できます。
.imgDark {
display: none;
}
@media (prefers-color-scheme: dark) {
.imgLight {
display: none;
}
.imgDark {
display: unset;
}
}
import styles from './theme-image.module.css'
import Image, { ImageProps } from 'next/image'
type Props = Omit<ImageProps, 'src' | 'priority' | 'loading'> & {
srcLight: string
srcDark: string
}
const ThemeImage = (props: Props) => {
const { srcLight, srcDark, ...rest } = props
return (
<>
<Image {...rest} src={srcLight} className={styles.imgLight} />
<Image {...rest} src={srcDark} className={styles.imgDark} />
</>
)
}
import styles from './theme-image.module.css'
import Image from 'next/image'
const ThemeImage = (props) => {
const { srcLight, srcDark, ...rest } = props
return (
<>
<Image {...rest} src={srcLight} className={styles.imgLight} />
<Image {...rest} src={srcDark} className={styles.imgDark} />
</>
)
}
豆知識:
loading="lazy"
のデフォルト動作により、正しい画像のみがロードされます。priority
やloading="eager"
は使用できません。これらを使用すると両方の画像がロードされてしまいます。代わりにfetchPriority="high"
を使用できます。
実際に試してみてください:
既知のブラウザバグ
このnext/image
コンポーネントはブラウザネイティブのレイジーローディングを使用しており、Safari 15.4より前の古いブラウザではeagerローディングにフォールバックする可能性があります。ブラーアッププレースホルダーを使用する場合、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
バージョン履歴
バージョン | 変更点 |
---|---|
v13.4.14 | placeholder プロップでdata:/image... をサポート |
v13.2.0 | contentDispositionType 設定を追加 |
v13.0.6 | ref プロップを追加 |
v13.0.0 | next/image インポートがnext/legacy/image に、next/future/image インポートがnext/image に改名されました。インポートを安全かつ自動的にリネームするコードモッドが利用可能です。<span> ラッパーが削除されました。layout 、objectFit 、objectPosition 、lazyBoundary 、lazyRoot プロップが削除されました。alt が必須になりました。onLoadingComplete がimg 要素への参照を受け取るようになりました。ビルトインローダー設定が削除されました。 |
v12.3.0 | remotePatterns とunoptimized 設定が安定版になりました。 |
v12.2.0 | 試験的なremotePatterns とunoptimized 設定を追加。layout="raw" が削除されました。 |
v12.1.1 | style プロップを追加。layout="raw" の試験的サポートを追加。 |
v12.1.0 | dangerouslyAllowSVG とcontentSecurityPolicy 設定を追加。 |
v12.0.9 | lazyRoot プロップを追加。 |
v12.0.0 | formats 設定を追加。AVIFサポートを追加。 ラッパー <div> が<span> に変更。 |
v11.1.0 | onLoadingComplete とlazyBoundary プロップを追加。 |
v11.0.0 | 静的インポートのsrc プロップをサポート。placeholder プロップを追加。blurDataURL プロップを追加。 |
v10.0.5 | loader プロップを追加。 |
v10.0.1 | layout プロップを追加。 |
v10.0.0 | next/image を導入。 |