【问题标题】:Javascript Font-Resizer Overflowing DivJavascript Font-Resizer 溢出 Div
【发布时间】:2017-12-26 08:00:44
【问题描述】:

我一直在开发一个网站 (scibowltest.github.io),其中元素的字体大小由 javascript 确定。如果您访问该网站,当在笔记本电脑/台式机上显示时,浏览器以全宽和全高显示时看起来不错。但是,如果您调整窗口大小以减小宽度,字体就会开始溢出应该包含它的 div。

以下代码用于函数 font-sizer,它决定了 font-size 的大小。

function fontSizer(text, box, scale) {
  var textID = "#" + text;
  var boxID = "#" + box;
  var boxHeight = $(boxID).height();
  var boxWidth = $(boxID).width();
  var fontSize = 0;
  if (boxHeight >= boxWidth) {
    fontSize = (boxWidth * scale) + "px";
  } else if (boxHeight < boxWidth) {
    fontSize = (boxHeight * scale) + "px";
  } else {}

  var textHeight = $(textID).height();
  var textWidth = $(textID).width();

  if (textWidth > boxWidth) {
    fontSize = ((fontSize * (scale * boxWidth)) / (textWidth)) + "px";
  } else {}

  $(textID).css("font-size", fontSize);
}

该函数基于包含文本的 div(框)的较小尺寸工作。但是,最后一个 if 语句试图补偿文本宽度大于 div 宽度的情况,尝试缩小字体大小,使文本宽度等于 div 宽度乘以比例尺。

显然,通过查看网站,最后一个 if 语句不起作用。如果有人可以提供帮助,我将不胜感激!

【问题讨论】:

  • 我建议使用新的字体度量 (vw,'vh',vmin,vmax) - 其中一些应该适合您的需要。

标签: javascript jquery fonts font-size


【解决方案1】:

对于纯 CSS 解决方案,您可以使用一些完全适合您的用例的新 length units - 不同的屏幕尺寸。

玩转vw,vh,vmin,vmax,看看什么能给你带来最好的结果。我个人经常使用vmin

它需要一些摆弄,但会消除对 javascript 的使用。

我在这个例子中也使用了&lt;wbr&gt;(虽然它不应该是必需的)——一个“分词机会”来额外防止溢出。

div {
  width: 40vmin;
  font-size: 8vmin;
  border: 1px solid red;
  resize: both;
  text-align: center;
}

p {
  width: 40vw;
  font-size: 8vw;
  border: 1px solid red;
  resize: both;
  text-align: center;
}
resize the screen to see the fonts scale:

<div>Start/<wbr>Stop</div>

<p>Start/<wbr>Stop</p>

【讨论】:

  • 非常感谢您的回复 - 我查看了另一个 stackoverflow 问题并找到了这个解决方案,但是在我的 CSS 中实现它时,我无法使用它。我会再试一次,但我记得问题是当我在 div 级别设置字体大小时,字体大小会与在 h1 级别设置时不同。有没有人对此有理由。
  • 另外,我认为这个解决方案会再次遇到同样的问题——我可以根据 vmin 设置字体大小,但如果宽度只比高度略大,那么字体——大小将根据高度计算,文本将继续溢出 div 边界。
  • 我已经用过很多次了,我很确定它可以在不溢出的情况下完成。你试过全屏模式下的代码示例吗?
  • 您的不会溢出,因为您包含的 div 的高度和宽度都发生了变化。我的 js 的问题是只有浏览器窗口的宽度发生变化 - 然后高度仍然小于宽度,但只是勉强。通过 vmin 的字体大小仍然会根据高度计算,但由于字体超过一个字符,其他字符会溢出。
  • 但是,我会研究一下 vmin 解决方案,检查它是否有效,然后返回线程。
猜你喜欢
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-03
相关资源
最近更新 更多