【CSDN编译】导读:有开发者表示,HTML5将给个人开发者带来更多机遇。下面的稿件详细描述了一个唯美的动画效果,它实现了在同一个页面中进行登录表单和注册表单的转换。这些效果,完全由HTML5和CSS3实现。文章后面附上了三种不同风格的显示转换效果、以及源码下载。既可为网页瘦身,又可实现漂亮的网页效果,快快收藏吧。

这篇稿件将描述如何在HTML5中,使用CSS3的目标伪类“:target”来创建注册和登录两个表单、并实现它们在同一个页面中的显示转换。此演示目的是向用户展示从登录表单点击标注有“Join us”的按钮链接到注册表单的动画效果。我们将在文章末尾附上本实例的源码下载地址。

点击右下方Join us按钮,登录表单隐藏,注册表单显现

请注意,此实例只用于演示目的,它只能在支持“:target”伪类的浏览器中正常显示出来。

HTML部分

在HTML中定义有两个表单,其中一个表单已用CSS隐藏使之不可见。来看看代码:

  1. <div id="container_demo" >
  2. <!-- hidden anchor to stop jump http://www.css3create.com/Astuce-Empecher-le-scroll-avec-l-utilisation-de-target#wrap4  -->
  3. <a class="hiddenanchor" id="toregister"></a>
  4. <a class="hiddenanchor" id="tologin"></a>
  5. <div id="wrapper">
  6. <div id="login" class="animate form">
  7. <form  action="mysuperscript.php" autocomplete="on">
  8. <h1>Log in</h1>
  9. <p>
  10. <label for="username" class="uname" data-icon="u" > Your email or username </label>
  11. <input id="username" name="username" required="required" type="text" placeholder="myusername or mymail@mail.com"/>
  12. </p>
  13. <p>
  14. <label for="password" class="youpasswd" data-icon="p"> Your password </label>
  15. <input id="password" name="password" required="required" type="password" placeholder="eg. X8df!90EO" />
  16. </p>
  17. <p class="keeplogin">
  18. <input type="checkbox" name="loginkeeping" id="loginkeeping" value="loginkeeping" />
  19. <label for="loginkeeping">Keep me logged in</label>
  20. </p>
  21. <p class="login button">
  22. <input type="submit" value="Login" />
  23. </p>
  24. <p class="change_link">
  25. Not a member yet ?
  26. <a href="#toregister" class="to_register">Join us</a>
  27. </p>
  28. </form>
  29. </div>
  30. <div id="register" class="animate form">
  31. <form  action="mysuperscript.php" autocomplete="on">
  32. <h1> Sign up </h1>
  33. <p>
  34. <label for="usernamesignup" class="uname" data-icon="u">Your username</label>
  35. <input id="usernamesignup" name="usernamesignup" required="required" type="text" placeholder="mysuperusername690" />
  36. </p>
  37. <p>
  38. <label for="emailsignup" class="youmail" data-icon="e" > Your email</label>
  39. <input id="emailsignup" name="emailsignup" required="required" type="email" placeholder="mysupermail@mail.com"/>
  40. </p>
  41. <p>
  42. <label for="passwordsignup" class="youpasswd" data-icon="p">Your password </label>
  43. <input id="passwordsignup" name="passwordsignup" required="required" type="password" placeholder="eg. X8df!90EO"/>
  44. </p>
  45. <p>
  46. <label for="passwordsignup_confirm" class="youpasswd" data-icon="p">Please confirm your password </label>
  47. <input id="passwordsignup_confirm" name="passwordsignup_confirm" required="required" type="password" placeholder="eg. X8df!90EO"/>
  48. </p>
  49. <p class="signin button">
  50. <input type="submit" value="Sign up"/>
  51. </p>
  52. <p class="change_link">
  53. Already a member ?
  54. <a href="#tologin" class="to_register"> Go and log in </a>
  55. </p>
  56. </form>
  57. </div>
  58. </div>
  59. </div>

可以看到在上面的代码中,使用了一些HTML5不错的新功能。比如在input type方面,实现密码自动隐藏用户键入点替换(当然这取决于浏览器是否支持)。用浏览器检查输入类型的电子邮件是否是正确格式等。

