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

摘要:
Viewpointcss3提供了一些与当前视点相关的元素,如vw、vh、vim等。也有用户对样式的操作,如更改浏览器大小和字体大小。让我们看看以下代码如何影响回流和重画:vars=document。身体风格s、 padding=“2px”;//回流+重新绘制s.border=“1pxsolid”//再次回流+重新画s.color=“blue”//再次重新绘制s.backgroundColor=“#ccc”//再次重画s.fontSize=“14px”//再次再次回流+重画//添加节点,再次回流+重绘。关于重新绘制和重新绘制其他方案1。这种效率相对较低。不建议使用#box{star:expression(resize=function(){varres=parseInt(this.style.width)/20;res=res˂9:“9px”?

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+

<!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;  100%;}
        .box {  900px; height: 200px;}
    </style>
</head>

<body>
    <div class="wrap"><div class="box"></div></div>
</body>
</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- 850px){/* 可视区域小于 850px, 设置更小font-size属性 */
   h2{
     font-size:19px;
   }
}

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

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

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

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

小结

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

参考文档

Viewport Sized Typography

文章来自:https://blog.csdn.net/dyllove98/article/details/9246397

免责声明:文章转载自《字体大小自适应纯css解决方案【转】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇neo4j导入csv文件 -小白福音Linux之文档与目录结构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Web项目的WEB-INF目录使用说明以及重定向与转发

写这篇文章的原因是看到了Tomcat下面的Webapps下面的,就想看一下。 总结一下这篇文章的内容: WEB-INF下面的内容都是只能由服务器级别才能访问,客户端并不能访问。什么是客户端级别?什么是服务器级别呢? 转发就是服务器级别,浏览器的地址不会变,因为,客户端发送一个请求,服务器受理之后,发现要请求内容还要再去别的请求,那么转发就是服务器自己去处理...

WinForm控件之【RichTextBox】

基本介绍 高级文本控件,提供高级文本输入和编辑功能,如字符或段落格式的设置。 常设置属性 DetectUrls:指示是否自动将URL的格式设置为链接; EnableAutoDragDrop:是否启用文本、图片和其他数据的拖放操作; BorderStyle:指示编辑控件是否应带有边框或边框类型; Lines:多行编辑中的文本行,作为字符串值的数组; MaxL...

css自定义滚动条样式

/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 16px; /*滚动条宽度*/ height: 16px; /*滚动条高度*/ } /*定义滚动条轨道 内阴影+圆角*/ ::-webkit-scrollbar-track...

初识CSS3之媒体查询(2015年05月31日)

一、什么是媒体查询 媒体查询是面向不同设备提供不同样式的一种实现方式,它可以为每种类型的用户提供最佳的体验,也是响应式设计的实现方式。 现今每天都有更多的手机和平板电脑问市。消费者能够拥有可想象到的各种规格和形状的设备,但是网站开发人员却面临一个挑战:如何使他们的网站在传统浏览器、手机和平板电脑浏览器上有很好的效果,如何在各种大小的屏幕上提供一流的用户体验...

PHP操作Redis数据库常用方法

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis支持的数据类型有 Stirng(字符串), List(列表), Hash(字典), Set(集合), Sorted Set(有序集合); 要让php能用上redis,首先就得安装redis扩展。 1.安装re...

QPainter学习

1、获取painter QPainter painter(this); 2、设置抗锯齿 painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); 3、画圆弧 QRectF rectangle(10.0, 20.0, 80.0, 60.0); int sta...