设置 Viewbox 以便内联 SVG 将“捕捉”到包含元素的大小?
Setting the Viewbox so that the inline SVG will “Snap” to the size of the containing element?
我通过在 inkscape 中另存为 "Optimized SVG" 创建了这个简单的内联 SVG。在保存之前,我将大小设置为 200X200px。
<div style="width: 200px; background-color: red;">
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<g>
<path class="fs-logo-fill" d="m71.679 40.782v52.917h52.917v-52.917zm26.458 7.2166a19.242 19.242 0 0 1 19.242 19.242 19.242 19.242 0 0 1-19.242 19.242 19.242 19.242 0 0 1-19.242-19.242 19.242 19.242 0 0 1 19.242-19.242z"/>
</g>
</svg>
然后我将它放在宽度为 200px
的 div
元素中。
这是代码笔:
https://codepen.io/oleersoy/pen/dLxvEJ
可以看出,红色 div 比内联 svg 渲染大很多。我们如何设置视图框参数,以便内联 SVG 始终适合包含元素的大小?
为了获得正确的 viewBox,您需要获得路径边界框的大小,并使用您获得的值来定义 viewBox
。
console.log(thePath.getBBox())
<div style="width: 200px; background-color: red;">
<svg viewBox="71.68 40.782 52.92 52.92" style="display:block;">
<g>
<path id="thePath" class="fs-logo-fill" d="m71.679 40.782v52.917h52.917v-52.917zm26.458 7.2166a19.242 19.242 0 0 1 19.242 19.242 19.242 19.242 0 0 1-19.242 19.242 19.242 19.242 0 0 1-19.242-19.242 19.242 19.242 0 0 1 19.242-19.242z"/>
</g>
</svg>
</div>
在这种情况下,路径的边界框是:
let BB = {
"x": 71.67900085449219,
"y": 40.78200149536133,
"width": 52.91699981689453,
"height": 52.9170036315918
}
viewBox
会有这个相位:
viewBox=`${BB.x} ${BB.y} ${BB.width} ${BB.height}`
So we investigated this here to 并且根据@Wolff 提示,只要我们将 canvas 大小设置为与绘图相同的大小,viewbox 就会自行处理。换句话说,它具有正确的参数以适应 div 响应,我们就完成了。这是一个代码笔:
https://codepen.io/oleersoy/pen/xevpOw
请注意,我们使用 css class fs-logo-fill
.
设置 SVG 的颜色
我通过在 inkscape 中另存为 "Optimized SVG" 创建了这个简单的内联 SVG。在保存之前,我将大小设置为 200X200px。
<div style="width: 200px; background-color: red;">
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 200 200" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<g>
<path class="fs-logo-fill" d="m71.679 40.782v52.917h52.917v-52.917zm26.458 7.2166a19.242 19.242 0 0 1 19.242 19.242 19.242 19.242 0 0 1-19.242 19.242 19.242 19.242 0 0 1-19.242-19.242 19.242 19.242 0 0 1 19.242-19.242z"/>
</g>
</svg>
然后我将它放在宽度为 200px
的 div
元素中。
这是代码笔:
https://codepen.io/oleersoy/pen/dLxvEJ
可以看出,红色 div 比内联 svg 渲染大很多。我们如何设置视图框参数,以便内联 SVG 始终适合包含元素的大小?
为了获得正确的 viewBox,您需要获得路径边界框的大小,并使用您获得的值来定义 viewBox
。
console.log(thePath.getBBox())
<div style="width: 200px; background-color: red;">
<svg viewBox="71.68 40.782 52.92 52.92" style="display:block;">
<g>
<path id="thePath" class="fs-logo-fill" d="m71.679 40.782v52.917h52.917v-52.917zm26.458 7.2166a19.242 19.242 0 0 1 19.242 19.242 19.242 19.242 0 0 1-19.242 19.242 19.242 19.242 0 0 1-19.242-19.242 19.242 19.242 0 0 1 19.242-19.242z"/>
</g>
</svg>
</div>
在这种情况下,路径的边界框是:
let BB = {
"x": 71.67900085449219,
"y": 40.78200149536133,
"width": 52.91699981689453,
"height": 52.9170036315918
}
viewBox
会有这个相位:
viewBox=`${BB.x} ${BB.y} ${BB.width} ${BB.height}`
So we investigated this here to 并且根据@Wolff 提示,只要我们将 canvas 大小设置为与绘图相同的大小,viewbox 就会自行处理。换句话说,它具有正确的参数以适应 div 响应,我们就完成了。这是一个代码笔:
https://codepen.io/oleersoy/pen/xevpOw
请注意,我们使用 css class fs-logo-fill
.