有两个环节要记住。你可能已经注意到表单项部的两个<a href>链接。当我们点击并触发目标伪类时,我们就能通过“锚”标记(HTML中一种跳转定位方式,一般用于长网页)在原网页中跳到合适的位置,而不用另打开一个新网页。第二个动作与所用图标、字体相关。我们为显示的图标使用一个数据属性。在HTML中通过设置“icon_character”,就可以选择一个CSS来控制所有的图标风格样式。(这里对于锚标记的使用可能会有些糊涂,但看到后面就会明白了。)

CSS部分

这里将会出现一些CSS3的技巧代码,请注意,可能有的浏览器目前还不支持CSS3而无法正常显示。

两个CSS定义。(后面会说明为什么要定义两个CSS的原因。)

首先,为需要显示的区域定义一个外观。

  1. #subscribe,
  2. #login{
  3. position: absolute;
  4. top: 0px;
  5. width: 88%;
  6. padding: 18px 6% 60px 6%;
  7. margin: 0 0 35px 0;
  8. background: rgb(247, 247, 247);
  9. border: 1px solid rgba(147, 184, 189,0.8);
  10. box-shadow:
  11. 0pt 2px 5px rgba(105, 108, 109,  0.7),
  12. 0px 0px 8px 5px rgba(208, 223, 226, 0.4) inset;
  13. border-radius: 5px;
  14. }
  15. #login{
  16. z-index: 22;
  17. }

这里定义了投影,以及如文章开始的那张图上所示的蓝色辉光。并赋值z-index为22。

下面是关于背景图片样式的代码:

  1. /**** general text styling ****/
  2. #wrapper h1{
  3. font-size: 48px;
  4. color: rgb(6, 106, 117);
  5. padding: 2px 0 10px 0;
  6. font-family: 'FranchiseRegular','Arial Narrow',Arial,sans-serif;
  7. font-weight: bold;
  8. text-align: center;
  9. padding-bottom: 30px;
  10. }
  11. /** For the moment only webkit supports the background-clip:text; */
  12. #wrapper h1{
  13. background:
  14. -webkit-repeating-linear-gradient(-45deg,
  15. rgb(18, 83, 93) ,
  16. rgb(18, 83, 93) 20px,
  17. rgb(64, 111, 118) 20px,
  18. rgb(64, 111, 118) 40px,
  19. rgb(18, 83, 93) 40px);
  20. -webkit-text-fill-color: transparent;
  21. -webkit-background-clip: text;
  22. }
  23. #wrapper h1:after{
  24. content:' ';
  25. display:block;
  26. width:100%;
  27. height:2px;
  28. margin-top:10px;
  29. background:
  30. linear-gradient(left,
  31. rgba(147,184,189,0) 0%,
  32. rgba(147,184,189,0.8) 20%,
  33. rgba(147,184,189,1) 53%,
  34. rgba(147,184,189,0.8) 79%,
  35. rgba(147,184,189,0) 100%);
  36. }

注意,由于目前只有WebKit浏览器支持background-clip: text,为了在适应不同浏览器,还要创建一个H1标题样式:带条纹背景的文本样式。由于background-clip: text只适用于WebKit,所以这里用WebKit作前缀,这也是为什么要把CSS分成两部分,并只使用来定义的原因。用WebKit作前缀是不太好的做法,仅用于这种演示示例。现在,WebKit的文本颜色透明度属性可以派上用场了:它可以实现透明效果的背景样式。

表单上,标题下方那条水平线的样式也由一个after伪类控制。这里使用了一个2px的高度和两边淡出的效果。

现在,接着进行样式定义。

  1. /**** advanced input styling ****/
  2. /* placeholder */
  3. ::-webkit-input-placeholder  {
  4. color: rgb(190, 188, 188);
  5. font-style: italic;
  6. }
  7. input:-moz-placeholder,
  8. textarea:-moz-placeholder{
  9. color: rgb(190, 188, 188);
  10. font-style: italic;
  11. }
  12. input {
  13. outline: none;
  14. }

为输入样式定义outline属性,以便用户能迅速输入正确信息。如果你不打算定义outline,那也应该使用 :active 和 :focus来定义这些输入样式的状态。

  1. /* all the input except submit and checkbox */
  2. #wrapper input:not([type="checkbox"]){
  3. width: 92%;
  4. margin-top: 4px;
  5. padding: 10px 5px 10px 32px;
  6. border: 1px solid rgb(178, 178, 178);
  7. box-sizing : content-box;
  8. border-radius: 3px;
  9. box-shadow: 0px 1px 4px 0px rgba(168, 168, 168, 0.6) inset;
  10. transition: all 0.2s linear;
  11. }
  12. #wrapper input:not([type="checkbox"]):active,
  13. #wrapper input:not([type="checkbox"]):focus{
  14. border: 1px solid rgba(91, 90, 90, 0.7);
  15. background: rgba(238, 236, 240, 0.2);
  16. box-shadow: 0px 1px 4px 0px rgba(168, 168, 168, 0.9) inset;
  17. }

