使用 @font-face 时,SVG 文本边框因浏览器而异?

2023-12-25

我试图通过使用 getBBox() 方法获取边界框来根据文本的宽度和高度放置 SVG 文本元素。

如果文本使用网络安全字体,则在不同浏览器中效果相当好,但如果使用 @font-face 和自定义网络字体设置文本样式,则在 Firefox (Mac) 和 Safari 中返回的文本宽度不正确( iOS)。 它在 Safari (Mac) 和 Chrome (Mac) 中都能完美运行。

如果灰色框与文本宽度相同,则它可以在该浏览器中运行。

有人知道如何在所有浏览器中获得文本边框的正确宽度吗?


浏览器在完成加载/应用之前正在计算边界框@font-face,假设你不需要IE,你可以将你的BBox计算函数包装在一个document.fonts.ready承诺...

document.fonts.ready.then(() => const bbox = textEl.getBBox());

这是一个展示问题和解决方法的工作示例:

const xmlns = "http://www.w3.org/2000/svg";
const correct = document.getElementById("correct");
const incorrect = document.getElementById("incorrect");

visualizeBBox(incorrect);
document.fonts.ready.then(()=> visualizeBBox(correct));


function visualizeBBox(el){
  const bbox = el.getBBox();
  const rect = document.createElementNS(xmlns, "rect");
  for (prop in bbox) rect.setAttribute(prop, bbox[prop]);
  document.querySelector("svg").appendChild(rect);
}
svg text {
  font-family: 'Diplomata SC', serif;
}

svg rect {
   stroke: red;
   fill: none;
}
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Diplomata+SC&display=swap" rel="stylesheet">

<svg xmlns="https://www.w3.org/2000/svg" width="600" height="400">
  <text x="0" y="40" font-size="24" id="correct">Correct dimensions</text>
  <text y="100" font-size="24" id="incorrect">Incorrect dimensions</text>
