首页 > 其他分享 >网页中加载 SVG 的七大方式

网页中加载 SVG 的七大方式

时间:2024-11-18 16:43:18浏览次数:3  
标签:需要 网页 SVG 适用 HTML 加载 页面

一、直接使用 <img> 标签加载外部 SVG 文件

<img src="path/to/image.svg" alt="描述文字">
<!--若多个svg格式的img的宽高设定为百分百高度,容易会造成首屏加载svg的高度为0-->

优点:

  • 简单易用:与加载其他图片格式(如 PNG、JPEG)相同。
  • 浏览器支持良好:现代浏览器普遍支持。
  • 可缓存:SVG 文件可以被浏览器缓存,减少重复请求。

缺点:

  • 无法直接操作 SVG 内部元素:如果需要对 SVG 内部的元素进行交互或样式修改,这种方法不适用。

适用场景:

  • 静态图像展示:仅需要展示 SVG 图像,不需要与之交互。

二、 将 SVG 作为 CSS 背景图片

.icon {
  width: 100px;
  height: 100px;
  background-image: url('path/to/image.svg');
  background-size: contain;
  background-repeat: no-repeat;
}
<div class="icon"></div>

优点:

  • 样式分离:将图片加载放在 CSS 中,保持 HTML 简洁。
  • 易于管理和复用:适用于重复使用的图标或装饰。

缺点:

  • 无法直接操作 SVG 内容:与 <img> 标签类似,无法对 SVG 内部进行操作。

适用场景:

  • 装饰性图案或背景:需要在多个地方使用相同的 SVG。

三、内联 SVG 代码

// 在HTML里面
<svg width="..." height="..." xmlns="http://www.w3.org/2000/svg">
  <!-- SVG 内容 -->
</svg>

优点:

  • 完全控制:可以直接操作 SVG 内部的元素,添加交互、动画等。
  • 减少请求:避免额外的 HTTP 请求。

缺点:

  • 代码冗长:SVG 内容可能较长,嵌入到 HTML 中会增加页面体积。
  • 不可缓存:每次页面加载都会重新加载 SVG。

适用场景:

  • 需要与 SVG 交互:需要动态修改 SVG 内部元素,添加事件监听等。

四、使用 <object><embed><iframe> 标签

<object type="image/svg+xml" data="path/to/image.svg"></object>

优点:

  • 可访问 SVG DOM:可以操作 SVG 内部的元素。
  • 避免污染主文档命名空间:SVG 在其自己的文档中。

缺点:

  • 兼容性问题:某些旧版浏览器可能支持不佳。
  • 样式隔离:无法直接使用主页面的 CSS 样式。

适用场景:

  • 需要部分交互:希望操作 SVG,但又不希望 SVG 代码直接嵌入到 HTML 中。

五、使用 JavaScript 动态加载 SVG

<div id="svg-container"></div>

<script>
  fetch('path/to/image.svg')
    .then(response => response.text())
    .then(svg => {
      document.getElementById('svg-container').innerHTML = svg;
    });
</script>

优点:

  • 动态加载:可以根据需要加载 SVG。
  • 可操作性强:加载后可以操作 SVG DOM。

缺点:

  • 异步加载:需要处理加载过程,可能出现内容延迟显示。
  • 安全性考虑:需要防范 XSS 攻击,确保加载的 SVG 安全可信。

适用场景:

  • 需要在运行时加载或替换 SVG:例如根据用户操作加载不同的 SVG。

六、使用 SVG Sprite(符号)

<!-- 定义部分(通常在页面顶部或单独的文件中) -->
<svg style="display: none;">
  <symbol id="icon-example" viewBox="0 0 100 100">
    <!-- SVG 内容 -->
  </symbol>
</svg>

<!-- 使用部分 -->
<svg width="50" height="50">
  <use xlink:href="#icon-example"></use>
</svg>

优点:

  • 重复使用:可以在页面中多次使用相同的符号。
  • 减少请求:所有图标集中在一个文件中。

缺点:

  • 初次加载较慢:如果符号库较大,可能增加页面初始加载时间。
  • 需要注意命名空间:符号 ID 需要唯一,避免冲突。

适用场景:

  • 多图标项目:如网站中大量使用小图标的情况。

七、使用 Base64 编码的 Data URI

<img src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0i..." alt="SVG Image">

优点:

  • 减少请求:将图片数据内联到 HTML 中,减少 HTTP 请求。
  • 便于传输:适用于需要将图片嵌入到 CSS 或 JavaScript 中的情况。

缺点:

  • 增加页面体积:Base64 编码会使数据体积增加约 33%。
  • 不可缓存:每次页面加载都需要重新下载数据。

