HTML5 CSS3简单表单特效代码仿谷歌

SongKer 发布时间:2016-03-23 分类:分享 阅读:1619次 2 条评论

谷歌会员登录界面。代码比较简单,主要是CSS3+HTML5元素配合JavaScript完成表单特效,代码如下:

<div class="login">
        @*<i ripple="">
            <svg xmlns="http://www.w3.org/2000/svg" viewbox="0 0 24 24">
    <path fill="#C7C7C7" d="m12,2c-5.52,0-10,4.48-10,10s4.48,10,10,10,10-4.48,10-10-4.48-10-10-10zm1,17h-2v-2h2zm2.07-7.75-0.9,0.92c-0.411277,0.329613-0.918558,0.542566-1.20218,1.03749-0.08045,0.14038-0.189078,0.293598-0.187645,0.470854,0.02236,2.76567,0.03004-0.166108,0.07573,1.85002l-1.80787,0.04803-0.04803-1.0764c-0.02822-0.632307-0.377947-1.42259,1.17-2.83l1.24-1.26c0.37-0.36,0.59-0.86,0.59-1.41,0-1.1-0.9-2-2-2s-2,0.9-2,2h-2c0-2.21,1.79-4,4-4s4,1.79,4,4c0,0.88-0.36,1.68-0.930005,2.25z"></path>
    </svg>
        </i>*@
        <div class="photo">
        </div>
        <span>补充信息</span>
        <form action="" id="login-form">
        <div id="u" class="form-group" errr="">
            <input id="AgentName" spellcheck="false" class="form-control" name="AgentName" type="text"
                size="18" alt="login" required="" />
            <span class="form-highlight"></span><span class="form-bar"></span>
            <label for="AgentName" class="float-label">
                联系姓名</label>
            <erroru>联系姓名不能为空
@*<i>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24h-24z" fill="none"></path>
<path d="M1 21h22l-11-19-11 19zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"></path>
</svg>
</i>*@
    </erroru>
        </div>
        <div id="p" class="form-group" errr="">
            <input id="AgentMobile" class="form-control" spellcheck="false" name="AgentMobile"
                type="text" size="18" alt="login" required="" />
            <span class="form-highlight"></span><span class="form-bar"></span>
            <label for="AgentMobile" class="float-label">
                联系方式</label>
            <errorp>联系方式不能为空
@*<i>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24h-24z" fill="none"></path>
<path d="M1 21h22l-11-19-11 19zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"></path>
</svg>
</i>*@
    </errorp>
        </div>
        <div class="form-group">
            <button id="submit" type="submit" ripple="" style="padding: 8px 20px;">
                登录</button>
        </div>
        </form>
    </div>

配合使用的JavaScript代码:

<script type="text/javascript">
        $(document).ready(function () {
            $(function () {
                var animationLibrary = 'animate';
                $.easing.easeOutQuart = function (x, t, b, c, d) {
                    return -c * ((t = t / d - 1) * t * t * t - 1) + b;
                };
                $('[ripple]:not([disabled],.disabled)').on('mousedown', function (e) {
                    var button = $(this);
                    var touch = $('<touch><touch/>');
                    var size = button.outerWidth() * 1.8;
                    var complete = false;
                    $(document).on('mouseup', function () {
                        var a = { 'opacity': '0' };
                        if (complete === true) {
                            size = size * 1.33;
                            $.extend(a, {
                                'height': size + 'px',
                                'width': size + 'px',
                                'margin-top': -size / 2 + 'px',
                                'margin-left': -size / 2 + 'px'
                            });
                        }
                        touch[animationLibrary](a, {
                            duration: 500,
                            complete: function () {
                                touch.remove();
                            },
                            easing: 'swing'
                        });
                    });
                    touch.addClass('touch').css({
                        'position': 'absolute',
                        'top': e.pageY - button.offset().top + 'px',
                        'left': e.pageX - button.offset().left + 'px',
                        'width': '0',
                        'height': '0'
                    });
                    button.get(0).appendChild(touch.get(0));
                    touch[animationLibrary]({
                        'height': size + 'px',
                        'width': size + 'px',
                        'margin-top': -size / 2 + 'px',
                        'margin-left': -size / 2 + 'px'
                    }, {
                        queue: false,
                        duration: 500,
                        'easing': 'easeOutQuart',
                        'complete': function () {
                            complete = true;
                        }
                    });
                });
            });
            var AgentName = $('#AgentName'), AgentMobile = $('#AgentMobile'), erroru = $('erroru'), errorp = $('errorp'), submit = $('#submit'), udiv = $('#u'), pdiv = $('#p');
            AgentName.blur(function () {
                if (AgentName.val() == '') {
                    udiv.attr('errr', '');
                } else {
                    udiv.removeAttr('errr');
                }
            });
            AgentMobile.blur(function () {
                if (!/^1[0-9]{10}$/.test(AgentMobile.val())) {
                    pdiv.attr('errr', '');
                } else {
                    pdiv.removeAttr('errr');
                }
            });
            submit.on('click', function (event) {
                event.preventDefault();
                if (AgentName.val() == '') {
                    udiv.attr('errr', '');
                } else {
                    udiv.removeAttr('errr');
                }
                if (AgentMobile.val() == '') {
                    pdiv.attr('errr', '');
                } else {
                    pdiv.removeAttr('errr');
                }
            });
        });
    </script>

