美文网首页让前端飞
三种字体大小自适应容器宽度的方法

三种字体大小自适应容器宽度的方法

作者: 胡言乱语宝宝 | 来源:发表于2017-08-01 17:05 被阅读0次

618项目中遇到过这样一个问题,移动端各种机型屏幕宽度,各页面中的标题字数是不定的,设计师根据375宽的屏设计的字体大小为20px,在iPhone5中320的屏宽下某些页面由于标题文字长了些就出现了标题折行。所以提出一个问题,可否实现字体大小根据容器宽度自适应,即在小屏幕下由于标题字数多出现折行的话,就减小字体大小,从而达到不折行的效果。

首先是想从CSS方向上解决,然而搜索一番没有找到解决方案,要想实现需要计算协助,css计算目前只有calc()方法,然而calc()不能解决这个问题。所以这里借助js来从三个方向上解决问题。

方向一 动态计算字体大小

通过计算原有font-size下文案所撑起的宽度,除以容器宽度(这里设定容器宽度为屏幕宽度),得出需要缩放的系数,将系数换算成百分比赋值给font-size即可。
代码如下:

<div class="hd hd1">
    <span class="hd-text">这个标题很长哦可能一行放不下的怎么办呢</span>
</div>
<script>
    var hdWidth = document.body.getBoundingClientRect().width;
    var textWidth = document.getElementsByClassName('hd-text')[0].offsetWidth;
    var scale = hdWidth / textWidth;

    document.getElementsByClassName('hd-text')[0].style.fontSize = scale * 100 + '%';
</script>

方向二 缩放容器

该方案类似方案一,只是缩放的不是font-size,而是通过缩放容器。使用transform的scale或zoom,其中transform的scale需要设定transform-origin: 0 0;且只对block元素有效(inline-block也有效)
代码如下:

<div class="hd">
    <span class="hd-text">这个标题很长哦可能一行放不下的怎么办呢</span>
</div>
<script>
    var hdWidth = document.body.getBoundingClientRect().width;
    var textWidth = document.getElementsByClassName('hd-text')[0].offsetWidth;
    var scale = hdWidth / textWidth;

    document.getElementsByClassName('hd-text')[0].style.zoom = scale;
</script>

方向三 svg视口和视图框

最近在学习SVG,所以想到了SVG视口和视图框。同样也是需要计算指定font-size下的文字宽度,然后就是应用视口和视图框的原理,将宽度赋值给viewBox。
代码如下:

<svg class="hd" width="100%" height="50" viewBox="0 0 320 50"  xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink">
    <text class="svg-text" x="0" y="20">这个标题很长哦可能一行放不下的怎么办呢</text>
</svg>
<script>
    var textWidth = document.getElementsByClassName('svg-text')[0].getBoundingClientRect().width;
    document.getElementsByClassName('hd3')[0].setAttribute('viewBox', '0 0 ' + textWidth+ ' 50');
</script>

相关文章

  • 三种字体大小自适应容器宽度的方法

    618项目中遇到过这样一个问题,移动端各种机型屏幕宽度,各页面中的标题字数是不定的,设计师根据375宽的屏设计的字...

  • Label或Button自适应宽度或文字大小

    1、确定Label或Button的字体大小,使其宽度自适应 2、确定Label或Button的宽度,使字体大小自适...

  • iOS label长度固定 字体大小自适应

    label字体大小自适应 1.设置允许UILabel的宽度来自动适应字体大小: label.adjustsFont...

  • Label Button 文字大小自适应

    1、确定Label或Button的字体大小,使其宽度自适应 UILabel *contentLabel = [[U...

  • 图片容器大小不确定,图片宽度自适应

    图片设置高度等于宽度在图片容器大小不确定的情况下,想设置图片的宽度自适应,高度等于宽度,也就是正方形显示。解决方法...

  • CSS两栏布局(四种方法)

    两栏布局,要求左边固定,右边自适应。 方法1------浮动 思路:左边容器左浮动,宽度固定,右边元素设置marg...

  • Shrink-to-fit(自适应宽度)

    自适应宽度是指当未明确设定容器的宽度(或外边距设为auto)时,在特定的情况下容器的宽度会根据情况自行设定,而设定...

  • [CSS3]字体自适应相关

    为了使字体大小较不同屏幕来说自适应,此处使用了vw的宽度单位15vw = 15% 视窗宽度此CSS 3单位兼容性:...

  • CSS自适应布局

    今天小编介绍自适应布局实现方法的demo,1)左侧固定宽度,右侧自适应,随着窗口的宽度而变化;2)右侧固定宽度,左...

  • 移动h5自适应布局

    移动h5自适应布局 问题一,分辨率Resolution适配:不同屏幕宽度,html元素宽高比和字体大小,元素之间的...

网友评论

    本文标题:三种字体大小自适应容器宽度的方法

    本文链接:https://www.haomeiwen.com/subject/tggjlxtx.html