2019-01-14移动端、rem

2019-01-14  本文已影响0人  陳先生_2211

2019.01.14移动端概念

一、移动端的写法(百分比写法)

    兼容性较强:initial-scale=1(初始值1),minimum-scale=1(用户的最小缩放值),maximum-scale=1(用户的最大缩放值)
    <meta name="viewport" content = "width=device-width,initial-scale=1,minimum-scale=1,maxmum-scale=1,user-scalable=no"/>
    屏幕自适应(百分比写法):device-width
    <meta name="viewport" content = "width=device-width,initial-scale=1,user-scalable=no"/>
定宽的写法:
    viewport width=设计稿宽(固定宽度),不设置缩放相关属性,移动端浏览器会自动缩放页面以适配屏幕
    (initial-scale=1(初始值1),minimum-scale=1(用户的最小缩放值),maximum-scale=1(用户的最大缩放值))

二、长度单位(css像素与物理像素不一样)

绝对单位(无论在哪里测,表示长度固定不变):m/cm/mm/inch(英寸)/尺    
                              1inch=2.54cm
相对单位:px
屏幕尺寸:对角线长度(单位inch)
            ppi(屏幕像素密度):是px per inch 的缩写
            屏幕分辨率,理解了分辨率就能知道px为什么是相对单位
            css像素:逻辑像素,就是你在写css样式时用的像素
            物理像素:设备像素,屏幕这个硬件本身能够显示出色彩的最小单位
                        拿retina(2k)屏做案例,它将css中1*1px大小的一个div用了四个像素来显示,这样使得屏幕显示的图片更加细腻
            dpr:设备像素比(device pixel ratio)
viewport概念首先提出的是苹果公司,应用在Safari浏览器,解决的问题:在移动端页面能够正常显示pc页面
        viewport:视窗/视口,浏览器能够用来显示页面的尺寸大小
                    大部分移动端默认的视窗宽度是980px,也有一千多的
<script type="text/javascript">
            console.log(window.devicePixelRatio);
            //设备比与css像素比
            console.log(document.querySelector(".baba").clientWidth);
            //选择器:querySelector
</script>

三、rem布局原理

1.rem与em(对比)
    rem是什么?单位
        rem: 1rem = 一倍html的fontsize大小
        em:1em = 一倍的爸爸或者自己的fontsize大小
2.rem如何实现
    0)设置meta标签。
    1)基准:fontsize(一般设为40px,自己定的)
    2)按基准fontsize和设计图的宽高计算出以rem为单位的宽高。比如div在设计图的宽是180px,转化成rem就是180/fontsize(40)
    3)根据设计图和基准fontsize算出目标手机下应有的fontsize。比如目标手机为640,那么要改变的fontsize就是:var fontSize = viewPotWidth*40/640; 
3.使用js动态改变fontsize的值
    使用js动态改变fontsize的值:
    <script type="text/javascript">
            console.log("手机viewportwidth",document.documentElement.clientWidth);
            //获取viewport宽
            var viewPotWidth = document.documentElement.clientWidth;
            //动态计算出html应该设置的fontsize大小
            //3. 根据设计图和基本fontsize算出目标手机下应有的fontsize
            //640:基准:设计图总宽
            var fontSize = viewPotWidth*40/640; 
            console.log(fontSize);
            //把计算出来的fontsize真正地赋值给html
            document.documentElement.style.fontSize = fontSize + 'px';
        </script>

以后用这个js版本!直接拷贝即可

    <script>
        /*动态改变根元素字体大小*/
                function recalc() {
                    var clientWidth = document.documentElement.clientWidth;
                    if(!clientWidth) return;
                    document.documentElement.style.fontSize = 100 * (clientWidth / 640) + 'px';
                }
                
                function initRecalc() {
                    recalc();
                    var resizeEvt = 'osrientationchange' in window ? 'orientationchange' : 'resize';
                    if(!document.addEventListener) return;
                    window.addEventListener(resizeEvt, recalc, false);//添加监听事件
                    document.addEventListener('DOMContentLoaded', recalc, false);
                }
                initRecalc();
    </script>

注意:一般情况下不要给正文的字体大小使用rem为单位,因为动态计算rem不能保证最后转化px单位时是一个整数,所以在pc端下查看时有可能会有模糊边缘

直接用px,因为相差不大

四、使用scss让布局更简便(结合js获取用户手机宽度,动态改变fontsize实现)

    @charset 'utf-8';
    $fontSize:40;
    @function r($p){
        @return $p/$fontSize*1rem;
    }
    //计算vm 百分比
    //@function v($p){
    //   @return $p/设计图总宽*100vm;
    //}
    
    html{
        font-size: $fontSize*1px;
    }
    body{
        font-size: 16px;
    }
    .test{
        width: r(180);
        height: r(100);
        background-color: skyblue;
}

五、保证宽高比的两种方法

    <style type="text/css">
            .test{
                width: 30%;
                height: 0;
                padding-top: 30%;
                background-color: #0A6F98;
                position: relative;
                overflow: hidden;
            }
            .test img{
                position: absolute;
                width: 100%;
                left: 50%;
                top: 50%;
                transform: translate(-50%,-50%);
            }
            .test2{
                width: 300px;
                height: 300px;
                background-color: #0000FF;
                overflow: hidden;
                position: relative;
                
            }
            .test2 img{
                /*width: 100%;*/
                position: absolute;
                left: -9999px;
                top: -9999px;
                right: -9999px;
                bottom:  -9999px;
                margin: auto;
                overflow: hidden;
            }
        </style>
        <div class="test">
            <img src="../2018.12.27 HTML第一节课/img/map.jpg"/>
        </div>
        <div class="test2">
            <img src="../2018.12.27 HTML第一节课/img/map.jpg"/>
        </div>

六、vh vw单位的使用(兼容性较差,类似百分比,不能精细调像素)

vw:viewport宽度上的百分比,不是屏幕。
vh:viewport高度上的百分比,不是屏幕。
上一篇下一篇

猜你喜欢

热点阅读