[英]Avoid text wrapping while doing a jQuery animate on font-size
我有一些内容以预览比例显示,方法是将em用作所有内容,然后在我要缩小/放大时缩放根字体大小,因此您可以通过单击预览查看全部内容,这时我使用jQuery动画化字体大小,最高可达100%:
所以基本上:
CSS:
.example section {
font-size: 30%;
}
JS:
zoomed.animate({
fontSize: '100%'
});
但是,请摆弄小提琴以获得更好的主意。
问题是,尽管容器根据字体大小缩放,但浏览器将在整个动画中将文本包装在稍有不同的位置上-我理解为什么会发生这种情况(以不同大小/提示呈现时,不同比例的字符等) 。),但看起来很糟糕。 在Chrome中,它比在Firefox中更引人注目。 有趣的是,IE10根本不会改变行的换行位置。 这是在Windows上-可能OSX上的字体呈现没有此问题。
谁能想到某种修复或解决方法?
我最初考虑的一种解决方法是:
以100%字体大小创建预览,在空白处分割文本,一次将其添加到容器中一个单词,当容器高度增加时,存储位置,然后将每行换成空白且不换行并添加到元素中容器溢出:隐藏。
但是,由于我想使用任意HTML(包括ems大小的图像)进行预览,所以这实际上是不可行的。
这个想法是通过扩大常规文本,您放弃了如何将其放大为css / html的决定。 您想设计一种方法,使您可以更好地控制文本的动画和缩放。
例如,将文本转换为位图,然后对其进行缩放。 出于显而易见的原因,这将是一个糟糕的选择,例如将字体转换为位图的高昂成本,以及位图本身在缩放后会显得像素化(即质量下降)。 此外,即使使用css scale()
也会在放大和缩小时造成一些模糊 (请参阅原始问题下的注释)。
我的建议:
Canvas
和VML
的混合物来渲染字体。 来自flotcharts.org :
// Update the random dataset at 25FPS for a smoothly-animating chart
setInterval(function updateRandom() {
series[0].data = getRandomData();
plot.setData(series);
plot.draw();
}, 40);
这样,您可以完全控制动画的环绕,并确保没有像素化/缩放发生。
我建议使用等宽字体-可以消除动画中字体大小变化时看到的小间距变化。 您可以尝试以下一种使用Google网络字体的方法,看看是否至少不会遇到同样的问题。
使用CSS字母间距将div.padder
为:
letter-spacing: 1px;
有所作为,以为我不知道这是否正是您所希望的更改。
嗯。 在我的Mac上,Firefox完全没有问题,但是Chrome的性能比我想像的还要差-调整大小后,文本超出了容器的范围。
我认为我们可能需要备份一个步骤,再思考一次问题。 所以:
overflow: auto;
) 这种推理过程使我检查了jsfiddle,并且可以肯定的是, 在调整大小期间,示例中的各个部分并非都保持其相对大小 。
在我的机器上(一台笔记本电脑,因此像素很小,但这并不影响此处的逻辑),单个文本容器(最里面的.padder
)的长宽比为143px / 53px = 2.70
,而外部容器( .examples
)的宽高比为526px / 253px = 2.08
。
这具有以下后果:
我只能看到一种解决方案来防止遇到问题: 强制外部容器和文本容器具有相同的长宽比 (即,因为任何涉及使用实际HTML文本并在转换过程中更改长宽比的解决方案都将具有相同的问题)。
这也应该纠正我在Chrome中看到的文本高度超过容器高度的问题。 发生这种情况是因为行数发生了变化,但是按比例缩放的文本容器的高度由外部容器预先确定(外部容器完全与文本容器中的文本高度无关)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.