表单/表格

jQuery+CSS3炫酷表单浮动标签特效

阿里云


这是一款炫酷的 jQuery 和 CSS3 表单浮动标签特效。浮动标签是指输入框中的文字或占位文本在输入框聚焦的时候,以动画的方式浮动到指定的地方。浮动标签特效是一种新颖时尚的动画特效,不仅效果很酷,而且能以明确的方式提示用户该输入框应该填写上面内容,用户体验非常不错。

这个浮动标签特效中共有 4 种不同的动画效果。分别是 Fieldset 样式的浮动标签,使用 font-size 来动画的浮动标签,使用 CSS3 transforms 和 jquery easing 来动画的浮动标签和透明度动画浮动标签。

也想出现在这里?联系我们
创客主机

HTML 结构

这 4 中浮动标签的 HTML 结构都使用<div>嵌套结构,在<div>中放置<input>元素和它的标签<label>元素,外层使用表单 form 包裹起来。

  1. <form class="flp">
  2.   <div>
  3.     <input type="text" id="fname" />
  4.     <label for="fname">First Name</label>
  5.   </div>
  6.   <div>
  7.     <input type="text" id="email" />
  8.     <label for="email">Email</label>
  9.   </div>
  10. </form>

CSS 样式

每一中浮动标签的 CSS 样式各不相同,来看看第一种浮动标签的设计方式。第一种浮动标签方式使用的是 Fieldset,在输入框聚焦的时候,占位文本会浮动到 Filedset 上面。为了美观,整个效果还添加了一层包裹<main>元素以及一个 h2 文本作为大标题。为<main>元素添加一些节本样式:

  1. main {
  2.   width: 500px; margin: 0 auto; padding-bottom: 10px;
  3.   background: white; border-radius: 3px; overflow: hidden;
  4. }
  5. main h2 {
  6.   font-size: 24px; font-weight: normal;
  7.   background: hsl(120, 40%, 95%); color: hsl(120, 40%, 40%);
  8.   text-align: center; 
  9.   padding: 20px 0; margin-bottom: 40px;
  10. }

form 表单中的 div 设置为相对定位。div 中的 input 和 label 元素设置相同的宽度、高度和行高。在高度设置上,为了修补 Firefox 浏览器的一个小 bug,使用一个计算公式来获取高度。height = 24(lineheight) + 10*2(padding) + 2(border)。

  1. .flp input, .flp label {
  2.   width: 400px; display: block;
  3.   font: inherit; font-size: 16px; line-height: 24px;
  4.   /*fixed height for FF line height issue. 
  5.   height = 24(lineheight) + 10*2(padding) + 2(border)*/
  6.   height: 46px;
  7.   border: 1px solid #999;
  8. }

然后 input 和 label 元素分别设置各自的不同样式,label 元素需要动画,设置为绝对定位方式,并且它的左右 padding 要比上下 padding 少 2 个像素,因为后面需要做单个文字的动画,在.ch 中会补足这 2 个像素。最后是实际的动画效果的 CSS 样式。插件初始化的时候,会将所有的字母单独使<span>包裹起来,做成一个一个的单独字母。在输入框聚焦的时候,js 代码会为输入框元素添加.focussed class。实际的字母浮动动画是通过 jquery.easing 来完成的。

  1. /*label styles*/
  2. .ch {
  3.   display: block; float: left;
  4.   position: relative; /*for upward animation*/
  5.   background: white; 
  6. }
  7. .ch:first-child {padding-left: 2px;}
  8. .ch:last-child {padding-right: 2px;}
  9.  
  10. /*active input label*/
  11. .focussed {
  12.   /*when any input is already focussed clicking on it(label) again won't do anything*/
  13.   pointer-events: none;
  14. }

JAVASCRIPT

该浮动标签效果中使用 jquery.easing 来完成实际的动画特效。首先,插件在初始化时将每一个输入框中的文字打散为单个的字母,每一个字母都用元素来包裹起来。接下来当输入框聚焦的时候,使用 jquery.easing 来完成字母的浮动动画特效。

  1. //breakdown the labels into single character spans
  2.   $(".flp label").each(function(){
  3.     var sop = '<span class="ch">'; //span opening
  4.     var scl = '</span>'; //span closing
  5.     //split the label into single letters and inject span tags around them
  6.     $(this).html(sop + $(this).html().split("").join(scl+sop) + scl);
  7.     //to prevent space-only spans from collapsing
  8.     $(".ch:contains(' ')").html(" ");
  9.   })
  10.  
  11.   var d;
  12.   //animation time
  13.   $(".flp input").focus(function(){
  14.     //calculate movement for .ch = half of input height
  15.     var tm = $(this).outerHeight()/2 *-1 + "px";
  16.     //label = next sibling of input
  17.     //to prevent multiple animation trigger by mistake we will use .stop() before animating any character and clear any animation queued by .delay()
  18.     $(this).next().addClass("focussed").children().stop(true).each(function(i){
  19.       d = i*50;//delay
  20.       $(this).delay(d).animate({top: tm}, 200, 'easeOutBack');
  21.     })
  22.   })
  23.   $(".flp input").blur(function(){
  24.     //animate the label down if content of the input is empty
  25.     if($(this).val() == "")
  26.     {
  27.       $(this).next().removeClass("focussed").children().stop(true).each(function(i){
  28.         d = i*50;
  29.         $(this).delay(d).animate({top: 0}, 500, 'easeInOutBack');
  30.       })
  31.     }
  32.   })

jQuery+CSS3 炫酷表单浮动标签特效

已有 551 人购买
查看演示升级 VIP立刻购买

演示地址 下载地址
收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!