html - 是否可以引用 HTML 文档中其他地方定义的 SVG?
问题描述
我有巨大的动态列表,它们引用大量单独(生成)的 SVG(程式化的首字母缩略词)。
我不喜欢将生成的 SVG 放在单独的文件中,因为它会创建成百上千的请求。即使以某种方式使用 HTTP/2,我也不喜欢这个解决方案。我觉得它会产生不必要的开销。
每次内联完整的 SVG 我也不喜欢。它为所有相同的首字母缩略词创建重复数据(一个项目可以在页面上出现多次),旁边是一个高度动态的页面:我觉得更改背景图像比使用 SVG 更改 DOM 快得多.
那么:是否可以引用文档中其他地方定义的 SVG?
我正在寻找类似的东西:
<!-- generated by server -->
<div style="display: hidden;">
<svg id="acronym-abc">
[...]
</svg>
<svg id="acronym-xyz">
[...]
</svg>
</div>
<!-- generated by client -->
<ul>
<li style="background: SVG(id=acronym-abc)"></li>
<li style="background: SVG(id=acronym-xyz)"></li>
<li style="background: SVG(id=acronym-abc)"></li>
[...]
</ul>
更新
我的问题并不清楚,但我偏爱可以与 IE9 结合使用background-image
并支持 IE9 的东西。否则我会接受@web-tiki 的回答。
解决方案
您可以使用该元素并使用标签<symbol>
引用每个符号。
这不能用作背景图像,但它只允许您拥有每个符号的实例。每次引用符号时,您还可以控制符号的样式。<use>
这是一个例子:
<svg width="0" height="0">
<symbol id="circle" viewBox="0 0 2 2">
<circle cx="1" cy="1" r=".7" />
</symbol>
<symbol id="square" viewBox="0 0 2 2">
<path fill="darkorange" d="M.5 .5 H1.5 V1.5 H.5z" />
</symbol>
</svg>
<p>
<svg width="50" height="50"><use xlink:href="#circle" /></svg>
<svg width="50" height="50"><use xlink:href="#circle" fill="teal" stroke="red" stroke-width=".1"/></svg>
<svg width="50" height="50"><use xlink:href="#square" /></svg>
<svg width="50" height="50"><use xlink:href="#square" fill-opacity=".5"/></svg>
</p>
有关 MDN 的更多信息:
推荐阅读
- python - 使用自定义更改管理表单字段
- android - 为什么我在Android Studio中设置了标题后工具栏的标题不显示?
- python - 找不到元素->右键单击它->将鼠标悬停在上下文菜单上以导出报告-Using Selenium Webdriver for python
- python - 有人可以向我解释为什么这段代码不起作用吗?
- python-3.x - 通过将作业安排到 Airflow 来更新气流数据库
- python - 分组数据并减去第一个和最后一个值(或更高和更低的值)
- reactjs - 你需要为反应中的复合组件添加 ...restProps 吗?
- powershell - 从共享点下载 Powershell
- r - 在 R 中使用 lapply 时在数据框中添加一列
- cron - Rundeck:从周日早上到周五下午的时间表