html5页面rem布局适配方法详解


本文摘自PHP中文网,作者小云云,侵删。

本文主要介绍了详解html5页面 rem 布局适配方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。

rem 布局适配方案

主要方法为:

  1. 按照设计稿与设备宽度的比例,动态计算并设置 html 根标签的 font-size 大小;

  2. css 中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为 rem 为单位的值;

  3. 设计稿中的字体使用 px 为单位,通过媒体查询稍作调整。

1 动态设置 html 标签 font-size 大小

精简通用版本:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

!(function(win, doc){

  function setFontSize() {

    // 获取window 宽度

    // zepto实现 $(window).width()就是这么干的

    var winWidth =  window.innerWidth;

    // doc.documentElement.style.fontSize = (winWidth / 640) * 100 + 'px' ;

     

    // 640宽度以上进行限制 需要css进行配合

    var size = (winWidth / 640) * 100;

    doc.documentElement.style.fontSize = (size < 100 ? size : 100) + 'px' ;

  }

 

  var evt = 'onorientationchange' in win ? 'orientationchange' : 'resize';

 

  var timer = null;

 

  win.addEventListener(evt, function () {

    clearTimeout(timer);

 

    timer = setTimeout(setFontSize, 300);

  }, false);

 

  win.addEventListener("pageshow", function(e) {

    if (e.persisted) {

      clearTimeout(timer);

 

      timer = setTimeout(setFontSize, 300);

    }

  }, false);

  // 初始化

  setFontSize();

 

}(window, document));

高配精确版本:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

(function(WIN) {

    var  setFontSize = WIN.setFontSize = function (_width) {

        var  docEl = document.documentElement;

        // 获取当前窗口的宽度

        var  width = _width || docEl.clientWidth; // docEl.getBoundingClientRect().width;

 

        // 大于 1080px 按 1080

        if (width > 1080) {

            width = 1080;

        }

 

        var  rem = width / 10;

        console.log(rem);

 

        docEl.style.fontSize = rem + 'px';

 

        // 误差、兼容性处理

        var  actualSize = win.getComputedStyle && parseFloat(win.getComputedStyle(docEl)["font-size"]);

        if (actualSize !== rem && actualSize > 0 && Math.abs(actualSize - rem) > 1) {

            var remScaled = rem * rem / actualSize;

            docEl.style.fontSize = remScaled + 'px';

        }

    }

 

    var timer;

 

    function dbcRefresh() {

        clearTimeout(timer);

        timer = setTimeout(setFontSize, 100);

    }

 

    //窗口更新动态改变 font-size

    WIN.addEventListener('resize', dbcRefresh, false);

    //页面显示时计算一次

    WIN.addEventListener('pageshow', function(e) {

        if (e.persisted) {

            dbcRefresh()

        }

    }, false);

    setFontSize();

})(window)

 

 

//对H5活动推过页面,宽高比例有所要求,可适当调整

 

function adjustWarp(warpId = '#warp') {

 

    const $win = $(window);

    const height = $win.height();

    let width = $win.width();

 

    // 考虑导航栏情况

    if (width / height < 360 / 600) {

        return;

    }

 

    width = Math.ceil(height * 360 / 640);

 

    $(warpId).css({

        height,

        width,

        postion: 'relative',

        top: 0,

        left: 'auto',

        margin: '0 auto'

    });

 

    // 重新计算 rem

    window.setFontSize(width);

}

2 通过 CSS3媒体查询设置 rem

阅读剩余部分

相关阅读 >>

HTML5响应式banner制作教程

HTML5中的dom编程的实现步骤

HTML5中5大存储方式汇总

h5如何做出碎片式的图片切换

HTML5实现预览本地图片

css中文字相关属性的介绍

HTML5桌面通知之notification api详解

HTML5支持所有音频格式吗

对tap事件和tap点透原理的分析

HTML5学习笔记(一)-认识HTML5

更多相关阅读请进入《HTML5》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...