字体大小自适应纯css解决方案

viewpoint

css3提供了一些与当前viewpoint相关的元素,vw,vh,vim等。

“viewpoint” = window size

vw = 1% of viewport width
1vh = 1% of viewport height
1vmin = 1vw or 1vh, 最小
1vmax = 1vw or 1vh, 最大

兼容性:chrome 20+/ safari 6+/ IE 10+ / FF 19+ / IOS 6+

DEMO地址:http://qianduannotes.sinaapp.com/test/fontResize.html  (已经用JS修正重绘bug)

<!DOCTYPE HTML>  
<html>  
<head>  
    <meta charset="UTF-8">  
    <title>Demo</title>
    <style type="text/css">
        #box { font-size: 4vw;}
    </style>
</head>

<body>
    <div id="box">
        我是靖鸣君 我是靖鸣君 我是靖鸣君
    </div>
</body>
</html>

但是该方案存在一个bug,上面的代码,当浏览器窗口变化的时候,box中的文字并没有按照应有的比例变化,但是css3标准中是这么说的:

When the height or width of the viewport is changed, they are scaled accordingly.

 

插曲

像这样的问题,我之前也遇到过,比如以下代码:(小插曲,可跳过)

<!DOCTYPE HTML>  
<html>  
<head>  
    <meta charset="UTF-8">  
    <title>CSS3 Demo</title>
    <style type="text/css">
        body, div { margin:0; padding: 0;}
        .wrap { background: blue; width: 100%;}
        .box { width: 900px; height: 200px;}
    </style>
</head>

<body>
    <div class="wrap"><div class="box"></div></div>
</body>
</html>

 

DEMO地址:http://qianduannotes.sinaapp.com/test/paintBug.html  

box的宽度设置为900px,wrap设置为100%;缩小浏览器窗口,当宽度小于900时会出现滚动条,向右滚动,会发现蓝色部分并不是100%,这个问题大家可以去思考下。

 

bug处理

回到上面的问题,font-size:4vw,应该会使得字体的大小变化,可是他没有,和标准说的不一样,所以可以认为是一个bug。

window.onresize = function(){
    var box = document.getElementById("box");
    box.style["z-index"] = 1;
}

 z-index可以对应的元素被重绘(repaint)。

 

 延伸一点点关于重绘(repaint)和回流(reflow)的知识:

    1. 添加、删除元素(回流+重绘)
    2. 隐藏元素,display:none(回流+重绘),visibility:hidden(只重绘,不回流)
    3. 移动元素,比如改变top,left(jquery的animate方法就是,改变top,left不一定会影响回流),或者移动元素到另外1个父元素中。(重绘+回流)
    4. 对style的操作(对不同的属性操作,影响不一样)
    5. 还有一种是用户的操作,比如改变浏览器大小,改变浏览器的字体大小等(回流+重绘)
    让我们看看下面的代码是如何影响回流和重绘的:  
var s = document.body.style; 
s.padding = "2px"; // 回流+重绘
s.border = "1px solid red"; // 再一次 回流+重绘
s.color = "blue"; // 再一次重绘
s.backgroundColor = "#ccc"; // 再一次 重绘
s.fontSize = "14px"; // 再一次 回流+重绘
// 添加node,再一次 回流+重绘
关于重绘和回流

 

 其他方案

1. css expression, 这个效率比较低,不推荐使用

#box { star:expression(onresize = function(){
                var res = parseInt(this.style.width) / 20;
                res = res < 9 : "9px" ? res + "px";
                this.style.fontSize = res;
            });
        }
//P.S:上面代码没测试,不知道写错没有

与其说用的css,还不如说是JS,而且是效率不够的JS。

 

2. media query,这东西也不是特别好用

h2{
  font-size:25px
}

@media screen and (max-width: 850px){/* 可视区域小于 850px, 设置更小font-size属性 */
   h2{
     font-size:19px;
   }
}

用media query会使得字体的变化出现不连贯性,而且要可能设置多个@media,相当麻烦。

 

3. media query + -webkit-transition 实现平滑转变

 DEMO地址:http://qianduannotes.sinaapp.com/test/fontResize2.html

div{
    font-size: 40px;
    -webkit-transition:font-size 0.2s ease-out;
}

@media only screen and (max-width: 1200px) { div{ font-size: 39px; }}
@media only screen and (max-width: 1100px) { div{ font-size: 38px; }}
@media only screen and (max-width: 1000px) { div{ font-size: 37px; }}
@media only screen and (max-width: 900px) { div{ font-size: 36px; }}
@media only screen and (max-width: 800px) { div{ font-size: 35px; }}
@media only screen and (max-width: 700px) { div{ font-size: 34px; }}
@media only screen and (max-width: 600px) { div{ font-size: 33px; }}
@media only screen and (max-width: 500px) { div{ font-size: 32px; }}
@media only screen and (max-width: 400px) { div{ font-size: 31px; }}
@media only screen and (max-width: 300px) { div{ font-size: 30px; }}

 

小结

这玩意儿其实也没太大作用,用JS处理相当简单,不知道大家还有没有其他比较好的方案,可以提出来交流下~

 

参考文档

  * Viewport Sized Typography

 

