我有一个显示弯曲文本的基本SVG元素.虽然我使用的是网络安全字体和相对的样式单位,但在移动浏览器上,文本不知何故会变大并溢出.我在台式机和安卓系统上都使用Chrome120.我try 了其他字体,MS Edge,在根元素上设置1rem/16px字体大小,它们没有帮助.为什么会发生这种事呢?我怎么才能修好它呢?

Desktop Mobile
Desktop enter image description here

下面是我用来测试的页面:

<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 480">
    <defs>
      <style>
        @import url('https://fonts.googleapis.com/css2?family=PT+Serif:wght@700&display=swap');
      </style>
      <path id="yz" d="M61.92190299775521,240 A178.0780970022448,178.0780970022448 0 0 1 418.0780970022448,240"></path>
    </defs>
    <rect width="100%" height="100%" fill="white" />
    <text style="font-family: 'PT Serif', serif; font-size: 6.9ex; white-space: pre; letter-spacing: -0.05ex;">
      <textPath href="#yz"> LOREM  IPSUM  DOLOR</textPath>
    </text>
  </svg>

以下是该页面的实时版本: https://gold-gertie-8.tiiny.site/

推荐答案

white-space应用于SVG文本的属性在主要浏览器中的支持仍然不一致.

为了获得更可预测的呈现,请try 通过SVG startOffset和CSSword-spacing实现布局.

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 480">
  <defs>
    <style>
      /*
        @import url('https://fonts.googleapis.com/css2?family=PT+Serif:wght@700&display=swap');
        */
      /* latin */
      @font-face {
        font-family: 'PT Serif';
        font-style: normal;
        font-weight: 700;
        font-display: swap;
        src: url(https://fonts.gstatic.com/s/ptserif/v18/EJRSQgYoZZY2vCFuvAnt66qSVys.woff2) format('woff2');
        unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
      }
    </style>
    <path id="yz" d="M61.9 240a178.1 178.1 0 0 1 356.2 0"></path>
  </defs>
  <rect width="100%" height="100%" fill="white" />

  <text style="font-family: 'PT Serif', serif; font-weight:700; font-size: 3.1em; letter-spacing: -0.022em; word-spacing:0.2em">
    <textPath startOffset="2.1%" href="#yz">LOREM IPSUM DOLOR</textPath>
  </text>
</svg>

至少对于SVG文本,您可能更喜欢em个或更好的px个单位.较旧的浏览器可能会对相对单位ex使用略有不同的计算和舍入.

虽然(通常可以忽略)您也可以通过直接嵌入@font-face规则来强制使用特定的字体文件.谷歌字体应用了大量的浏览器嗅探-因此iOS Safari将检索到略有不同的字体版本.

Css相关问答推荐

如何使用css::Part()定位Web组件shadowDOM中的第N个元素

如何使重复线性渐变适合字体大小?

可折叠/可展开的数据表行:如何使Shadcn数据表中的可折叠内容全宽?

带高度的容器查询不工作,但可随宽度调整

将CSS栅格行高设置为其余视口高度

如何使按钮:之后像按钮:之前一样可见

Bootstrap 和 Sass:将 SCSS 文件转换为 CSS 时出错.错误:$theme-colors-rgb 中未定义变量 @each $color、$value

设置初始大小并记住分配的最后大小

如果父项的不透明度小于 1,则背景过滤器不适用

Blazor 组件未链接 css

使用 React-Router 和 Outlet 时如何确保内容保持在下方

CSS3 - RotateY() 居中

控制表格单元格之间的间距

Angular Material 中的样式垫 Select

如何更改 CSS:JavaScript 中的根 colored颜色 变量

使用自定义 CSS 在 WebView 中呈现 HTML

通过 Bootstrap4 对列进行排序

bootstrap.css 和 bootstrap-theme.css 有什么区别?

仅针对使用的类优化 Font Awesome

CSS中伪元素前的&是什么意思?