这里我们并不全是用伪类去定义输入样式,除了checkbox。因为删除了outline属性,所以这里使用了 a :focus 和:active 状态定义。自从不再为输入样式使用:before 和 :after伪类后,就使用图标的label标签进行设置。这里使用了fontomas库中的一些漂亮图标。还记得data-icon 的属性吗?要把信息传递到正确的地方。这里使用data-icon=’u’ 来表示用户, ‘e’ 表示email, ‘p’ 表示密码。一旦确定的信件,下载字体,用fontsquirrel字体引擎将这些信息转换成@font-face兼容格式。

  1. @font-face {
  2. font-family: 'FontomasCustomRegular';
  3. src: url('fonts/fontomas-webfont.eot');
  4. src: url('fonts/fontomas-webfont.eot?#iefix') format('embedded-opentype'),
  5. url('fonts/fontomas-webfont.woff') format('woff'),
  6. url('fonts/fontomas-webfont.ttf') format('truetype'),
  7. url('fonts/fontomas-webfont.svg#FontomasCustomRegular') format('svg');
  8. font-weight: normal;
  9. font-style: normal;
  10. }
  11. /** the magic icon trick ! **/
  12. [data-icon]:after {
  13. content: attr(data-icon);
  14. font-family: 'FontomasCustomRegular';
  15. color: rgb(106, 159, 171);
  16. position: absolute;
  17. left: 10px;
  18. top: 35px;
  19. width: 30px;
  20. }

不用为每个图标指定一个类,而是使用content: attr(data-icon) 来检查data-icon属性信息。所以只需要定义字体、颜色和位置。

现在,为两个表单中的提交按钮定义样式。

  1. /*styling both submit buttons */
  2. #wrapper p.button input{
  3. width: 30%;
  4. cursor: pointer;
  5. background: rgb(61, 157, 179);
  6. padding: 8px 5px;
  7. font-family: 'BebasNeueRegular','Arial Narrow',Arial,sans-serif;
  8. color: #fff;
  9. font-size: 24px;
  10. border: 1px solid rgb(28, 108, 122);
  11. margin-bottom: 10px;
  12. text-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
  13. border-radius: 3px;
  14. box-shadow:
  15. 0px 1px 6px 4px rgba(0, 0, 0, 0.07) inset,
  16. 0px 0px 0px 3px rgb(254, 254, 254),
  17. 0px 5px 3px 3px rgb(210, 210, 210);
  18. transition: all 0.2s linear;
  19. }
  20. #wrapper p.button input:hover{
  21. background: rgb(74, 179, 198);
  22. }
  23. #wrapper p.button input:active,
  24. #wrapper p.button input:focus{
  25. background: rgb(40, 137, 154);
  26. position: relative;
  27. top: 1px;
  28. border: 1px solid rgb(12, 76, 87);
  29. box-shadow: 0px 1px 6px 4px rgba(0, 0, 0, 0.2) inset;
  30. }
  31. p.login.button,
  32. p.signin.button{
  33. text-align: right;
  34. margin: 5px 0;
  35. }

这里是一个创建边框投影的技巧,你可以随意设置一条或多条边框投影。这里使用length value来创建一个“假”的第二条边框,宽度为3px,无模糊效果。接着定义复选框的样式:

  1. /* styling the checkbox "keep me logged in"*/
  2. .keeplogin{
  3. margin-top: -5px;
  4. }
  5. .keeplogin input,
  6. .keeplogin label{
  7. display: inline-block;
  8. font-size: 12px;
  9. font-style: italic;
  10. }
  11. .keeplogin input#loginkeeping{
  12. margin-right: 5px;
  13. }
  14. .keeplogin label{
  15. width: 80%;
  16. }

