本文原载于 SegmentFault 社区
专栏:不为人知的前端技巧
<input type="tel">
<input pattern="\d*">
安卓
跟
IOS
的表现形式应该不一样,大家可以自己试试。当运用了正则
pattern
后,就不用关注
input
的类型了😂
<a href="tel:10086">打电话给: 10086a>
<a href="sms:10086">发短信给: 10086a>
<a href="mailto:[email protected]">发邮件给:[email protected]a>
<input type="file" accept="image/*">
<input type="file" accept="video/*">
<input type="file" multiple>
<a href="weixin://">打开微信a>
<a href="alipays://">打开支付宝a>
<a href="alipays://platformapi/startapp?saId=10000007">打开支付宝的扫一扫功能a>
<a href="alipays://platformapi/startapp?appId=60000002">打开支付宝的蚂蚁森林a>
是一种协议,一般用来访问APP
或者APP
中的某个功能/页面(如唤醒APP
后打开指定页面或者使用某些功能)😒
行为(应用的某个功能/页面)
|
scheme://[path][?query]
| |
应用标识 功能需要的参数
一般是由
APP
开发者自己定义,比如规定一些
参数
或者
路径
让其他开发者来访问,就像上面的例子🍤
-
唤醒
APP
的条件是你的手机已经安装了该
APP
-
某些浏览器会禁用此协议,比如微信内部浏览器(除非开了白名单)
<meta
name="format-detection" content="telephone=no">
<meta name="format-detection" content="email=no">
当页面上的内容包含了
手机号/邮箱
等,会自动转换成可点击的链接😁
一般出现在
IOS设备中的微信内部浏览器
,出现的条件为:
所以一般
input
在页面上方或者顶部都不会出现无法回弹🤣
解决办法为,在聚焦时,获取当前滚动条高度,然后失焦时,赋值之前获取的高度:
<template>
<input type="text" @focus="focus" @blur="blur">
template>
<script>
export default {
data() {
return {
scrollTop: 0
}
},
methods: {
focus() {
this.scrollTop = document.scrollingElement.scrollTop;
},
blur() {
document.scrollingElement.scrollTo(0, this.scrollTop);
}
}
}
script>
以上行为可以总结成这几个
(每个手机以及浏览器的表现形式不一样)
:
长按图片保存
、
长按选择文字
、
长按链接/手机号/邮箱时呼出菜单
。
想要禁止这些浏览器的默认行为,可以使用以下
CSS
:
img {
-webkit-touch-callout: none;
pointer-events: none;
}
div {
-webkit-user-select: none;
}
div {
-webkit-touch-callout: none;
}
一般出现在
IOS
设备中,自定义盒子使用了
overflow: auto || scroll
后出现的情况。
div {
-webkit-overflow-scrolling: touch;
}
具体出现的情况不明😒,有时候有有时候没有,欢迎指出。
* {
-webkit-text-size-adjust: 100%;
}
大家都知道,
rem
的值是根据
根元素的字体大小
相对计算的,但是我们每个设备的大小不一样,所以
根元素的字体大小
要动态设置😂
html {
font-size: calc(100vw / 3.75);
}
body {
font-size: .14rem;
}
像我一般的话,直接搞
lib-flexible
、
postcss-pxtorem
就完事啦!