rem

声明:学习和引用的原网址http://caibaojian.com/web-app-rem.html

一、什么是rem?

rem(font size of the root element)是一个相对于根元素<html>的字体单位。与px像素不同,它是一个相对单位,而rem是相对于根元素html,em则是相对于父元素。

二、为什么web app要使用rem?

1、实现强大的屏幕适配布局,能等比例适配所有屏幕:
2、没有屏幕字体缩放问题:
3、没有em多次使用计算麻烦的问题:

三、计算出不同分辨率下font-size的值的方法

1.媒体查询@media

关于媒体查询@media(css3):
使用 @media 查询,你可以针对不同的媒体类型定义不同的样式。
@media 可以针对不同的屏幕尺寸设置不同的样式,特别是如果你需要设置设计响应式的页面,@media 是非常有用的。
当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面。

适用场景:改变不多的业务。
优点:只需要在做web app先统计自己网站有哪些主流的屏幕设备,然后去针对那些设备去做media query设置,就能实现适配。
缺点:不能所有设备全适配。

核心代码示例:

html {
    font-size : 20px;
}
@media only screen and (min-width: 401px){
    html {
        font-size: 25px !important;
    }
}
@media only screen and (min-width: 428px){
    html {
        font-size: 26.75px !important;
    }
}
@media only screen and (min-width: 481px){
    html {
        font-size: 30px !important; 
    }
}
@media only screen and (min-width: 569px){
    html {
        font-size: 35px !important; 
    }
}
@media only screen and (min-width: 641px){
    html {
        font-size: 40px !important; 
    }
}

2.js

有好几个比较热门的库可以帮助我们解决移动端自适应可伸缩布局的问题。

⑴.阿里团队开源的一个库: lib-flexible
来自官方无奈的声明

使用方法也简单:
1.引入官方库(在所有资源加载之前执行这个JS。执行这个JS后,会在<html>元素上增加一个data-dpr属性,以及一个font-size样式。JS会根据不同的设备添加不同的data-dpr值,比如说2或者3,同时会给html加上对应的font-size的值,比如说75px。)

<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>

2.还需要编写js函数或者scss语法来配合动态的修改dpr,样式就可以用rem了

⑵.viewport

使用方法:
1.在<header></header>中引入

<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

2.编写js函数来动态处理htmlfont-size,这个的代码大家可以去网上搜。

// 设置页面rem大小
    // 以设计图( 750*1334 )尺寸宽度作为参考标准
    ;
    (function (doc, win) {
        var max = 750,
            docEl = doc.documentElement,
            resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
            recalc = function () {
                var clientWidth = docEl.clientWidth;
                if (!clientWidth) return;
                if (clientWidth >= max) {
                    docEl.style.fontSize = '100px';
                } else {
                    docEl.style.fontSize = 100 * clientWidth / max + 'px';
                }
            };
        if (!doc.addEventListener) return;
        win.addEventListener(resizeEvt, recalc, false);
        doc.addEventListener('DOMContentLoaded', recalc, false);
    })(document, window);

我两个都尝试了,感觉flexible好像是真的没有viewport好用啊,可能是因为我不会计算dpr吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中...
    百度怎么用阅读 4,798评论 0 4
  • 什么是Rem rem和em很容易混淆,其实两个都是css的单位,并且也都是相对单位,现有的em,css3才引入的r...
    tobAlier阅读 28,105评论 2 38
  • 【更新前言】很欣慰在看以前写的文章时能发现错误,说明自己进步了,此次更新主要是重构了文章,删去了错误的部分,更新了...
    果汁凉茶丶阅读 10,566评论 4 16
  • 作者:HelKyle链接:http://www.w3cplus.com/css/when-to-use-em-vs...
    红叶丶秋鸣阅读 8,661评论 0 3
  • 天蓝水蓝,奎笼就在眼前!靠近森林城市水路不到10分钟的路程! 森林城市在身边一晃而过 每天开车从新马共用的...
    乐陶陶_a077阅读 3,655评论 0 0

友情链接更多精彩内容