为表单使用重复线性渐变的样式,以实现条纹背景效果。

  1. p.change_link{
  2. position: absolute;
  3. color: rgb(127, 124, 124);
  4. left: 0px;
  5. height: 20px;
  6. width: 440px;
  7. padding: 17px 30px 20px 30px;
  8. font-size: 16px ;
  9. text-align: right;
  10. border-top: 1px solid rgb(219, 229, 232);
  11. border-radius: 0 0  5px 5px;
  12. background: rgb(225, 234, 235);
  13. background: repeating-linear-gradient(-45deg,
  14. rgb(247, 247, 247) ,
  15. rgb(247, 247, 247) 15px,
  16. rgb(225, 234, 235) 15px,
  17. rgb(225, 234, 235) 30px,
  18. rgb(247, 247, 247) 30px
  19. );
  20. }
  21. #wrapper p.change_link a {
  22. display: inline-block;
  23. font-weight: bold;
  24. background: rgb(247, 248, 241);
  25. padding: 2px 6px;
  26. color: rgb(29, 162, 193);
  27. margin-left: 10px;
  28. text-decoration: none;
  29. border-radius: 4px;
  30. border: 1px solid rgb(203, 213, 214);
  31. transition: all 0.4s  linear;
  32. }
  33. #wrapper p.change_link a:hover {
  34. color: rgb(57, 191, 215);
  35. background: rgb(247, 247, 247);
  36. border: 1px solid rgb(74, 179, 198);
  37. }
  38. #wrapper p.change_link a:active{
  39. position: relative;
  40. top: 1px;
  41. }

现在,我们已经定义了两个漂亮的样式了,但在一个时间段里,只需要显示一个。所以,现在用动画效果来实现。

创建切换动画

首先是将不透明度设为0以隐藏表单:

  1. #register{
  2. z-index: 21;
  3. opacity: 0;
  4. }

还记得吗?前面登录表单中z-index的值为22。上面这段代码的动作是把z-index的值定义为21,让它可以处在登录表单的上一层(指显示顺序,数字小的显示在前面)。

重点部分:target目标伪类。这里将使用“锚”进行两个表单间的显示过渡。“锚”链接的一般用法,是在页面上的两处实现跳转。但这里并不希望跳转到别处,只需要表单显示的切换。这里的诀窍在于表单顶部的两个小环节中,当点击“锚”标记时,触发第一个表单的显示设置“none”。这样,就避免了任何的页面跳转。

  1. #toregister:target ~ #wrapper #register,
  2. #tologin:target ~ #wrapper #login{
  3. z-index: 22;
  4. animation-name: fadeInLeft;
  5. animation-delay: .1s;
  6. }

当点击登录表单上的“Join us”按钮时,就会触发 #toregister,然后通过选择找到#register,激活动画fadeInLeft。使隐藏的表单慢慢显现出来,并同时改变其z-index值,让这个表单出现在其它表单的上面。

下面是实现这种动画样式的代码。

  1. .animate{
  2. animation-duration: 0.5s;
  3. animation-timing-function: ease;
  4. animation-fill-mode: both;
  5. }
  6. @keyframes fadeInLeft {
  7. 0% {
  8. opacity: 0;
  9. transform: translateX(-20px);
  10. }
  11. 100% {
  12. opacity: 1;
  13. transform: translateX(0);
  14. }
  15. }

表单用“disappearing”的动画形式从左边淡出:

  1. #toregister:target ~ #wrapper #login,
  2. #tologin:target ~ #wrapper #register{
  3. animation-name: fadeOutLeftBig;
  4. }
  5. @keyframes fadeOutLeft {
  6. 0% {
  7. opacity: 1;
  8. transform: translateX(0);
  9. }
  10. 100% {
  11. opacity: 0;
  12. transform: translateX(-20px);
  13. }
  14. }

上面的动画实现代码来自Dan Eden的 animate.css,把其中的动画名称修改为自己的表单对象就可以实现。里面还有一些其他的自定义动画。

(需要注意的是,有些浏览器还不支持background-clip: text。IE9中,过渡和动画效果就无法显示,IE8及更低版本的浏览器还不支持CSS3中的伪类。)

英文原址:tympanus.net

实例演示地址:

从左开始渐变显示的动画效果

从左滑动呈现的动画效果

从小放大的动画效果

点击开始源代码下载

本文为CSDN编译整理,未经允许不得转载。如需转载请联系market@csdn.net

转载于:https://www.cnblogs.com/mixer/archive/2012/03/30/2448586.html

