🐻❄️
Next.js13 から非推奨となったImageコンポのlayoutとobjectFit属性の新しい書き方【警告文を消せます】
前置き
入社3ヶ月目の駆け出しフロントエンドエンジニアによる備忘録です。
今回はNext.js の Imageコンポーネントの新しい設定方法についての記事となります。
◎ 今回やってみたいこと
まず前提を共有しますと、Next.js で画像をレスポンシブ対応にさせようと Image
コンポーネントを弄ってから npm run dev
でブラウザを立ち上げたところ「その書き方は古いですよ」と警告文が表示されました。
古い書き方の Image コンポーネント
<Image
src="/LIN.svg"
alt=""
layout="responsive" // これがアウトらしい
width={500}
height={500}
/>
そこで今回は、Next.js の Imageコンポーネントの設定方法をバージョン13以降の新しいものに書き換える ことを目標に進めていきます。
◎ 使用技術と環境
項目 | 選択した技術 | バージョン |
---|---|---|
OS | MacOS | Sonoma 14.4 |
フレームワーク | Next.js | 14.1.3 |
言語 | TypeScript | ^5 |
スタイリング | Emotion | 11.11.4 |
◎ さっそくやってみよう
layout
属性の値にはそれなりに種類があるのですが、その中でも自分がよく使うレギュラーメンバーたち3つをピックアップして、それぞれを新しい方法で書き換えてみました。
layout="responsive"
-
layout="fill"
(とセットで使われるobejctFit="cover"
) layout="intrinsic"
古い書き方はマイナスのマーカーで、新しい書き方はプラスのマーカーで表示してあります。
index.tsx
import Image from 'next/image';
// ---- Emotion ----
/** @jsxImportSource @emotion/react */
import { css } from '@emotion/react'
export default function New() {
return(
<>
{/* ---- layout="responsive"の書き換え ---- */}
{/* 横幅だけ画面いっぱいに埋めてくれるやつ */}
<Image
src="/responsive.jpg"
alt=""
- layout="responsive"
width={500}
height={500}
+ sizes="100vw"
+ css={css`
+ width: 100%;
+ height: auto;
+ `}
/>
{/* ---- layout="fill" と objectFit="cover"の書き換え ---- */}
{/* 縦横画面いっぱいに埋めてくれるやつ */}
<Image
src="/object-cover.jpg"
alt=""
- layout="fill"
- objectFit="cover"
+ fill
+ css={css`
+ object-fit: cover;
+ `}
/>
{/* ---- layout="intrinsic"の書き換え ---- */}
{/* 固定したサイズより親要素が小さくなったときだけ縮小するやつ */}
<Image
src="/object-cover.jpg"
alt=""
width={500}
height={500}
- layout="intrinsic"
+ css={css`
+ max-width:500px;
+ width: 100%;
+ height: auto;
+ `}
/>
</>
);
}
以上で、Image
コンポーネントの設定を新しい方法で書き換えることができました!
参考
バッジを贈って著者を応援しよう
バッジを受け取った著者にはZennから現金やAmazonギフトカードが還元されます。
Discussion