css - SVG、文本、固定宽度/高度的字体

标签 css fonts svg bounding-box

我正在尝试让 SVG“文本”元素适合 svg“rect”元素。例如在下面的示例中,我使用了 5 个字符的等宽文本,字体大小为 100 像素,并且我希望在文本附近有一个边界矩形。

但是文字右边有一个空白。

<svg xmlns="http://www.w3.org/2000/svg" height="200" width="1000">
    <text x="10px" y="110px" style="font-family:monospace;font-size:100px;">HELLO</text>    
    <rect x="10px" y="10px" width="500px" height="100px" style="stroke:blue;fill:none;"/> 
</svg>

我应该为“文本”元素使用什么 CSS 选择器?

注意:我不想使用 text-on-a-path 方法。只是一个固定大小的字体。

谢谢;

最佳答案

字体的大小决定了它的高度,而不是宽度;字符很少是正方形的。

据我所知,没有办法通过 CSS 可靠地确定等宽文本的宽度。

嗯,CSS3 有 ch unit , 这是 0 的宽度特点。这适用于等宽文本。但它在 SVG 中不受支持。

当然,您可以只设置一个以像素为单位的固定宽度。 300 像素的宽度适合我。但是如果其他人使用不同的等宽字体,固定宽度可能会关闭。如果添加 font-family:monospace;font-size:100px;<rect> 上同样,您可以在 em 中设置矩形的宽度秒。但我不认为那更可靠。

但是,您可以使用脚本。您可以使用 getComputedTextLength() 获取 text element 的文本长度:

<script type="text/javascript">
document.getElementById('rect').setAttribute(
    'width',
    document.getElementById('text').getComputedTextLength()
);
</script>

至少在 Opera 10、Firefox 3.5 和 Safari 4.0 中将它添加到 SVG 的末尾(并添加适当的元素 ID)。

当您使用它时,您可以使用 getBBox()同样,要获取文本元素的边界框,以便您也可以设置矩形的高度以匹配字体大小,以防您决定更改字体大小。

关于css - SVG、文本、固定宽度/高度的字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1732292/

相关文章:

javascript - 有没有办法通过管理面板编辑我的文件

html - 为什么 iOS Safari(和 iOS Chrome)显示背景图片的方式与其他浏览器不同?

java - 使用自定义字体

javascript - react : Trying to create separate folder for SVGs and import them into my components but unsure of how to import

html - 为什么我的 svg 没有出现?

javascript - 在javascript中将svg路径转换为多边形

javascript - 如何让div模态在每次打开时滚动到顶部?

javascript - 缩小图像并保持比例?

java - Android 使用特殊的 unicode 字符

html - 如何为 Chrome 编写@font-face