• css中的各种单位简述以及ios10下safari禁止缩放的问题


    px:绝对单位,页面按精确像素展示

    em:相对单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算(浏览器默认字体是16px),整个页面内1em不是一个固定的值。

    rem:相对单位,可理解为”root em”, 相对根节点html的字体大小来计算,css3新加属性,chrome/firefox/IE9+支持。

    (另外需注意chrome强制最小字体为12px,即使设置成 10px 最终都会显示成 12px,当把html的font-size设置成10px,子节点rem的计算还是以12px为基准,所以网上很多文章提到的将html的font-size设为10方便计算不是那么可取)。

    html{font-size: 62.5%}  /* 16px * 62.5% = 10px */
    
    body{font-size: 1.4rem;} /* 1.4rem * 12px = 16.8px */

    本意设置body的字体大小为14px,可是在chrom中实际上却是16.8px,就是因为10px小于12px,所以采取了12px。

    rem与em的区别:

    • rem是相对于根元素(html)的字体大小,而em是相对于其父元素的字体大小

    • em最多取到小数点的后三位

    <style>
      html{ font-size: 20px; }
      body{ 
        font-size: 1.4rem;  /* 1rem = 28px */
        padding: 0.7rem;  /* 0.7rem = 14px */
      } 
      div{
        padding: 1em;  /* 1em = 28px */
      }
      span{
        font-size:1rem;  /* 1rem = 20px */
        padding: 0.9em;  /* 1em = 18px */
      }
    </style>
    
    <html>
      <body>
        <div>   
          <span></span>  
        </div>
      </body>
    </html>

    在上面的代码中,我们将根元素(html)的字体大小font-size设为20px,body的字体大小设为1.4rem,那么转换为像素就是28px(20 × 1.4),接着我们又将div的padding设为1em,由于其基于父元素,所以转换为像素是28px ( 28 × 1),然后我们又将span的字体大小设为1rem,也就是20px,由于其自身设置了字体大小,所以padding设为1em,转换为像素是20px(20 × 1),而不是乘以其父元素的字体大小28px(28 × 1)。

    注意:当元素自身设置了字体大小,那么如果它的其他css属性也使用em单位,则会基于它自身的字体大小。(就像上面例子的span的padding一样)

    注:rem与em多在移动端中使用,一般需设置meta缩放比1:1

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

    但在IOS10 safari 下官方规定了不能禁止用户缩放,就是说上述标签是无效的。

    暂未找到正确的解决之道,本人采用监听事件来阻止默认行为,有一定作用,但并不能完全解决。

     window.onload = function () {
            document.addEventListener('gesturestart', function (e) {
                e.preventDefault();
            });
            document.addEventListener('dblclick', function (e) {
                e.preventDefault();
            });
            document.addEventListener('touchstart', function (event) {
                if (event.touches.length > 1) {
                    event.preventDefault();
                }
            });
            var lastTouchEnd = 0;
            document.addEventListener('touchend', function (event) {
                var now = (new Date()).getTime();
                if (now - lastTouchEnd <= 300) {
                    event.preventDefault();
                }
                lastTouchEnd = now;
            }, false);
        };

    vw:viewpoint width,视窗宽度,1vw等于视窗宽度的1%。假如浏览器的宽度为200px,那么1vw就等于2px(200px/100)。
    vh:viewpoint height,视窗高度,1vh等于视窗高度的1%。假如浏览器的高度为500px,那么1vh就等于5px(500px/100)。
    vmin:vw和vh中较小的那个。
    vmax:vw和vh中较大的那个。

    vw, vh, vmin, vmax:IE9+局部支持,chrome/firefox/safari/opera支持,ios safari 8+支持,android browser4.4+支持,chrome for android39支持

    其它的单位还有:
    %:百分比
    in:寸
    cm:厘米
    mm:毫米
    pt:point,大约1/72寸

    pc:pica,大约6pt,1/6寸

    ex:取当前作用效果的字体的x的高度,在无法确定x高度的情况下以0.5em计算(IE11及以下均不支持,firefox/chrome/safari/opera/ios safari/android browser4.4+等均需属性加么有前缀)

    ch:以节点所使用字体中的“0”字符为基准,找不到时为0.5em(ie10+,chrome31+,safari7.1+,opera26+,ios safari 7.1+,android browser4.4+支持)

  • 相关阅读:
    Spring事务配置的五种方式(转)
    struts.properties配置详解(转)
    Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法(转)
    php的ob函数实现页面静态化
    冒泡排序法原理讲解及PHP代码示例
    Linux Centos下编译安装Redis
    PHP判断是手机端还是PC端
    windows 下 Symfony的下载与安装
    JS在线生成二维码
    关于微信分享到朋友圈(Thinkphp-tp3.2框架下实现)
  • 原文地址:https://www.cnblogs.com/peakleo/p/6203424.html
Copyright © 2020-2023  润新知