You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Chart.js的X轴显示SF符号?Safari兼容问题求解

解决Chart.js中SF符号在Safari不显示的问题

问题场景

你尝试在Chart.js的X轴标签中添加SF符号,代码指定了'SF Pro'字体,其中Mon 􀆭是从SF Symbols应用复制的私有区域字符。该符号在Google Chrome中正常显示,但在Safari浏览器中无法渲染。

你的代码示例:

Chart.defaults.font.family = "'SF Pro'";
const config = {
        type: 'bar',
        data: {
            labels: ['Sun \u2600', 'Mon 􀆭', 'Tue', 'Wed \u263E', 'Thr', 'Fri', 'Sat'],
            // 省略其他配置项
        }
};

原因分析

SF Symbols中的部分字符属于Unicode私有使用区(PUA),这类字符的渲染依赖字体文件的完整支持。Safari对PUA字符的字体映射逻辑与Chrome不同,且如果网页中加载的SF Pro字体未包含对应私有符号的子集,就会导致无法显示。

解决方案

1. 替换为标准Unicode符号

优先选择公共Unicode编码的符号(比如你用到的\u2600太阳、\u263E残月),这类符号所有主流浏览器都原生支持,无需依赖特定字体。如果你的目标SF符号有对应的标准Unicode编码,直接替换即可。

2. 确保加载包含SF Symbols的字体变体

网页中默认引入的SF Pro字体可能不包含全部私有符号,需要单独引入专门的SF Pro Symbols字体:

  • 首先通过@font-face引入字体文件(需确保你拥有字体的使用权限):
@font-face {
  font-family: 'SF Pro Symbols';
  src: url('SF-Pro-Symbols.woff2') format('woff2');
  font-weight: normal;
  font-style: normal;
}
  • 然后在Chart.js配置中调整字体优先级,确保符号优先使用专门的Symbols字体:
Chart.defaults.font.family = "'SF Pro Symbols', 'SF Pro', sans-serif";

3. 使用SVG图标替代PUA字符

如果字体方案无法解决,可通过自定义Chart.js刻度标签渲染,用SVG图标替换文本符号,兼容性不受字体限制:

  • 先从SF Symbols应用导出对应图标的SVG代码;
  • 利用Chart.js的ticks.callback结合HTML渲染(需借助chartjs-plugin-datalabels插件支持HTML):
const config = {
  type: 'bar',
  data: {
    labels: ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'],
    // 数据配置
  },
  options: {
    scales: {
      x: {
        ticks: {
          callback: function(value, index) {
            const label = this.getLabelForValue(index);
            // 根据标签匹配对应的SVG图标
            const iconMap = {
              'Sun': '<svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentColor" d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8 8 8 0 0 1-8 8Zm1-12h-2v6h2V8Zm0 8h-2v2h2v-2Z"/></svg>',
              'Mon': '<svg width="16" height="16" viewBox="0 0 24 24"><path fill="currentColor" d="..."></path></svg>' // 替换为你导出的Mon对应的SVG路径
            };
            return `${label} ${iconMap[label] || ''}`;
          }
        }
      }
    }
  },
  plugins: [ChartDataLabels] // 需先引入chartjs-plugin-datalabels插件
};

4. 检查Safari浏览器设置

让用户确认Safari的字体设置:打开「偏好设置」→「高级」→「字体」,确保勾选「允许网站使用自己的字体」,避免系统强制替换字体导致符号无法渲染。


内容的提问来源于stack exchange,提问作者Solution 888

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:20:30