You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NextJS Image组件如何设置宽度100%、高度自适应保持宽高比

旧版Next.js(12及更早/Pages Router引入的next/image)解法

你当前使用的layout="fill"属性要求父元素必须有明确的宽高,所以才会出现必须设置固定高度才能正常展示的问题,可改用layout="responsive"实现需求:

export default function PhotoCard({ img }: Props) {
  return (
    <div className="w-full my-2">
      <Image
        alt={img.title}
        src={img.url}
        // 填写图片的原始宽高数值(单位为像素,仅用于计算宽高比,不会限制最终渲染尺寸)
        width={1600}
        height={900}
        layout="responsive"
        objectFit="cover"
      />
    </div>
  );
}

如果不知道图片的原始宽高,可以用比例容器方案适配:

export default function PhotoCard({ img }: Props) {
  return (
    {/* 以16:9比例为例,padding-top值 = 高度/宽度*100%,4:3对应75%,1:1对应100% */}
    <div className="relative w-full h-0 pt-[56.25%] my-2">
      <Image
        alt={img.title}
        src={img.url}
        layout="fill"
        objectFit="cover"
      />
    </div>
  );
}

新版Next.js(13+ App Router引入的next/image)解法

新版已经移除了layout属性,直接通过样式和参数配置即可实现:

import Image from 'next/image'

export default function PhotoCard({ img }: Props) {
  return (
    <div className="w-full my-2">
      <Image
        alt={img.title}
        src={img.url}
        width={0}
        height={0}
        sizes="100vw"
        className="w-full h-auto"
        style={{ objectFit: 'cover' }}
      />
    </div>
  );
}

注意事项

  • 远程图片需要提前在next.config.js中配置域名白名单,否则组件会报错无法加载
  • 使用layout="responsive"时填写的宽高为图片原始尺寸,仅用于计算宽高比,不会限制实际渲染大小

内容的提问来源于stack exchange,提问作者Jkaram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:24:02