• 移动端页面遇到过的坑


    ps:本文只是针对移动端页面,涉及的浏览器主要是ios和android的默认浏览器

      1:屏幕宽度获取问题:iPhone获取screen宽度都是物理宽度,安卓获取的是像素宽度

        具体:IOS(浏览器全屏的时候): window.screen.width==window.screen.availWidth==document.body.offsetWidth==320(物理宽度)

           三星Galaxy Note 3/2 (全屏状态): window.screen.width==window.screen.availWidth==1080(像素宽度) document.body.offsetWidth==320(物理宽度)

           ps:如果想获取像素宽度(实际能显示多少个像素点),在IOS设备上需要 window.screen.width*window.devicePixelRatio(ios设备retina显示器的话 devicePixelRatio==2);

               而在Galaxy 上是 window.screen.width=document.body.offsetWidth*window.devicePixelRatio(Galaxy 的devicePixelRatio==3);

      2:flex支持问题:目前设备(ios7,Android4.4)都不支持display:flex写法

          解决方案:用 display:-webkit-box;代替display:flex;

          注意事项:1: display:-webkit-box模式下,只能对display:block元素进行弹性布局。所以在子元素为span,a,i元素等情况下需要设置 display:block(注意设置了display:block之后,原本的内联

          元素就变成了块级元素,文字垂直的时候需要有height和line-height支持);

               2:在flex模式下,弹性元素可以设置flex:auto,flex:none等属性,用于控制元素收缩属性,但是在-webkit-box模式下是没有这种设置,只有-webkit-box-flex:{number},只能控制弹性元素

          的空间分配比例,类似的flex:auto可以用-webkit-flex:1来替代,但是不完全等同,而flex:none可以不需要设置,因为默认弹性元素在-webkit-box模式下就不会自动延展。

       3:3D旋转问题:问题出现于Safari(mac和iPhone上都出现这个问题)

           问题详细描述:这个问题比较奇特,出现情况在&:before,element,&:after共存的情况下,例子:

     1     <style type="text/css">
     2         .ThreeDTransforme {
     3             width: 300px;
     4             height: 300px;
     5             position: relative;
     6         }
     7         .ThreeDTransforme:before {
     8             z-index: 1;
     9             left: 10px;
    10             top: 0;
    11             width: 300px;
    12             height: 300px;
    13             content: "";
    14             background-color: #333;
    15             -webkit-transform: perspective(400px) rotateX(20deg);
    16             -webkit-transform-origin: 50% 50% 0;                        
    17             opacity: 0.5;
    18             position: absolute;
    19         }
    20         .innerBox {
    21             width: 100%;
    22             height: 100%;
    23             background-color: blue;
    24             position: relative;
    25             z-index: 2;
    26         }
    27     </style>
    28     <div class="ThreeDTransforme">
    29         <div class="innerBox"></div>
    30     </div>
    View Code

          在chrome下是正常显示的,截图:

              

          但是在Safari内显示截图:

              

          差别在于Safari内会把不同层级的3D旋转放在一个层级解释,导致旋转之后有一部分会显示出来并且盖住我们要看到的元素;

          解决方案:在&(外部层级)上加上overflow:hidden;这样就不会盖住蓝色的一块。但是需要给蓝块加上margin,用于支撑背面旋转元素的显示空间。

          应用场景:实现路灯打光效果,从上到下打工,阴影是梯形的,这样还可以在底部再加一个椭圆,会更加形象;

      

          

  • 相关阅读:
    python操作MySQL数据库
    用python监控您的window服务
    关于position定位中的几个注意点
    filter 滤镜
    git使用心得
    :after,:before,content
    outline和border
    《css揭秘》之背景与边框
    css权威指南学习笔记--第6章
    浅谈setTimeout和setInterval
  • 原文地址:https://www.cnblogs.com/yansi/p/3867691.html
Copyright © 2020-2023  润新知