[Next.js] next/image 정리

rkdghwnd·2023년 7월 14일

img

  • 페이지가 로드될 때 다운로드
  • loading="lazy" 로 lazy loading 적용가능
  • 원본 이미지 확장자 그대로 다운로드

next/image

import Image from "next/image";

<Image src="경로" width="너비" height="높이" [fill] />
  • 이미지를 .webp 확장자로 다운 받아 용량을 최적화
  • quality 속성으로 용량 최적화값 조절가능(기본값 75)
  • next/image 는 너비와 높이를 기반으로 빌드타임에 이미지를 생성하고 최적화함
  • 스트링경로(내부링크, 외부링크 둘다)는 width, height 속성이 정해져야함
  • static하게 import해서 경로를 가져오는경우 width, height를 자동으로 계산하기 때문에 따로 속성을 안넣어도 적용됨(원본 크기로 가져옴)
  • placeholder="blur" -> 이미지가 다운로드 되는동안 blur 이미지가 자동으로 적용됨(빌드타임에 이미지를 미리 생성해놓고 로드하는 원리이기 때문에 배포환경에서만 확인가능)
  • lazy loading 기본 적용
  • next/image 를 적용할 때 이미지의 너비 높이를 모르는 경우 -> fill 속성 추가
    • fill : 이미지의 사이즈가 부모에 의해 결정됨
      • 부모 스타일에 postion:absolute or relative or fixed, width height 속성 지정 + 자식next/image 에 fill 속성 추가 -> 부모 사이즈에 맞춰 동적으로 이미지 조절
      • 이미지가 납작해 보이는 경우 -> style={{ objectFit: 'cover' }}
  • v13에서는 레이아웃 속성을 따로 지정하지 않으면 정적으로 사이즈를 유지함
  • v13에서는 레이아웃 속성이 fill만 존재함

next/legacy/image (v12 까지의 next/image)

import LegacyImage from "next/legacy/image";


<LegacyImage src="경로" width="너비" height="높이" layout="레이아웃" objectFit="속성" />
  • 전반적인 특성은 v13과 동일(lazy loading, 너비높이 지정 등)
  • layout 속성이 존재함(layout="fill" 등)
    - intrinsic : 지정된 이미지 사이즈로 렌더링 하되 화면이 이미지보다 작아졌을 때 화면에 맞춰 리사이징 함, layout shift(레아웃이 예기치않게 변화하는 현상)이 없음
    - fixed : 화면이 리사이징 되어도 이미지 크기가 고정됨
    - responsive : intrinsic의 특징 + 화면이 커질때도 리사이징 됨
    • fill : 이미지의 사이즈가 부모에 의해 결정됨
    • 스타일이 아닌 objectFit="cover" 속성으로 적용가능(v12)
profile
rkdghwnd's dev story

0개의 댓글