使用CSS和JS实现字体自适应

有没有遇到过这种场景:
有一个内容需要在一行显示,内容的长度未知,正常显示时我们需要字体大小正常显示,当文字长度超出盒子模型,我们需要全部显示并且不换行。是的!这个方法实现这种场景。

假如我们有一个宽度为375px的盒子,里面有一个段问题,可是它太长了,已经越界了
image

html代码

<style type="text/css">
    .container{
        width: 375px;
        background: lightseagreen;
        white-space: nowrap;
        line-height: 90px;
    }
    .text{
        font-size: 20px;
    }
</style>

<div class="container">
    <div class="text">如何使字体大小自适应容器大小?如何使字体大小自适应容器大小?如何使字体大小自适应容器大小?</div>
</div>

这个样子可没法向上面交差,有什么方法让它字体变小呢?答案是容器缩放。这里需要用到zoomtransformscale。其中使用transformscale需要设定transform-origin 且只对block元素有效(inline-block也有效)。

修改后的代码:

    //css
    <style type="text/css">
        .container{
            width: 375px;
            background: lightseagreen;
            white-space: nowrap;
            line-height: 90px;
        }
        .text{
            font-size: 20px;
            display: inline-block;
            transform-origin: 0 50%;
        }
    </style>

    //js
    <script>
        let domContainer = document.querySelector('.container');
        let domText      = domContainer.querySelector('.text');

        let boxWidth  = domContainer.offsetWidth
        let txtWidth  = domText.offsetWidth
        if(txtWidth <= boxWidth) {
            domText.style.transform = 'none';
        } else {
            let r = boxWidth/txtWidth;
            domText.style.transform = `scale(${r})`;
        }
    </script>

大功告成,看效果:
image

posted @ 2021-09-28 10:34  耳耳耳多~  阅读(1778)  评论(0)    收藏  举报