zoukankan      html  css  js  c++  java
  • Rem & Viewport

    Rem布局

    rem就是给根元素设置一个基准值 然后其他元素都以这个基准值作为单位 那么就可以在不同的手机上做出相同比例的元素了 事实上和百分比是同样的道理

    网易和淘宝的rem

    参考
    http://www.codeceo.com/article/font-size-web-design.html

    网易新闻的做法

    deviceWidth = 320,font-size = 320 / 6.4 = 50px
    deviceWidth = 375,font-size = 375 / 6.4 = 58.59375px
    deviceWidth = 414,font-size = 414 / 6.4 = 64.6875px
    deviceWidth = 500,font-size = 500 / 6.4 = 78.125px
    
    //deviceWith实际上就是clientWidth
    document.documentElement.style.fontSize = document.documentElement.clientWidth / 6.4 + 'px';
    

    对于width是320的屏幕 默认1rem是50px
    为什么会是6.4这个值呢? 网易邮箱的设计稿x轴是640宽度的
    所以设计稿中210px 对应的就是2.1rem

    淘宝的做法

    var scale = 1 / devicePixelRatio;
    document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
    

    淘宝的viewport是根据像素密度来的 虽然4S的viewport是320 但是4s的dpr是2 所以得到的页面宽度是640

    淘宝布局的第二个要点,就是html元素的font-size的计算公式,font-size = deviceWidth / 10 iphone6的横轴为750 那么1rem = 75
    故150px 就是2rem

    自己实现最简单的方式

    参考
    http://www.iinterest.net/2015/07/22/css3-rem-layout/

    我这里设置的fontsize是屏幕宽度的20分之1 也就是一个屏幕(不论viewport如何)该摆下20个大小为1rem的字(汉字)

    setRootFont();
    function setRootFont(){
    
    var clientWidth = document.documentElement.clientWidth;
    var fontSize = (clientWidth / 20).toFixed(2);
    document.documentElement.style.fontSize = fontSize + 'px';
    }
    //或者用 orientationchange 事件
    window.addEventListener('resize', function(){
        setRootFont();
    }, false);
    
    

    注意别忘了用html,body{margin:0} 去掉默认间隔

    和viewport结合

    (function(){
        var doc = window.document;
    var docEl = doc.documentElement;
    var metaEl = doc.querySelector('meta[name="viewport"]');
    var flexibleEl = doc.querySelector('meta[name="flexible"]');
    var dpr = 0;
    var scale = 0;
    var tid;
    
    if (metaEl) {
        console.warn('将根据已有的meta标签来设置缩放比例');
    }else{
        scale = 1 / window.devicePixelRatio;
        metaEl = doc.createElement('meta');
        metaEl.setAttribute('name', 'viewport');
        metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
        if (docEl.firstElementChild) {
            docEl.firstElementChild.appendChild(metaEl);
        } else {
            var wrap = doc.createElement('div');
            wrap.appendChild(metaEl);
            doc.write(wrap.innerHTML);
        }
    }
    setRootFont();
    
    })();
    
    window.addEventListener('orientationchange', function() {
        setRootFont();
    }, false);
    
    
    function setRootFont() {
        var clientWidth = document.documentElement.clientWidth;
        var fontSize = (clientWidth / 20).toFixed(2);
        document.documentElement.style.fontSize = fontSize + 'px';
    }
    
    
  • 相关阅读:
    小批量随机梯度下降
    查询文档
    自动求梯度
    数据操作
    Hadoop 入门
    Matplotlib 二维图像绘制方法
    Pandas 数据处理基础
    NumPy 数值计算基础课程
    关于 Shell 脚本
    语法分析
  • 原文地址:https://www.cnblogs.com/cart55free99/p/4854473.html
Copyright © 2011-2022 走看看