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

如何实现固定宽度、动态高度且保留原图比例的Next.js Image组件

解决方案

方案1:使用Next.js Image的fill属性(固定容器比例场景)

直接利用Next.js Image内置的fill属性让图片填满父容器,仅需要给父容器添加相对定位,同时配置objectFit保证图片比例不变:

<Box w="500px" h="500px" position="relative" bg="red">
  <Image
    src={allArtPieces[0].imageUrl}
    alt={allArtPieces[0].title}
    fill
    objectFit="contain"
    /* 如果你需要图片铺满容器且裁剪超出部分,把contain改成cover即可 */
  />
</Box>
  • 该方案不需要单独声明图片的width、height属性,fill会自动继承父容器尺寸
  • objectFit: contain会保证图片完整显示、不拉伸、不溢出容器,自动保留原始比例

方案2:传入图片原始宽高属性(容器高度自适应场景)

Sanity CMS返回的图片资源本身自带原始宽高数据,你可以在查询时直接获取,作为width、height属性传给Next.js Image,再用样式覆盖渲染尺寸即可:

  1. 首先修改你的Sanity GROQ查询,拉取图片宽高:
*[_type == "artPiece"]{
  title,
  "imageUrl": image.asset->url,
  "imgWidth": image.asset->metadata.dimensions.width,
  "imgHeight": image.asset->metadata.dimensions.height
}
  1. 调整组件代码:
<Box w="500px" bg="red">
  <Image
    src={allArtPieces[0].imageUrl}
    alt={allArtPieces[0].title}
    width={allArtPieces[0].imgWidth}
    height={allArtPieces[0].imgHeight}
    w="100%"
    h="auto"
    objectFit="contain"
  />
</Box>
  • 这里的width/height属性仅用于给Next.js提供图片原始比例参数,不会限制最终渲染尺寸
  • 样式属性w="100%"会让图片铺满容器宽度,h="auto"会自动按照原始比例计算高度,容器高度也会随图片高度自动适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 00:06:02