Chrome浏览器中<object>标签应用object-fit:cover属性效果异常求解
问题核心原因
Chrome 现阶段未对 <object> 标签适配 object-fit 属性,该属性目前仅对 <img>、<picture>、<video> 等原生可替换元素生效,Firefox 是额外做了兼容处理才符合预期。
可行解决方案
方案1:修改SVG源文件(最省心)
直接在你的SVG文件的根 <svg> 标签上添加属性 preserveAspectRatio="xMidYMid slice",该属性的效果和 object-fit: cover 完全等价,不需要修改现有页面的CSS/HTML结构,Chrome 下直接就能达到和 Firefox 一致的效果。如果SVG本身已经有preserveAspectRatio属性,直接替换属性值即可。
方案2:不修改SVG源文件,用CSS模拟cover效果
利用外层容器的overflow: hidden配合定位和缩放模拟效果,把你原有给object设置的CSS替换为以下内容即可:
object { position: absolute; left: 50%; top: 50%; min-width: 100%; min-height: 100%; /* 宽高比大于容器时按宽度撑满,小于时按高度撑满,和cover逻辑一致 */ width: auto; height: auto; transform: translate(-50%, -50%); }
这个方案不需要改动SVG,也不需要调整HTML结构,兼容性覆盖所有主流浏览器。
方案3:确认SVG动画类型,可换用<img>标签
如果你的SVG动画是SMIL动画或者内嵌CSS动画,不需要依赖外部JS交互,其实可以直接用<img>标签加载,<img>支持object-fit属性,所有浏览器表现一致。只有需要运行内嵌JS、或者需要和页面JS交互的SVG才必须用<object>标签。
内容的提问来源于stack exchange,提问作者user3630024
相关产品推荐
相关产品推荐

