HTML input 模仿Android原生焦点效果
Android原生输入框的焦点效果一直都让人看起来很舒服,所以今天就用web技术来实现。
先看一下效果图:
原理很简单:
就是在input框上加一层label,然后通过判断input框是否获得焦点,当当前input获取焦点后,给绑定它的label添加上移样式(active),
然后input失去焦点之后,判断该input是否有输入内容,如果没有内容,则溢出相应label的样式(active),如果有,则保留改样式(active)。
相信大家都应该理解了吧!
先说说在HTML页面部分,每个input绑定相应的label:
<div class="login-wrap">
<ul class="login-form login-form-logo">
<li>
<label for="phone">电话</label>
<input id="phone" type="text" class="text clearinput">
</li>
<li>
<label for="password">密码</label>
<input id="password" type="password" class="text">
</li>
<li style="display:-webkit-box;">
<label for="txtVcode">验证码</label>
<input id="txtVcode" type="text" class="text">
<img id="vcode" onclick="login.FreshVcode()" class="images-code" src="../images/code.jpg">
</li>
</ul>
</div>
之后是css部分:当input未获取焦点之前,
.login-wrap {
margin: 0 0.45rem;
}
.login-form {
margin: 0 0 0.65rem;
}
.login-form li {
border-bottom: 1px solid #eee;
height: 1.2rem;
line-height: 1.2rem;
overflow: hidden;
margin: 0.05rem 0 0;
display: -webkit-box;
position: relative;
}
.login-form li label {
color: #bbb;
font-size: 0.45rem;
position: absolute;
top: 65%;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
-webkit-transform-origin: top left;
transform-origin: top left;
-webkit-transition: margin 0.15s ease, padding 0.15s ease, -webkit-transform 0.15s ease;
transition: margin 0.15s ease, padding 0.15s ease, -webkit-transform 0.15s ease;
transition: margin 0.15s ease, padding 0.15s ease, transform 0.15s ease;
transition: margin 0.15s ease, padding 0.15s ease, transform 0.15s ease, -webkit-transform 0.15s ease;
z-index: 1;
}
.login-form li .text {
background: none;
border: none;
height: 1rem;
display: block;
-webkit-box-flex: 1;
font-size: 0.4rem;
color: #333;
margin-top: 0.3rem;
}
当input获取焦点之后,给其父类添加active样式即可
.login-form .active label {
-webkit-transform: translateY(calc(-60% - 0.75em)) scale(0.75);
transform: translateY(calc(-60% - 0.75em)) scale(0.75);
color: #f47983;
}
然后是Js部分(基于jQuery实现),jQuery实现起来比较简单,两行代码就可以解决了,原生JS的话,交给大家去思考实现了。
$('input').focus(function() {
$(this).parent().addClass('active');
});
$('input').blur(function() {
if(!$(this).val()){
$(this).parent().removeClass('active');
}
});