喵呜猫MeowCat 2023-06-15 10:23 采纳率: 0%
浏览 21

HTML的object标签 预加载问题

以下代码,会加载2张图片,object一次,picture一次
如何修改,才能只加载一次

  <object data="https://www.404z.cn/images/about.svg" style="max-width:100%;">
    <picture>
      <source media="(prefers-color-scheme: dark)" srcset="https://www.404z.cn/images/about.dark.svg">
      <img alt="About" src="https://www.404z.cn/images/about.light.svg">
    </picture>
  </object>

为什么要这样写,想实现在md文档中嵌入带夜间模式的svg图片
about.svg可以实现夜间模式切换,但是在img标签中无效
如果不支持object标签,再加载内部内容

  • 写回答

1条回答 默认 最新

  • 玥轩_521 优质创作者: 信息安全技术领域 2023-06-15 10:57
    关注

    要让这段代码只加载一次,可以将 object 标签和 picture 标签改为 img 标签,并通过 data-srcsrcset 属性分别指定图片的地址和多种图片环境下的地址,这样在加载时就会根据不同环境选择相应的图片,并不会重复加载两次。

    修改后的代码如下所示:

    <img alt="About" data-src="https://www.404z.cn/images/about.svg" 
      srcset="https://www.404z.cn/images/about.dark.svg" media="(prefers-color-scheme: dark)">
    <img alt="About" data-src="https://www.404z.cn/images/about.svg" 
      srcset="https://www.404z.cn/images/about.light.svg" media="(prefers-color-scheme: light)">
    

    需要注意的是,现代浏览器已经可以自动识别 prefers-color-scheme 属性,因此无需使用 picture 标签进行判断,在 img 标签的 srcset 属性中直接指定对应方法即可。同时,也可以将 data-src 属性改为 src,这样直接加载图片而不等到 DOM 加载完成时再加载。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月15日