gatsby - Gatsby 图像流体拉伸到超出容器的垂直尺寸
问题描述
我正在建立一个 gatsby 网站来展示我的照片。我想要每张照片的全屏页面,照片应该填满页面,但要尊重纵横比。
问题在于,虽然横向拍摄的照片受到了正确的限制,但纵向拍摄的照片会填满所有水平空间,但会溢出垂直空间。
在文档中有声明
如前所述,使用流体类型的图像会被拉伸以匹配容器的宽度和高度
但是,我观察到的行为是它只会拉伸以匹配宽度,而不是高度。
我将我的问题简化为这个小示例,它试图将图像包含在 400x400px 容器中:
import React from "react"
import { graphql } from "gatsby"
import Layout from "../components/layout"
import Img from "gatsby-image"
export default (props) => {
const { data } = props;
return (
<Layout>
<div style={{height: "400px", width: "400px", background: "white" }}>
<Img fluid={ data.file.childImageSharp.fluid } />
</div>
</Layout>
)
}
export const query = graphql`
query($id: String!) {
file(id: { eq: $id }) {
childImageSharp {
fluid(maxWidth: 500, maxHeight: 500, fit: INSIDE) {
...GatsbyImageSharpFluid
}
}
}
}
`;
在纵向示例中,图像填充了包含 div 的整个宽度,变得太高了:
如何使 Gatsby Image 缩小以限制可用的垂直空间?
ps 示例图像中的圆角是旧解决方案中引导类的残余,但它的存在并不影响所讨论的问题。
解决方案
看来,如果我向标签添加height
和object-fit
CSS 属性<Img />
,它会按我的意图工作。(在 Firefox 和 Chrome 中)
<Img
style={{ height: "100%", width: "100%" }}
imgStyle={{ objectFit: "contain" }}
fluid={ data.file.childImageSharp.fluid }
/>
这给出了预期的结果,无论是在我的简化示例中,还是在实际的基于 flex-box 的布局中。
推荐阅读
- c++11 - 枚举只能通过正确的引用传递
- file - 在两个相似但不匹配的目录树之间复制文件
- gstreamer - 使用 gst-launch 对录音添加延迟
- java - 使用 JOpts 解析后,以类型安全的方式处理命令行选项
- swift - 结合处理不同类型的发布者
- javascript - 如何在 d3.js 中创建饼图可视化,手动输入输入并平滑过渡
- javascript - React Native 设置函数调用流
- node.js - 我的不和谐机器人命令返回相同的响应 3 次
- php - 多维数组的PHP JsonEncode
- python - 在 Django admin 中添加自定义模型方法