
本文针对在 CSS 中使用 SVG 图片创建水平滚动 banner 时遇到的字体显示和间距问题,提供了详细的解决方案。主要包括 SVG 字体嵌入、字体替代方案、以及 Illustrator 导出的 SVG 代码优化,旨在帮助开发者解决 SVG 在不同浏览器和环境下的兼容性问题,确保 banner 效果的正确呈现。
在使用 CSS 创建水平滚动 SVG banner 时,开发者可能会遇到一些字体和间距问题,导致在不同浏览器或设备上显示效果不一致。 这通常与 SVG 字体处理方式以及 Illustrator 等矢量图形软件的导出设置有关。以下是一些常见的解决方案:
字体嵌入问题
SVG 图片中使用的字体如果没有正确嵌入,用户设备上又没有安装该字体,浏览器会使用默认字体替代,导致显示效果与设计不符。此外,Firefox 等浏览器出于安全考虑,可能拒绝使用本地字体文件。
解决方案:
将文字转换为轮廓 (路径): 这是最直接的解决方案。在 Illustrator 中,选中所有文本元素 (Ctrl+A),然后使用 Ctrl+Shift+O 将文字转换为路径。 这样做会将文字转换为矢量图形,不再依赖字体文件。
-
使用 @font-face 嵌入字体: 使用 @font-face 规则可以将字体文件嵌入到 CSS 中。 可以使用工具如 transfonter 将字体文件转换为 data URL 格式,然后嵌入到 CSS 中。
@font-face { font-family: 'YourFontName'; src: url('data:application/font-woff;charset=utf-8;base64,...') format('woff'); /* 替换为你的 data URL */ font-weight: normal; font-style: normal; } .your-svg-text { font-family: 'YourFontName', sans-serif; } -
使用 Webfont: 可以直接在 HTML 中引入 Webfont,然后在 SVG 代码中引用该 Webfont。
使用开源字体: 考虑使用 SIL OFL 许可的开源字体,例如 "D-Din",可以在 font squirrel 上找到。
文本间距问题
Illustrator 在导出 SVG 时,可能会将文本元素分割成多个
解决方案:
-
简化 SVG 结构: 尽量简化 SVG 中的文本结构,避免使用过多的
元素。 可以尝试使用 text-anchor 和 dominant-baseline 属性来控制文本的对齐方式。 2022 1ST AWARD
完整示例
以下示例展示了嵌入字体和未嵌入字体的 SVG 图片的对比,以及使用 Webfont 的内联 SVG 代码:
SVG Font Embedding Example Font embedded
@@##@@Font not embedded (fallback font is used)
@@##@@Inline SVG - using Webfont (Roboto)
注意事项:
- 在将文字转换为轮廓后,文本将不再是可编辑的。
- 嵌入字体会增加 SVG 文件的大小。
- 确保使用的字体具有合适的许可,允许嵌入到 Web 页面中。
总结:
通过将文字转换为轮廓、嵌入字体或简化 SVG 结构,可以有效地解决水平滚动 SVG banner 中的字体和间距问题,确保在不同浏览器和设备上获得一致的显示效果。 在实际开发中,应根据具体情况选择合适的解决方案。










