移动端页面遇到过的坑

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,用于支撑背面旋转元素的显示空间。

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

  

      

原文地址:https://www.cnblogs.com/yansi/p/3867691.html