【问题标题】:Reduce font-size when long word overflows horizontally当长字水平溢出时减小字体大小
【发布时间】:2017-05-28 07:00:00
【问题描述】:

我有很长的标题,有时会在小屏幕上稍微溢出窗口,所以我编写了一个脚本来减小标题的字体大小直到它适合它的容器只有当标题溢出它的容器时 … 它有效,但我确信可以找到更轻松的解决方案。

function adaptFontSize(titles) {
    $(titles).each(function() {
        var title = $(this),
            reducedFontSize,
            counter = 0;
        if (title[0].scrollWidth <= title.innerWidth()) { // if title <= container
            title.css('font-size', ''); // remove previously added font-size
        }
        while (title[0].scrollWidth > title.innerWidth() && counter < 20) { // while title > container
            var fontSize = reducedFontSize || parseInt(title.css('font-size')); // current title font-size
            reducedFontSize = Math.floor((fontSize - fontSize / 20) * 100) / 100; // reduce the font-size
            title.css('font-size', reducedFontSize + 'px'); // apply the reduced font-size
            counter++ // counter to limit the loop in case title[0].scrollWidth is not supported
        }
    });
}

或者这里是一个 JSFiddle:https://jsfiddle.net/Raoulito/pek7b3mr/12/

当我尝试在$(window).resize() 上应用脚本时,我的问题出现了。它实际上工作,但我能感觉到这个过程很繁重。它必须以两种方式工作:

  • 如果标题太宽,请减小字体大小,
  • 当窗口变宽时增加字体大小,直到标题达到原来的字体大小

以下是我尝试但未能实现的一些步骤:

  • 它不会在窗口调整大小的每个像素处一直触发该函数,而是等到它停止调整大小。
  • 当窗口变宽时,仅定位(在小于窗口的标题中)已经调整大小并且可能需要再次变大的标题。

所以我正在寻找一种方法来解决这些问题,或者以一种更有效的方式来解决这些问题。

【问题讨论】:

  • 您可以尝试媒体查询以获取仅 css 的解决方案。
  • 但是我的 99% 的标题都有很好的尺寸,只有 1% 溢出。我正在寻找仅针对最后这些的解决方案,并且可以在许多宽度的小屏幕上保持一致。

标签: javascript jquery css function loops


【解决方案1】:

您可以使用VW unit

1vw 等于视图宽度的1%,因此它是一个简单的纯 CSS 解决方案,适用于所有现代浏览器。

https://jsfiddle.net/pek7b3mr/8/

body {
    margin: 1em;
    font-family: sans-serif;
}

div {
    background-color: yellow;
    font-size: 5vw;
	margin-bottom: 1rem;
}
&lt;div&gt;ABCDEFGHIJKLMNOPQRSTUVWXYZ 012356789&lt;/div&gt;

【讨论】:

  • 感谢您的建议,但实际上并非如此:当标题小于窗口时我需要一个固定的字体大小,只有在标题比窗口宽的情况下才减小字体大小窗户。
  • 您需要 javascript...您可以使用媒体查询设置最小宽度以应用此规则。
  • 那太容易好玩了!
  • 嗯,最简单的方法是对您的浏览器伤害最小的方法。
猜你喜欢
  • 1970-01-01
  • 2014-07-24
  • 2011-12-17
  • 2021-03-27
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
相关资源
最近更新 更多