引用CSS文件:

*,
*:after,
*:before 
{
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    -ms-box-sizing: border-box;
    -o-box-sizing: border-box;
    box-sizing: border-box;
    padding: 0;
    margin: 0;
}
html, body 
{
position: absolute;
height: 100%;
width: 100%;
background: rgb(243, 243, 243);
color: rgba(0,0,0,0.6);
font-family: RobotoDraft,Roboto;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
}
/*body header {
position: relative;
width: 100%;
height: 80px;
box-shadow: 0 2px 5px 0 rgba(0,0,0,0.26);
background: rgb(3, 169, 245);
font-size: 30px;
font-weight: 300;
color: rgb(242, 251, 253);
text-align: center;
line-height: 75px;
}*/
.login {
position: absolute;
padding: 0px;
left: calc(0%);
top: calc(0%);
width: 100%;
max-width:375px;
height: 460px;
border-radius: 3px;
background: white;
/*box-shadow: 0 1px 5px 0 rgba(0,0,0,0.26);*/
overflow: hidden;
}
.login > i {
position: relative;
width: 20px;
height: 20px;
border-radius: 50%;
float: right;
cursor: pointer;
}
.login .photo {
position: relative;
width: 100px;
height: 100px;
margin: 30px 135px;
border-radius: 50%;
background: rgb(223, 223, 223);
border: 13px solid rgb(223, 223, 223);
overflow: hidden !important;
transform: rotate(-1deg);
}
.login .photo:before {
position: absolute;
content: '';
width: 35px;
height: 35px;
top: 0px;
right: 20px;
border-radius: 50%;
background: #aaa;
border: 2px solid #fff;
transform: scale(0);
transition: 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
-webkit-animation: user-head 0.5s 0s forwards;
-moz-animation: user-head 0.5s 0s forwards;
animation: user-head 0.5s 0s forwards;
}
.login .photo:after {
position: absolute;
content: '';
width: 140px;
height: 220px;
top: 38px;
right: -32px;
border-radius: 50%;
background: #aaa;
border: 2px solid #fff;
transform: translateY(36px);
transition: 0.5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
-webkit-animation: user-body 0.5s 0.3s forwards;
-moz-animation: user-body 0.5s 0.3s forwards;
animation: user-body 0.5s 0.3s forwards;
}
.login > span {
display: block;
text-align: center;
margin: -15px 0;
font-size: 15px;
}
form {
position: relative;
width: 350px;
margin: 50px 15px;
}
.form-group {
  position: relative;
  margin-top: 35px;
  margin-bottom: 20px;
}
.form-control {
  display: block;
  height: 36px;
  width: 100%;
  border: none;
  border-radius: 0 !important;
  font-size: 15px;
  font-family: inherit;
  font-weight: 300;
  padding: 0;
  background-color: transparent;
  box-shadow: none;
  border-bottom: 1px solid rgba(117, 117, 117, 0.15);
}
.form-control:focus {
  border-bottom: 2px solid rgb(3, 169, 245);
  outline: none;
  box-shadow: none;
}
.form-highlight {
  position: absolute;
  height: 60%;
  width: 60px;
  top: 25%;
  left: 0;
  pointer-events: none;
  opacity: 0.4;
}
.form-control:focus ~ .form-highlight {
  -webkit-animation: inputHighlighter 0.3s ease;
  -moz-animation: inputHighlighter 0.3s ease;
  animation: inputHighlighter 0.3s ease;
}
.float-label {
  position: absolute;
  left: 0;
  top: 10px;
  font-size: 16px;
  color: #999;
  font-weight: 300;
  transition: 0.2s ease all;
  -moz-transition: 0.2s ease all;
  -webkit-transition: 0.2s ease all;
}
.form-control:focus ~ .float-label, .form-control:valid ~ .float-label {
  top: -15px;
  font-size: 12px;
}
.form-group erroru, .form-group errorp {
position: absolute;
width: 100%;
left: 0;
top: 38px;
font-size: 11px;
color: #d34336;
font-weight: 300;
transition: 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55) all;
-moz-transition: 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55) all;
-webkit-transition: 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55) all;
opacity: 0;
}
.form-group erroru i,.form-group errorp i {
position: absolute;
right: 0;
width: 15px;
height: 15px;
border-radius: 50%;
float: right;
}
.form-group erroru i svg, .form-group errorp i svg {
fill:#d34336;
}
.form-group[errr] .float-label {
color: #d34336 !important;
}
.form-group[errr] .form-control {
border-bottom: 1px solid #d34336 !important;
}
.form-group[errr] .form-control:focus {
border-bottom: 2px solid #d34336 !important;
}
.form-group[errr] erroru, .form-group[errr] errorp  {
opacity: 1;
}
input[type=checkbox]
{
    display: none;
    visibility: hidden;
}
input[type="checkbox"] + label
{
    cursor: pointer;
    font-size: 15px;
    font-weight: 500;
    transition: border-color 0.3s ease-in-out, background-color 0.3s ease-in-out;
}
input[type="checkbox"] + label:before
{
    display: inline-block;
    content: "";
    margin: 0 15px 3px 0px;
    width: 18px;
    height: 18px;
    background-color: #fff;
    border: 2px solid #5a5a5a;
    border-radius: 2px;
    vertical-align: middle;
}
input[type=checkbox]:checked + label:before
{
    background-image: url('data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjIwcHgiIGhlaWdodD0iMTVweCIgdmlld0JveD0iMCAwIDIwIDE1Ij4NCjxwb2x5Z29uIGZpbGw9IiNGRkZGRkYiIHBvaW50cz0iNy4xNDMsMTQuOTM4IDAsNy43OTYgMi4wMjEsNS43NzYgNy4xNDMsMTAuODk4IDE3Ljk3OSwwLjA2MiAyMCwyLjA4MiAiLz4NCjwvc3ZnPg0K');
    background-color: rgb(3, 169, 245);
    border-color: rgb(3, 169, 245);
    background-repeat: no-repeat;
    background-position: 50% 50%;
    -webkit-background-size: 11px auto;
    -moz-background-size: 11px auto;
    -o-background-size: 11px auto;
    background-size: 11px auto;
}
button[type="submit"] {
position: relative;
float: right;
font-family: inherit;
font-weight: 100;
font-size: 15px;
border: 0;
margin: -3px 0px;
padding: 5px 15px;
border-radius: 3px;
cursor: pointer;
background: rgb(3, 169, 245);
color: #fff;
box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);
}
button[type="submit"]:focus {
outline: none;
}
footer {
position: absolute;
bottom: 0;
width: 100%;
height: 30px;
margin-left: -10px;
line-height: 29px;
text-align: center;
cursor: pointer;
border-top: 1px solid rgba(117, 117, 117, 0.15);
}
footer a {
display: block;
text-decoration: none;
font-size: 12px;
color: inherit;
}
footer a:hover {
color: rgba(0,0,0,0.9);
text-decoration: underline;
}
footer a:focus {
outline: none;
}
.copyright {
position: fixed;
width: 100%;
bottom: 5px;
text-align: center;
font-size: 12px;
}
.copyright a {
  text-decoration: none;
  color: rgb(3, 169, 245);
}
.copyright a:hover {
  transition: none;
  border-bottom: 1px solid rgb(3, 169, 245);
}
/* -- highlighter animation --------------------------- */
@-webkit-keyframes inputHighlighter {
  from { background:#5264AE; }
  to { width:0; background:transparent; }
}
@-moz-keyframes inputHighlighter {
  from { background:#5264AE; }
  to { width:0; background:transparent; }
}
@keyframes inputHighlighter {
  from { background:#5264AE; }
  to { width:0; background:transparent; }
}
@-webkit-keyframes user-head {
100% {
-webkit-transform:scale(1);
transform:scale(1);
-moz-transform:scale(1);
} }
@-moz-keyframes user-head {
100% {
-webkit-transform:scale(1);
transform:scale(1);
-moz-transform:scale(1);
} }
@keyframes user-head {
100% {
-webkit-transform:scale(1);
transform:scale(1);
-moz-transform:scale(1);
} }
@-webkit-keyframes user-body {
100% {
-webkit-transform:translateY(2px);
transform:translateY(2px);
-moz-transform:translateY(2px);
} }
@-moz-keyframes user-body {
100% {
-webkit-transform:translateY(2px);
transform:translateY(2px);
-moz-transform:translateY(2px);
} }
@keyframes user-body {
100% {
-webkit-transform:translateY(2px);
transform:translateY(2px);
-moz-transform:translateY(2px);
} }
[ripple] {
  position: relative;
  overflow: hidden;
  -webkit-transition: box-shadow .4s;
  -moz-transition: box-shadow .4s;
  -ms-transition: box-shadow .4s;
  -o-transition: box-shadow .4s;
  transition: box-shadow .4s;
  cursor: inherit;
}
[ripple] .touch {
  background: rgba(255, 255, 255, 0.3);
  pointer-events: none;
  border-radius: 100%;
}


已有2条留言

发表评论:

◎欢迎您的参与讨论。