适用场景:

  • 小型图标或装饰:仅适用于体积较小的 SVG。

标签:需要,网页,SVG,适用,HTML,加载,页面
From: https://blog.csdn.net/m0_72030584/article/details/143861029

相关文章

  • H.264/H.265播放器EasyPlayer.js网页直播/点播播放器关于播放的时候就有声音
    EasyPlayer.jsH5播放器,是一款能够同时支持HTTP、HTTP-FLV、HLS(m3u8)、WS、WEBRTC、FMP4视频直播与视频点播等多种协议,支持H.264、H.265、AAC、G711A、Mp3等多种音视频编码格式,支持MSE、WASM、WebCodec等多种解码方式,支持Windows、Linux、Android、iOS全平台终端的H5播放器,使用简单......
  • 网页前端/node端实现图片旋转功能
    网页前端方式//图片旋转rotateImg(url,degree){returnnewPromise((resolve,reject)=>{constsuffix=url.match(/[^\.]+$/)[0]constname=url.replace(/(.*\/)*([^.]+).*/ig,'$2').replace(/-\S+/,'')constfileName=`${......
  • H.265流媒体播放器EasyPlayer.js无插件H5播放器关于页面首次加载超时检测
    EasyPlayer.js网页直播/点播播放器是TSINGSEE青犀流媒体组件系列中关注度较高的产品,经过多年的发展和迭代,目前已经有多个应用版本,包括RTSP版、RTMP版、Pro版以及js版,其中js版本作为网页播放器,受到了用户的广泛使用。在功能上,EasyPlayer.js播放器支持直播、点播、录像、快照截图......
  • 网页直播/点播播放器EasyPlayer.js RTSP播放器关于硬解码或者video标签渲染自动播放
    EasyPlayer.jsRTSP播放器是一个基于WebRTC(网页实时通信技术)的开源JavaScript库,主要用于在网页上实现视频播放功能,特别是针对RTSP(RealTimeStreamingProtocol,实时流协议)流的播放。它允许开发者在不需要安装额外插件或软件的情况下,直接在网页中嵌入和播放来自监控摄像头或其他R......
  • unity3d————场景异步加载
    总结本文介绍了Unity中场景切换的两种方法:同步切换和异步切换。同步切换在切换场景时会删除当前场景的所有对象并加载下一个场景的信息,可能导致卡顿。因此,异步切换被引入来解决这个问题。异步切换有两种实现方式:通过事件回调函数和通过协程。通过事件回调函数实现异步加载代......
  • 如何在原生鸿蒙中进行RN热加载
    一、背景在上一篇博客中,我分享了将RN的bundle包在原生鸿蒙开发中进行使用。但是如果我们在实际的开发过程中,每次修改完代码都需要打包,然后重新运行原生项目的话效率就有点太低了。原生鸿蒙支持RN的热加载,每次改完代码直接ctrl+s即可,改动后的代码会自动同步到手机上。除此之外,还......
  • 「LUCKY STUN穿透」使用Cloudflare的页面规则固定和隐藏网页端口
    关于本教程索引│├─关于本教程│├─在STUN穿透环境中使用WEB服务│├─动态端口带来的麻烦│├─“隐藏端口”和固定端口│└─可用的解决方法│├─使用邮件进行通知端口变化│└─使用HTTP重定向│├─网络环境优化和STUN穿透规则设置......
  • python爬虫爬取网页中文乱码问题的解决
    一:遇到的问题1.代码点击查看代码importrequestsifname=='main':#指定URLurl='https://xxxxxx'#发送请求1.page_text=requests.get(url,headers=headers).text#打印print(page_text)2.返回的网页内容点击查看代码#省略的代码第ä¸å·宴æ¡......
  • 网页前端设计师的痛点:怎么把真个网页截图保存?
    作为一个网站前端设计师,有时候,我需要根据一个参考网站的整体布局进行调整修改,一个非常困扰我的问题就是怎么把一个很长的网页截图保存!我的以往方法就是用PS或者是Fireworks来分屏截图,最后在自己拼接完成!拼接是一个非常痛苦的过程,有时候,一些字体和动态效果就无法对接,需要再次......
  • zlibrary镜像网页,国内可用官网入口及客户端/app(持续更新)
    Z-Library(也被称为Z-Lib)是一个在线的、开源的、免费的数字图书馆项目,旨在提供各种书籍、文章、科学论文、杂志、漫画等资源的访问。该项目成立于2009年,至今已经收录了超过10,000,000册书籍和80,000,000篇文章。zlibrary电脑客户端/安卓appzlibrary(windows/mac/安卓)安装包下......