html - 如何使 SVG 图像动态匹配高度(1em)和周围文本的基线?

标签 html css svg

是否可以动态调整 SVG 图像的大小(使用 HTML 或 CSS)以匹配周围文本的基线和高度?

类似这样的东西(在这种情况下 SVG 图像是 Windows Logo ):

Image 1

Image 2

图像中的上下文可能很清楚;无论页面查看者使用何种字体或字体大小,我都希望 SVG 图像与文本大小相匹配。

如果可能,即使用户使用浏览器的仅缩放文本功能(就像这个)放大页面,它也应该仍然匹配文本的大小:

support.mozilla.org/zh-CN/kb/font-size-and-zoom-increase-size-of-web-pages#w_how-to-only-change-the-size-of-the-text

我想,实际上,我希望浏览器将 SVG 图像视为文本。

…我意识到在这种情况下使用网络字体实际上可能是最佳解决方案,但如果可以的话我宁愿避免使用它。除了解决问题有点难看之外,它还会产生新的问题,例如:

  • 即使我自己创建了网络字体, Logo 的高度也不会(完全)匹配所有现有字体中的 em(尽管,至少,尺寸可能会接近)

  • 用户更有可能在图像上屏蔽网络字体

  • 等等

最佳答案

天真的答案是将 SVG 的高度设置为 1em。但是,当然,您想要匹配字体的 X 高度,而不是 em 高度。

好消息是 X 高度对于特定字体是一致的,无论它有多大。因此,一旦您找到合适的 em 值来设置 SVG 大小,无论您选择何种字体大小,它都会起作用。

演示

svg.keyicon
{
  width: 0.8m;
  height: 0.8em;
}


.small
{
  font: 24px Arial;
  color: black;
}

.large
{
  font: 36px Arial;
  color: blue;
}
<div class="small">
  Press the 
  <svg viewBox="0 0 100 100" class="keyicon">
    <circle cx="50" cy="50" r="50" fill="currentColor"/>
  </svg>
  key...
</div>


<div class="large">
  Press the 
  <svg viewBox="0 0 100 100" class="keyicon">
    <circle cx="50" cy="50" r="50" fill="currentColor"/>
  </svg>
  key...
</div>

关于html - 如何使 SVG 图像动态匹配高度(1em)和周围文本的基线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35047877/

相关文章:

html - jquery 手机 : set padding to main page Div element so that padding + width = device-width

javascript - 如何在某些边界之外隐藏 javascript 动画?

svg - 我如何配置 Jekyll 来为 SVG 提供服务?

javascript - 在脚本中更改 HTML 中输入框的值

javascript/react 动态高度文本区域(停在最大值处)

java - 在 Eclipse 动态 Web 项目中包含 HTML 文件

javascript - 内容在 IE 中垂直展开,但在 Firefox 中有滚动条

html - CSS 滚动/翻译一个元素,如果它溢出

html - 用背景图像填充 SVG 路径元素

c# - 使用 c# 和 xaml 在 Metro App 中显示 svg