兼容方式(仅适用于移动端,pc端对ie浏览器兼容不友好)
IE:不管该行有没有文字,光标高度与font-size大小一致
FF:该行没有文字时,光标大小与input的 height 大小一致;该行有文字时,光标大小与font-size大小一致
chrome:有2种情况,①设置了line-height 该行没有文字时,光标大小与input的 line-height 大小一致; 该行有文字时,光标大小从input顶部到文字底部
②没有设置line-height 光标大小与font-size一样
所以,input在使用的时候,最好不要设line-height, 可以设定一个较小的height, 然后用 padding 来撑开,这样基本上可以解决所有浏览器的问题
input{
width: 220px;
height: 10px; //给一个基础的height即可
padding: 15px 0px; //设置padding撑开
font-size: 12px;
border:1px solid #dcdcdc;
border-radius: 4px;
}
注意事项
1--在iOS端,Input框上部会有阴影,不美观
添加代码 -webkit-appearance: none; 即可
2--Input字数超出会隐藏超出部分;textarea则会以滚动条展示超出部分。
则若需填入的字数较多,建议使用textarea,如下
<textarea type="text" v-model="name" rows="2" placeholder="姓名" />
textarea{
-webkit-appearance: none; //去除ios端文本框上部阴影
width:100%;
padding: 10px;
box-sizing: border-box;
border:1px solid #dcdcdc;
border-radius: 4px;
font-size: 14px;
resize: none; //取消文本域拖动属性
}
3--在iOS端,focus()事件不能延时生效,建议使用$nextTick
let times=setTimeout(()=>{
document.getElementById("inputElem").focus() //不生效
clearTimeout(times)
},200)
this.$nextTick(()=>{
document.getElementById("inputElem").focus() //生效
})
在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放进Vue.nextTick()的回调函数中