Next.js Image 自适应父元素(设置宽度为100%)

使用 Next.js 时,让 next/image 组件可以自适应父元素宽度(设置宽度为100%)的一种方法

发布于  星期四,三月 21 2024

环境

不同版本的 Next.js 中 next/image 组件的用法可能不一样,需要注意

  • Next.js 的版本: >= 13.3.0
  • 项目已安装 Tailwind CSS(不是必须)

具体实现

next/image 组件对加载图片做了很多优化,是个很好的组件。但是有个很不爽的点就是 next/image 组件一定要设置 widthheight,而且 widthheight 只能为设置数字类型的值。要想让图片自适应父元素或者设置宽度为 100% 是没法通过 widthheight 配置来搞定的,只能通过比较 hack 的方法来实现。例如如下代码:


<!-- 安装了tailwind css时的写法 -->
<div className="max-w-lg lg:max-w-xl">
    <Image
      src="xxx"
      width={0}
      height={0}
      sizes="100vw"
      className="w-full h-auto"
    />
</div>

<!-- 普通写法 -->
<div style={{ width: 'xxx' }}>
    <Image
      src="xxx"
      width={0}
      height={0}
      sizes="100vw"
      style={{ width: '100%', height: 'auto' }}
    />
</div>

参考链接

  • Next.js