<svg>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 @font-face 时,SVG 文本边框因浏览器而异? 的相关文章

  • 在 d3.js 中操纵鼠标悬停在“点击区域”

    我想show and hideSVG 中的一个节点 当鼠标移到 mouseout 问题是我的节点内部的形状是一条宽度只有1 5px的路径 因此在鼠标悬停事件中不容易击中该区域 这对用户体验肯定不方便 我想知道是否有办法做到这一点打击范围更广
  • 使用 CSS 自定义字体?

    我见过一些在其网站上使用自定义字体的新网站 除了常规的 Arial Tahoma 等 他们支持大量的浏览器 如何做到这一点 同时 如果可能的话 还会阻止人们免费下载该字体 一般来说 您可以使用自定义字体 font face在你的 CSS 中
  • Ubuntu 上的 Vim:文本渲染错误,奇怪地重复和消失

    不久前我在 ubuntu 12 04 上安装了 vim 有时 当我在代码上运行光标 使用键盘 而不是鼠标 时 文本会消失 就好像渲染字符时出现问题一样 当我再次运行光标时 它通常会重新出现 这似乎是随机发生的 但通常足以让人恼火 为了更清楚
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • 如何在 html 画布上使文本适合精确的宽度?

    如何在 html5 画布上将单行文本字符串调整为精确的宽度 到目前为止我尝试过的是以初始字体大小编写文本 测量文本的宽度measureText my text width 然后根据我想要的文本宽度和实际文本宽度之间的比例计算新的字体大小 它
  • 使 html svg 对象也成为可点击的链接(在 iPhone 上)

    这个问题与使 html svg 对象也成为可点击的链接 https stackoverflow com q 11374059 4825796 但给出的答案似乎不适用于 iPhone ios 9 3 safari 和 chrome 浏览器 我
  • 如何在“object”标签内选择 SVG?

    HTML 页面的内容如下所示 方法如下script js looks var tooltip d3 select body append div style position absolute sty
  • 测量以指定宽度包裹的文本高度

    如何计算渲染以指定宽度包裹的文本所需的高度 我在中找到了以下方法Graphics graphicsObj MeasureString text font width 但它需要一个实例Graphics当时我还没有图形实例 事实上 我更喜欢使用
  • 跨浏览器相当于explicitOriginalTarget事件参数

    有谁知道跨浏览器等价于explicitOriginalTarget事件参数 该参数是 Mozilla 特定的 它为我提供了导致模糊的元素 假设我的页面上有一个文本输入和一个链接 文本输入具有焦点 如果我点击链接 文本输入的模糊事件会通过ex
  • 获取 NLTK 索引的所有结果

    我正在使用 NLTK 来查找单词的一致性 但我不知道如何获取所有结果并将它们放入list or set 例如 text concordance word 仅打印前 25 个结果 TL DR text concordance lines 10
  • 使用 librsvg / rsvg 通过 ImageMagick 转换 SVG 图像

    我知道这个问题在这里有几个答案版本 如下所示 ImageMagick 将 SVG 转换为 PNG 无法在启用 RSVG 的情况下工作 https stackoverflow com questions 11592085 imagemagic
  • 使用 SkiaSharp 在 Xamarin 中加载 SVG 文件

    从版本 1 55 0 开始 SkiaSharp 支持读取 SVG 文件 该软件包已于几天前发布 2016 年 11 月 10 日 但我找不到足够的有关如何使用它的文档 需要以下包 SkiaSharp 1 55 0 SkiaSharp 视图和
  • SVG - 可以在一侧添加笔画破折号渐变或透明形式

    我创建了一个 SVG 动画 在其中允许中风虚线阵列移动 我是否可以在中风破折号数组的尾部添加渐变并保持一侧透明 如示例中所示 svg main width 700px margin 30px auto position relative s
  • 在浏览器中下载视频,而不是在新选项卡中播放 [CORS]

    I have a 并在其内部href属性 当我点击该属性时 我从第 3 方 api 获得了一个视频 URL a 浏览器打开一个新选项卡并播放视频而不是下载视频 PROBLEM 我需要实现的是点击后直接下载视频 a 而不是在新标签中播放并强制
  • html datalist元素自动建议行为

    我注意到 当您将文本字段连接到数据列表时 不同的浏览器在建议文本字段值方面有不同的行为 某些浏览器显示的条目正是以 开始您输入的内容 IE 旧版 chrome 版本 而其他显示的条目contain您作为子字符串输入的内容 firefox 较
  • 添加鼠标事件到svg ,检测网格悬停

    我有一个有点复杂的问题 我正在尝试通过 svg 渲染网格 然后将事件侦听器添加到网格中 目前我正在通过渲染网格
  • document.referrer 跨浏览器兼容吗?

    我想使用 document referrer 进行非正式的推荐人检查 该元素跨浏览器兼容吗 当尝试引用文档对象时 浏览器会抛出错误吗 The document referrerDOM 规范中描述了属性 http www w3 org TR
  • 如何缩放 SVG 路径以适应窗口大小?

    我在缩放 SVG 以适应窗口大小时遇到 了麻烦 在这个例子中 我有一个波浪路径和一个文本元素 我想在这里实现的是沿着波浪路径从左到右移动文本元素 这是由GSAP完成的 并停在路径的中间在初始负载下 当用户开始滚动时 它将移至末尾 我的问题是
  • Dimple.js - 将数据标签添加到条形图的每个条形

    我使用的是dimple js 它基于d3 js 是否可以向本示例中提到的条形图的每个条形添加数据标签http dimplejs org examples viewer html id bars vertical http dimplejs
  • 转换 SVG 过滤器

    我正在尝试创建一个像 SVG 圆圈上的阴影这样的材质设计 我希望当您单击圆圈时 这个阴影能够以良好的过渡来增长 但目前我正在努力弄清楚是否可以为这种过渡设置动画 所以我希望有人能够提供帮助 我添加了一个到目前为止所得到的小例子 一个带有阴影

