返回

再也不会遇到兼容性问题:IOS兼容问题大揭秘,告别iPhone6的时代🙏

前端

记一次头疼的IOS兼容,愿世界再无iPhone6🙏

最近在写一个项目,碰到的问题还挺多,不难但都挺琐碎的,其中IOS机型兼容是真的让人头疼。

1: IOS transform:rotate失效

这个问题是最让我让人头疼啊!!!!!因为要实现一个这样的页面:

就是需要这样一个旋转动画,实现起来很简单:

div{
  width:100px;
  height:100px;
  background-color: red;
  transform:rotate(45deg);
}

但是IOS 8的safari中是无效的,如图:

只能看到一个竖直的红色块。

原因是IOS 8的safari中,transform:rotate这个属性的默认值为0,也就是无论你怎么设置rotate的值,它都以0为基准进行旋转。

解决方法:

div{
  width:100px;
  height:100px;
  background-color: red;
  transform:rotate(45deg);
  transform-origin: 50% 50%;
}

transform-origin属性指定了旋转的原点,默认是(0,0),也就是左上角。我们把它设置成50% 50%,也就是中心点,这样就可以让它围绕中心旋转了。

但是,这个方法在IOS 9的safari中又失效了。。。

经过一番折腾,终于找到了一个解决办法:

div{
  width:100px;
  height:100px;
  background-color: red;
  -webkit-transform:rotate(45deg);
  transform:rotate(45deg);
  transform-origin: 50% 50%;
}

同时使用了-webkit-transform和transform两个属性,这样就能兼容IOS 8和IOS 9了。

2:IOS绝对定位失效

这个问题是我在写一个类似于这样的页面时遇到的:

其中有一个绝对定位的按钮,但是IOS 8的safari中却无法正常显示:

原因是IOS 8的safari中,绝对定位的元素会受到父元素的transform属性的影响。

解决方法:

给父元素添加一个transform:translateZ(0)属性,这样就可以把父元素从3D空间中移出来,从而不受transform:rotate属性的影响了。

.parent{
  transform:translateZ(0);
}

.button{
  position:absolute;
  left:0;
  top:0;
}

3:IOS 点击穿透问题

这个问题是我在写一个类似于这样的页面时遇到的:

其中有一个按钮,但是IOS 8的safari中,点击按钮时会穿透到下面的元素:

原因是IOS 8的safari中,对于绝对定位的元素,默认情况下是不会触发click事件的。

解决方法:

给绝对定位的元素添加一个pointer-events:auto属性,这样就可以让它触发click事件了。

.button{
  position:absolute;
  left:0;
  top:0;
  pointer-events:auto;
}

4:IOS input输入框光标问题

这个问题是我在写一个类似于这样的页面时遇到的:

其中有一个输入框,但是IOS 8的safari中,输入框的光标无法正常显示:

原因是IOS 8的safari中,输入框的光标默认是白色的,而输入框的背景色也是白色的,所以导致光标无法显示。

解决方法:

给输入框添加一个color属性,这样就可以改变光标的颜色了。

input{
  color:black;
}

5:IOS video标签全屏问题

这个问题是我在写一个类似于这样的页面时遇到的:

其中有一个视频标签,但是IOS 8的safari中,点击全屏按钮后,视频无法全屏显示:

原因是IOS 8的safari中,video标签的全屏功能需要手动触发。

解决方法:

给video标签添加一个webkit-playsinline属性,这样就可以让视频在页面中直接播放,而不必全屏。然后,再给video标签添加一个onclick事件,在事件中手动触发全屏功能。

video{
  webkit-playsinline;
}

video.onclick=function(){
  this.webkitEnterFullscreen();
}

以上是我在IOS开发中遇到的比较常见的兼容性问题,当然还有很多其他问题,这里就不一一列举了。希望这篇文章能对大家有所帮助,让大家少走一些弯路。

最后,再补充一句:IOS兼容性问题真的是很让人头疼,希望IOS 10能彻底解决这些问题,让IOS开发更美好!