我在我的项目中使用SVG,现在我必须在网页中创建一个SVG元素<defs>
.在页面的后面,我将多次使用前面定义的对象.问题在于具有定义的对象,实际上它在页面中创建了一个空白区域.试试这段代码:
<!DOCTYPE html>
<html>
<body>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<polygon id="star" points="100,10 40,180 190,60 10,60 160,180" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;">
</defs>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="190">
<use x=0 y=0 xlink:href="#star">
</svg>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我有Firefox和Chrome的问题.我不关心IE.
小智 17
发生这种情况的两个原因是:
<svg>
呈现为 display:inline
向<svg>
标签添加尺寸最初将隐藏大部分空间,但仍会保留一小部分空间.
设置display:none
将隐藏其他<svg>
元素中引用的任何模式/渐变/等,因此不合适.
要完全隐藏它,请将<svg>
标记设置为display:block
.然后它将遵循先前给出的零长度尺寸.
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="display: block;">
<defs>
<polygon id="star" points="100,10 40,180 190,60 10,60 160,180" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;">
</defs>
</svg>
Run Code Online (Sandbox Code Playgroud)
将零维度添加到定义<svg>
标签:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="0" height="0">
<defs>
<polygon id="star" points="100,10 40,180 190,60 10,60 160,180" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;">
</defs>
</svg>
Run Code Online (Sandbox Code Playgroud)
当您既没有设置视口也没有设置尺寸时,我想浏览器试图在这里推断值,从而导致 SVG 的“默认大小”,从而呈现空白空间。
编辑
或者,设置display: none
为<svg>
与<defs>
元素:
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="display: none;">
<defs>
<polygon id="star" points="100,10 40,180 190,60 10,60 160,180" style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;">
</defs>
</svg>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3254 次 |
最近记录: |