随机推荐

  • 如何知道窗口是否被“x”按钮关闭?

    有谁知道如何找出wpf窗口是否被 x 按钮关闭 最简单的方法 在我看来 是存储一个布尔值 指示用户是否通过其他方法关闭了表单 然后在 OnClosing 事件中 检查布尔值是否为 false 表示单击了 x 按钮 唯一的问题是您自己设置了布
  • Rails 和 Socket.io (node.js)

    我打算使用 Rails 应用程序来提供由 node js 服务器和 Socket io 处理的实时数据 在 Socket io 网站上 它说 如果您不会利用 Node JS 来提供服务 您的文件 请确保设置 全球的WEB SOCKET SW
  • 从 gradle 扩展访问配置闭包

    我正在编写一个插件 其中执行如下操作 project extensions create myExtension new MyExtension project where MyExtension是定义我的新功能的类 Now in grad
  • 在 RDF 中对数据库 NULL 的等价物进行建模

    我想知道是否有一种标准或普遍接受的方法来表示 RDF 数据数据库中使用的 NULL 的等效项 更具体地说 我对区分以下情况的值感兴趣o财产的p p是谓词 oRDF 三元组的对象 其值为不适用 即财产p不存在或在上下文中没有意义 其值为unk
  • 在 C 中读取 .csv 文件

    我有一个 csv 文件 lp imie nazwisko ulica numer kod miejscowosc telefon email data ur 1 Jan Kowalski ul Nowa 1a 11 234 Budry 12
  • 内存屏障的传递性/累积性属性是如何在微架构上实现的?

    我一直在阅读有关 x86 内存模型的工作原理 x86 上屏障指令的重要性以及与其他架构 例如 ARMv8 的比较 在 x86 和 ARMv8 架构中 似乎 没有双关语 内存模型尊重传递性 累积性 即如果 CPU 1 看到 CPU0 的存储
  • 使用 llvm 后端编译 haskell .ll 文件时出错

    我想使用 ghc 前端和 llvm 后端编译 haskell 我的 haskell hello hs 文件中有以下代码 main putStrLn Hello World 我使用以下命令用 ghc 编译 hello hs ghc fllvm
  • 长轮询,“全局”按钮,向所有人广播?

    我正在尝试实现一个全局按钮计数器 该计数器会在任何 不同用户单击它时更新 因此 我们的想法是 如果一个人单击该按钮 我会在页面实例上看到计数器更新 我目前的长轮询技术正在工作 或者我认为是这样 但经过审查 我相信我在向所有浏览器 广播 更新
  • 使用 Neo4j 批量插入

    我正在从表中导入 23 亿个关系 导入速度不是很快 每小时 500 万个 需要 20 天才能完成迁移 我听说过 neo4j 批量插入和批量插入实用程序 https github com jexp batch import 该实用程序通过从
  • 如何根据 powershell 中对象的两个属性来选择唯一的对象?

    我有一个具有 6 个属性的对象数组 看起来像这样 csvData CURRENT DATE AND TIME 07 10 2015 08 17 17 CST USER NAME userName COMPUTER NAME computer
  • 使用反射获取 linq 查询中的选择字段

    我正在使用 Linq 进行查询 并且希望能够使用反射在 选择 部分中获取我想要返回的属性列表 我已尝试以下方法但无济于事 string paramList new AppId Name var query from entity in ct
  • 自定义表格视图背景的 UITableViewCell 颜色问题

    我有一个 UITableView 其自定义背景图像设置如下 self tableView backgroundColor UIColor colorWithPatternImage UIImage imageNamed mybg png 背
  • DataInputStream/DataOutputStream类与InputStream/OutputStream类之间的区别

    每当我使用HttpConnection班级于Java ME Android or in BlackBerry 我用DataInputStream DataOutputStream用于通过远程服务器读取和写入数据的类 然而还有其他类 例如In
  • Get-EventLog - 轻松按“今天”过滤?

    我想快速检查今天发生的事件 即 从午夜开始的任何事件 Powershell 中是否有 今天 别名 内置功能可以帮助解决此问题 我目前正在做这样的事情 get eventlog system source disk after datetim
  • 拒绝类,因为它未通过编译时验证

    我正在尝试将来自 openwhispersystems 的 curve25519 java 集成到我的 Android 应用程序中 并使用 API 23 Marshmallow 进行编译 使用非本机代码时 我收到此运行时异常 java la
  • 我应该更改什么才能使该文件编译?

    我正在上编程课 这个程序是我作业的一部分 该文件分析名为 Names txt 的文件中的数据 然后打印信息 我收到编译错误 我想知道需要更改或添加哪些内容才能成功编译 这是我的代码 import java util Scanner impo
  • 更改 ImageView 内容会导致 OutOfMemoryError

    我有一个非常简单的应用程序 包含一个 ImageView 和一个 Button 我加载的第一个 Drawable 资源图像视图在 XML 布局中用 android src 标签指定 但是在运行时我想改变它显示的图片 为此 我启动一个活动以从
  • 压缩 (zip) 无法创建输出文件 - 错误

    我正在使用 VBscript 扫描文件夹 创建 zip 文件并向其中添加文件 压缩 但是当我在包含大量文件的文件夹上运行脚本时 出现以下错误 压缩 zip 无法创建输出文件 我的邮政编码处理代码如下 Dim objFSO Set objFS
  • 如何在视图刀片 Laravel 5.3 中显示空间?

    我在数据库中的记录是这样的 我想用空格显示 我尝试这样 nl2br text and nl2br e text 这是行不通的 我该如何解决 你尝试过使用 nbsp 在这里你可以使用 HTML 实体
  • 使用 @font-face 时,SVG 文本边框因浏览器而异?

    我试图通过使用 getBBox 方法获取边界框来根据文本的宽度和高度放置 SVG 文本元素 如果文本使用网络安全字体 则在不同浏览器中效果相当好 但如果使用 font face 和自定义网络字体设置文本样式 则在 Firefox Mac 和