HTML5+CSS3构建同页面表单间的动画切换相关推荐

  1. 基于html5 源码,10款基于HTML5+CSS3实现的超酷源码动画

    1.基于Bootstrap的jQuery登录表单 这是一款基于Bootstrap的登录表单,表单的外观自然不用说,沿用了Bootstrap的风格,非常漂亮.这款登录表单有一个经过CSS3处理过的头像图 ...

  2. HTML5+CSS3小实例:黏性小球loading动画

    HTML5+CSS3实现黏性小球的loading动画,主要通过 contrast 和 blur 两个滤镜搭配使用,进而实现小球来回穿梭的动画,动画过程伴随着融球效果,如此精致细腻的动画,用来做个loa ...

  3. HTML5+CSS3实现非常有创意的生日蛋糕动画(含音乐)

    html5庆祝生日快乐动画空间模板 "祝你生日快乐,祝你生日快乐--",过生日有生日歌,生日蛋糕也是必不可少的,这篇文章主要为大家详细介绍了程序员利用纯HTML5+CSS3制作的生 ...

  4. html屏幕飘灯笼,HTML5+CSS3实现摇晃的蓝色斋月灯笼动画效果

    HTML5 CSS3 蓝色斋月灯笼动画 * { padding: 0; margin: 0; outline: none; -webkit-box-sizing: border-box; -moz-b ...

  5. HTML5+CSS3构建简易的表单

      浏览网页的时候,表单差不多是最常见的形式之一了.对于某些不自动保存账户和密码的网站来说,天天都要给表单敲账户密码.今天记录一下一个简单的表单怎么制作.制作后的效果图如下:   首先在body中输入 ...

  6. html鼠标移入显示图片动画,HTML5+CSS3鼠标移入移出图片生成随机动画_html/css_WEB-ITnose...

    今天分享使用html+css3+少量jquery实现鼠标移入移出图片生成随机动画,我们先看最终效果图(截图为静态效果,做出来可是动态的哟) 左右旋转 上下移动 缩放 由于时间关系我就不一步步解析各段代 ...

  7. web前端基础 html5+css3(十二.2D转换,动画,3D转换)

    一.2D转换 1.2D转换之移动translate (1)transform:translate(x,y); transform:translate(100px,100px); (2)transfor ...

  8. html5点击字母点读,HTML5 CSS3 5个字母点击交互动画

    CSS 语言: CSSSCSS 确定 @import url('https://fonts.googleapis.com/css?family=Anton|Roboto'); .word { font ...

  9. 哈哈,又找到几个强大的html5+css3的动画效果

    一周HTML5经典回顾 31个别出心裁的HTML5动画 40,425 人浏览 发表回复 13 又是一周即将过去,我们来精心挑选这周分享的31款别出心裁的HTML5动画,很多还比较实用,一起来看看吧. ...

最新文章

  1. Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)
  2. apache_svn
  3. Java命令行界面(第24部分):MarkUtils-CLI
  4. IBM SOA[ESB,BPM,Portal等]基础架构图解
  5. java位运算求幂,程序员必学:快速幂算法
  6. 如何才能成为编程高手?别人都不告诉你的东西,我来说给你听!
  7. Linux命令rm的常用用法
  8. 赢者通吃自编码器(WTA-AE)
  9. Shell之根据关键字符串替换文件中的行
  10. android 朗读tts_如何设置Android以大声朗读您的文本
  11. 零基础学python这本书怎么样-怎样学 Python?
  12. metasploit framework的一些使用姿势(持续更新)
  13. ADXL345传感器小结
  14. asterisk连接sip139网络电话
  15. java:去除数组重复元素的四种方法
  16. Element UI 官网
  17. 心田花开教学让你快速掌握心田上的百合花写法与修辞手法运用
  18. ”网上花店” 专题页制作
  19. [CS-161]网络钓鱼(phishing)
  20. 第二十六课 跟着大师学投资:巴菲特的绝招—未来现金流

热门文章

  1. 兼容性好的overflow CSS清除浮动一例
  2. html5游戏引擎-Pharse.js学习笔记(一)
  3. C/C++面试题:什么是COM和ActiveX,简述DCOM。
  4. 我的crystal report for asp.net測試通過了
  5. 使用 Cuttlefish 虚拟 Android 设备
  6. android 隐藏手机底部虚拟按键
  7. resources.arsc格式(包-类型-资源项)
  8. 16-垃圾回收相关概念
  9. 队列与环形队列使用数组模拟
  10. 洛谷 P3372 【模板】线段树 1(线段树区间加区间找)