使用gatsby-plugin-mdx与gatsby-remark-images时MDX图片无法显示
MDX图片显示0x0问题的解决方法
从你给出的信息来看,图片资源已经被Gatsby正确处理(生成了多尺寸的webp/png文件),但容器元素尺寸为0x0,核心原因是图片容器的宽高比计算异常或样式冲突,以下是具体解决步骤:
1. 排查相对路径引用是否正确
确认MDX文件的位置与图片路径的对应关系:
- 若MDX在
articles文件夹中,./images/icon.png会指向articles/images,但你的gatsby-source-filesystem未配置该路径,需补充对应配置,或调整MDX中的图片路径为../src/images/icon.png(根据实际目录结构调整)。
2. 修复gatsby-remark-images的尺寸计算问题
控制台中gatsby-resp-image-background-image的padding-bottom:100%是正方形比例,若你的图片非正方形,可能插件未正确读取原始尺寸:
- 升级
gatsby-plugin-sharp和gatsby-remark-images到最新兼容版本,版本不兼容常导致尺寸计算错误; - 在
gatsby-remark-images配置中临时禁用WebP转换(withWebp: false),排查是否为格式转换导致的问题; - 强制添加CSS修复容器样式:
.gatsby-resp-image-wrapper { display: block !important; position: relative !important; width: 100%; min-height: 100px; /* 临时设置最小高度验证 */ }
3. 采用Frontmatter + MDXProvider方案(推荐)
通过Frontmatter管理图片,用Gatsby官方组件渲染,避免相对路径问题:
- 在MDX文件的Frontmatter中声明图片:
--- profileImage: "../src/images/icon.png" --- - 在博客模板中获取图片数据并渲染:
import { GatsbyImage, getImage } from "gatsby-plugin-image" import { MDXProvider } from "@mdx-js/react" export default function BlogTemplate({ data, children }) { const profileImg = getImage(data.mdx.frontmatter.profileImage) return ( <MDXProvider components={components}> {profileImg && <GatsbyImage image={profileImg} alt="profile" />} {children} </MDXProvider> ) } // 对应的GraphQL查询需包含frontmatter的图片字段 export const query = graphql` query($id: String!) { mdx(id: { eq: $id }) { frontmatter { profileImage { childImageSharp { gatsbyImageData(width: 500, quality: 50) } } } } } `
4. Static文件夹快速解决
将图片放到项目根目录的static/images文件夹中,使用绝对路径引用:

此方式无需依赖任何图片处理插件,直接静态加载,适合快速验证问题。
内容的提问来源于stack exchange,提问作者Davide_Romano
相关产品推荐
相关产品推荐