Win10下ISE14.7安装避坑全记录:从License加载失败到ChipScope连不上,我踩过的雷都在这了 本文详细记录了在Win10系统下安装ISE14.7时遇到的常见问题及解决方案,包括License加载失败、IMPACT闪退、ChipScope连接故障等。通过实际案例和步骤解析,帮助用户避开安装陷阱,确保FPGA开发工具顺利运行。特别针对license问题提供了兼容性设置和文件修改的实用技巧。 阅读详情

相关推荐

Win10蓝屏代码critical process died的解决方法

critical process died”蓝屏错误是Win10操作系统中较为常见的问题之一。当遇到这一问题时,可以尝试通过修复当前系统、检查硬盘槽位或重新安装系统等方法来解决。本文详细介绍了这三种方法的操作步骤和注意事项,希望能帮助大家摆脱这一困扰。同时,也建议大家在日常使用中注意系统的维护和更新,以减少类似问题的发生。

mmoo_python的博客 9486

css实现文字大小自适应

在页面编写中经常会碰到页面自适应的问题,也就是页面内部的元素会随着窗口的放大缩小而放大缩小,通过百分比的形式做到页面自适应,但是box内的字体却无法做到这点,往往box自适应大小了,内部的字体还是原来的大小,看起来会非常别扭,下面就来css实现一下页面文字自适应大小。

分享互联网的有趣知识~ 2万+

零中频接收机实战:DC Offset的5种常见解决方案与调试技巧

本文针对零中频接收机中DC Offset这一核心挑战,深入剖析了其产生机理与对信号解调的严重影响。文章从实战角度出发,系统性地介绍了五种解决方案,包括硬件预防、数字域校正、I/Q不平衡联合校正等,并分享了关键的实验室调试与产线测试技巧,旨在帮助射频工程师有效提升接收机性能。

weixin_29234509的博客 364

CSS实现文字大小自适应

函数的作用是把一个值限制在一个上限和下限区间,当这个值超过区间范围时,在最小值和最大值之间选择一个值使用。它接收三个参数:最小值、首选值、最大值。假设浏览器窗口最小300px,最大1200px,当窗口小于300px的时候字体大小为。在写页面的时候,兼容手机和PC页面,这样字体大小就需要根据页面的大小进行动态变化。,当窗口大于1200px的时候,字体大小为。,否则就使用区间的首选值(

qq_17627195的博客 4685

响应式文字大小:CSS 根据容器的大小自动调整字体大小

通过CSS属性 container-type 和 cqw cqh单位 实现响应式的调整字体的大小

hongying_18的博客 8317

css字体随着屏幕自适应

假设,字体为70px 在大屏显示正常,但是在笔记本上文字就换行了。我想字体随着屏幕变化而变化。使用clamp函数,该函数接收三个参数:分别为 最小值,首选值,最大值。左边是字体大小的范围,右边是屏幕尺寸的范围;

qq_59626859的博客 1931

h5 字体大小自适应css解决方案

viewpoint CSS3提供了一些与当前viewpoint相关的元素,vw,vh,vim等。 “viewpoint” = window size vw = 1% of viewport width 1vh = 1% of viewport height 1vmin = 1vw or 1vh, 最小 1vmax = 1vw or 1vh, 最大 兼容性:chrome 20+/ s

IT_ZGC的博客 1万+

css案例5——字体自适应文字随页面变化而变化、rem单位

字体自适应

努力、拼搏、奋进 9370

CSS字体大小随屏幕大小自适应变化

1、通过媒体查询的方式 @media (min-width:0px){ html{font-size:12px;} } @media (min-width: 320px){ html{font-size:12px;} } @media (min-width: 340px){ html{font-size:13px;} } @media (min-width: 360px){...

小小前端 2万+

css 、js 、vue怎样让字体在固定宽度的盒子中适应

css 、js 、vue怎样让字体在固定宽度的盒子中适应,字体在固定宽度的盒子中适应。

Davi的博客 641

页面自适应字体大小,根据屏幕宽度适应font-size文字大小

页面自适应字体大小,根据屏幕宽度适应font-size文字大小,可适应字体,布局。

北斗星的爱886的博客 4340

H5移动端字体自适应(也适用于宽高)

阅读原文扫码查看: 自己研究摸索了几种H5移动端字体自适应的方法,分享出来和大家一起共享。 方法一:css方法, 精确度高,IOS 和 安卓 字体大小同等比例 1.1 以16px为基准,在根元素html下,字体为62.5% 1.2 此时1rem=10px; /* css代码 */ html { /* 10÷16=62.5% */ font-size: 62.5%; } body { font-size: 12px; /* 12÷10=1.2 */ font-size: 1.2re

TS_144636的博客 9561

CSS中的自适应字体大小

I've created a site using the Zurb Foundation 3 grid. 我已经使用Zurb Foundation 3网格创建了一个站点。 Each page ha

w36680130的博客 5854

Foundations for Microwave Engineering 2001 Robert E. Collin

微波工程基础知识经典教材 Robert E. Collin著

帝国cms7.5电脑壁纸美女明星图片大全模板独立wap手机端同步生成带采集+推送整站源码.zip

帝国cms7.5电脑壁纸美女明星图片大全模板独立wap手机端同步生成带采集+推送整站源码精仿3G壁纸网站。

上一篇: android:报Activity has leaked IntentReceiver或者re...
下一篇: Hadoop 类Grep源代码注释
weixin_33797791
博客等级 码龄11年 5837粉丝 764原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值