애드블럭 종료 후 보실 수 있습니다.

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Next.js Image 태그 height auto로 사용하기 (update 13 version)
    Next.js 2023. 8. 4. 16:11
    728x90
    반응형

    이 글은 next v13.4를 기반으로 작성되었습니다.

     

    Next 12 버전을 기반으로 height auto Image태그를 작성한 지 오래되지 않아 13 버전에서는 더욱 간단하게 사용할 수 있게 되어 소개하려고 한다.

    // AutoHeightImage.tsx
    
    import Image, { ImageProps } from 'next/image';
    
    interface IAutoHeightImage extends Omit<ImageProps, 'width'> {
      width?: string | number;
      alt: string;
    }
    
    const AutoHeightImage = ({ width = '100%', alt = '', ...props }: IAutoHeightImage) => (
      <Image
        {...props}
        width={0}
        height={0}
        sizes="100vw"
        alt={alt}
        style={{ ...props?.style, width, height: 'auto' }}
      />
    );
    
    export default AutoHeightImage;
    // page.tsx
    
    import AutoHeightImage from '@/components/AutoHeightImage';
    
    export default function Home() {
      return (
        <div>
          <h2>AutoHeightImage Test</h2>
          <AutoHeightImage src="/test.jpeg" alt="test image" />
        </div>
      );
    }

    이전 12 버전과 동일하게 외부에서 불러오는 이미지의 경우 width, height가 필수 값인 것은 동일하지만 이제는 span아래에 생성되는 형식이 아니라 온전히 하나의 태그로 생성되기 때문에 좀 더 심플해졌다.

     

    width와 height값은 사실 크게 중요하지 않지만 0, 0으로 하는 것이 이미지 호출 뒤에 이미지의 사이즈가 변경될 수 있는 현상을 없앨 수 있기 때문에 설정했다.

     

    가장 중요한 것은 sizes값으로 해당 값을 충분히 크게 설정하지 않을 경우 이미지를 최적화하는 과정에서 작은 이미지로 인식해 이미지의 화질이 저하되는 문제가 있을 수 있다.

     

    그리고 원래라면 styled components를 활용해 스타일을 줬겠지만 이제 Next Image 자체적으로 style을 받을 수 있기 때문에 자체적으로 style을 주었다.

     

    원래는 숫자만 입력 가능했던 것과 달리 이제 간편하게 %, px, rem 등의 단위를 이용해 사용할 수 있다.

    반응형

    댓글

Designed by Tistory.