SVG片段标识符用于链接到SVG文档的特定视图。它们在SVG规范1.1的Secion 17.3.2中定义
通常,它们的格式为MyDrawing.svg#MyView,其中哈希后面的部分指定链接文档中元素的ID。但以我的理解MyDrawing.svg,也应该允许不带哈希的片段标识符。
规格说明如下:
“如果未提供SVG片段标识符(例如,指定的IRI不包含“#”字符,例如MyDrawing.svg),则使用该视图建立SVG文档的初始视图svg最外层元素上的规范属性(例如'viewBox'等)。”
测试用例
如果已通过链接到两个SVG文件的HTML文件对此进行了小型测试。第一个文件是使用片段标识符的链接img1.svg#id1,第二个文件是与标识符的链接,img2.svg 以下是这些文件:
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Fragment Identifier Test</title>
</head>
<body>
<h2>With Hash</h2>
<div>
<svg style="width: 128px; height: 128px;">
<use xlink:href="img1.svg#id1"></use>
</svg>
</div>
<h2>Without Hash</h2>
<div>
<svg style="width: 128px; height: 128px;">
<use xlink:href="img2.svg"></use>
</svg>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
img1.svg(svg元素具有ID)
<svg id="id1" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,512,512">
<circle cx="256" cy="256" r="200" fill="green" />
</svg>
Run Code Online (Sandbox Code Playgroud)
img2.svg(svg元素没有ID)
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,512,512">
<circle cx="256" cy="256" r="200" fill="red" />
</svg>
Run Code Online (Sandbox Code Playgroud)
问题是什么
所有浏览器仅显示第一个SVG。
我有什么问题
我的第一个问题是:我是否正确理解,根据SVG规范应该可以使用没有哈希的片段标识符?
我的第二个问题:我在测试用例中做错什么了吗,或者浏览器是否不支持此操作?
我们为什么要这个?
在我看来,使用不带哈希的片段标识符链接SVG文档将是将单个SVG图像添加到HTML文档的圣杯。原因如下:-将SVG图像包含到HTML文档中的简单语法-不会使带有不必要ID的DOM混乱-能够使用CSS变量对SVG进行样式设置(如本文中Medium所示)。
简而言之,我们最终可以使用完全CSS样式的矢量图形,可以将其存储在单个外部文件中。没有注入,没有混乱的DOM ID。