使用HTML5 SVG和CSS3制作边框运动的动画效果
2015-10-03 16:56
1121 查看
本教程将和大家一起来研究如何使用html5 svg和css transitions来制作一种十分奇妙的图片边框运动的动画效果。
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image.png)
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B1%5D.png)
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B2%5D.png)
查看演示
下载地址
本教程将和大家一起来研究一种奇妙且有趣的边框运动效果。当你用鼠标划过类似图片的内容块时,它的边框将会很神奇的运动起来:内容块的透明度降低,它的四条边框按顺时针方向运动,效果十分奇妙。我们将使用html5 svg和CSS transitions来完成它。
开始之前先来思考一下,然后在去完成效果。
注意:不是所有的浏览器都支持在svg中使用CSS transitions。
我们刚接触这种效果时,并不知道该如何下手制作,但是你可以先观察一条边,比如上部的边,你会注意到,边框是从右到做减少,然后一条新的边再从右边出现运动到左边。当结合4条边来看时,效果是上部的边运动到左边,左边的边运动到下边,下边的边运动到右边,右边的边运动到上部,正好是一周。
你也许能在不使用svg的情况下制作这种效果,甚至不使用额外的元素,只使用伪元素。但是本教程里我们希望研究如何通过svg来制作,并且通过css而不是javascript来控制它。
现在,想一想如何通过svg来实现它。我们想不使用javascript来实现它,但是使用css来计算
我们使用的线条有三个部分组成。线条的长度是方框的边长的三倍。线条的中间有一个和方框宽度相同的间隙,我们将通过设置
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B3%5D.png)
svg的大小设置为方框的大小,所以我们不会看到超出虚线溢出的部分。
我们使用一个
当我们用鼠标hover
下面我们来添加另外几条线,为了便于理解他们的位置和运动方向,来看下面的图片演示。
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B4%5D.png)
我们希望线条这样运动,当线条的开始部分移出方框时,和他相垂直的线的后面部分开始进入方框,这样就会制造出一种四条线沿着边框运动的视觉差效果。
让我们来看一看线条运动的坐标系。
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B5%5D.png)
左边的线条的坐标为(0,200)和(0,-400),下边的线条为(200,200)和(-400,200),右边的线条为(200,0)和(200,600):
当鼠标hover的时候,需要为每条线设置不同的translation
现在我们做出了一个基本的效果,让我们来做得更加漂亮一点!
我们可以再方框盒中添加一些文本
Broccoli, Asparagus, Curry
再为方框添加一些颜色渐变,各条svg边框间使用box shadow来制作一些间隔。
为文本添加一些样式
给svg和线条添加样式
因为方框的背景色在做渐变,所以我们要为线条的transition设置一些延时,否则看不到效果。
前面我们设置的
最后,我们设置当鼠标划过时不同的转换值。由于我们的方框是300px宽度,水平线将需要的总宽度的三分之二作为过渡。垂直方向的线也是相同的原理。
教程就到这里,希望对你有所帮助!
查看演示
下载地址
本文版权属于jQuery之家,转载请注明出处:http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/20141018229.html
Previous:
上一篇:如何实现“DESIGN SAMSUNG”网站的瀑布流效果
Next:
下一篇:使用html5 svg和css3制作神奇的图片hover效果
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image.png)
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B1%5D.png)
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B2%5D.png)
查看演示
下载地址
本教程将和大家一起来研究一种奇妙且有趣的边框运动效果。当你用鼠标划过类似图片的内容块时,它的边框将会很神奇的运动起来:内容块的透明度降低,它的四条边框按顺时针方向运动,效果十分奇妙。我们将使用html5 svg和CSS transitions来完成它。
开始之前先来思考一下,然后在去完成效果。
注意:不是所有的浏览器都支持在svg中使用CSS transitions。
我们刚接触这种效果时,并不知道该如何下手制作,但是你可以先观察一条边,比如上部的边,你会注意到,边框是从右到做减少,然后一条新的边再从右边出现运动到左边。当结合4条边来看时,效果是上部的边运动到左边,左边的边运动到下边,下边的边运动到右边,右边的边运动到上部,正好是一周。
你也许能在不使用svg的情况下制作这种效果,甚至不使用额外的元素,只使用伪元素。但是本教程里我们希望研究如何通过svg来制作,并且通过css而不是javascript来控制它。
现在,想一想如何通过svg来实现它。我们想不使用javascript来实现它,但是使用css来计算
stroke-dashoffset和
stroke-dasharray的值是相当困难的。所以我们决定使用另一种解决方案,使用线条并它们运动起来。
我们使用的线条有三个部分组成。线条的长度是方框的边长的三倍。线条的中间有一个和方框宽度相同的间隙,我们将通过设置
stroke-dashoffset的值等于方框的宽度来实现效果。现在,诀窍在于过渡线的位置:
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B3%5D.png)
svg的大小设置为方框的大小,所以我们不会看到超出虚线溢出的部分。
我们使用一个
div来放置
svg
div的宽度和高度设置为和svg一样的200px,并且设置svg为绝对定位。这里重点要注意将线条的描边设置为10,并设置
stroke-dasharray属性为200。
div { width: 200px; height: 200px; position: relative; overflow: hidden; background: #ddd; } svg { position: absolute; top: 0; left: 0; } svg line { stroke-width: 10; stroke: #000; fill: none; stroke-dasharray: 200; -webkit-transition: -webkit-transform .6s ease-out; transition: transform .6s ease-out; } div:hover svg line { -webkit-transform: translateX(-400px); transform: translateX(-400px); }
当我们用鼠标hover
div的时候,线条也要有一些transition效果。我们希望线移动其自身长度三分之二左右,所以在x轴上设置translate为-400px,由于我们在这里不能够设置translation的值为百分比,所以只能使用像素做单位。
下面我们来添加另外几条线,为了便于理解他们的位置和运动方向,来看下面的图片演示。
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B4%5D.png)
我们希望线条这样运动,当线条的开始部分移出方框时,和他相垂直的线的后面部分开始进入方框,这样就会制造出一种四条线沿着边框运动的视觉差效果。
让我们来看一看线条运动的坐标系。
![](%E4%BD%BF%E7%94%A8html5%20svg%E5%92%8Ccss3%E5%88%B6%E4%BD%9C%E8%BE%B9%E6%A1%86%E8%BF%90%E5%8A%A8%E7%9A%84%E5%8A%A8%E7%94%BB%E6%95%88%E6%9E%9C_jQuery%E4%B9%8B%E5%AE%B6-%E8%87%AA%E7%94%B1%E5%88%86%E4%BA%ABjQuery%E3%80%81html5%E3%80%81css3%E7%9A%84%E6%8F%92%E4%BB%B6%E5%BA%93_files/Image%20%5B5%5D.png)
左边的线条的坐标为(0,200)和(0,-400),下边的线条为(200,200)和(-400,200),右边的线条为(200,0)和(200,600):
当鼠标hover的时候,需要为每条线设置不同的translation
div:hover svg line.top { -webkit-transform: translateX(-400px); transform: translateX(-400px); } div:hover svg line.bottom { -webkit-transform: translateX(400px); transform: translateX(400px); } div:hover svg line.left { -webkit-transform: translateY(400px); transform: translateY(400px); } div:hover svg line.right { -webkit-transform: translateY(-400px); transform: translateY(-400px); }
现在我们做出了一个基本的效果,让我们来做得更加漂亮一点!
我们可以再方框盒中添加一些文本
D
2012Broccoli, Asparagus, Curry
再为方框添加一些颜色渐变,各条svg边框间使用box shadow来制作一些间隔。
.box { width: 300px; height: 460px; position: relative; background: rgba(255,255,255,1); display: inline-block; margin: 0 10px; cursor: pointer; color: #2c3e50; box-shadow: inset 0 0 0 3px #2c3e50; -webkit-transition: background 0.4s 0.5s; transition: background 0.4s 0.5s; } .box:hover { background: rgba(255,255,255,0); -webkit-transition-delay: 0s; transition-delay: 0s; }
为文本添加一些样式
.box h3 { font-family: "Ruthie", cursive; font-size: 180px; line-height: 370px; margin: 0; font-weight: 400; width: 100%; } .box span { display: block; font-weight: 400; text-transform: uppercase; letter-spacing: 1px; font-size: 13px; padding: 5px; } .box h3, .box span { -webkit-transition: color 0.4s 0.5s; transition: color 0.4s 0.5s; } .box:hover h3, .box:hover span { color: #fff; -webkit-transition-delay: 0s; transition-delay: 0s; }
给svg和线条添加样式
.box svg { position: absolute; top: 0; left: 0; } .box svg line { stroke-width: 3; stroke: #ecf0f1; fill: none; -webkit-transition: all .8s ease-in-out; transition: all .8s ease-in-out; }
因为方框的背景色在做渐变,所以我们要为线条的transition设置一些延时,否则看不到效果。
.box:hover svg line { -webkit-transition-delay: 0.1s; transition-delay: 0.1s; }
前面我们设置的
stroke-dasharray只有一个值,现在我们需要所有的线条和间隔都有不同的值。
.box svg line.top, .box svg line.bottom { stroke-dasharray: 330 240; } .box svg line.left, .box svg line.right { stroke-dasharray: 490 400; }
最后,我们设置当鼠标划过时不同的转换值。由于我们的方框是300px宽度,水平线将需要的总宽度的三分之二作为过渡。垂直方向的线也是相同的原理。
.box:hover svg line.top { -webkit-transform: translateX(-600px); transform: translateX(-600px); } .box:hover svg line.bottom { -webkit-transform: translateX(600px); transform: translateX(600px); } .box:hover svg line.left { -webkit-transform: translateY(920px); transform: translateY(920px); } .box:hover svg line.right { -webkit-transform: translateY(-920px); transform: translateY(-920px); }
教程就到这里,希望对你有所帮助!
查看演示
下载地址
本文版权属于jQuery之家,转载请注明出处:http://www.htmleaf.com/ziliaoku/qianduanjiaocheng/20141018229.html
Previous:
上一篇:如何实现“DESIGN SAMSUNG”网站的瀑布流效果
Next:
下一篇:使用html5 svg和css3制作神奇的图片hover效果
相关文章推荐
- 浅谈HTML5之四:全局属性
- 浅谈HTML5之三:新增的属性和废除的属性
- 浅谈HTML5之二:新增的元素和废除的元素
- 浅谈HTML5之一:语法的改变
- Html5+Css3实现简单表格排版
- html5 canvas 标签绘制图像且渐变色处理
- HTML5标签一览
- HTML5 Canvas 2D绘图
- html5 storage
- HTML5游戏开发实战--当心
- 游戏震屏效果的实现
- HTML5 Shiv – 让IE系列支持HTML5吧[转载]
- W3school学习笔记之HTML5
- html5的canvas绘制迷宫地图
- H5页面免费制作工具大集合
- IE9以下版本浏览器对HTML5新增标签不识别,导致CSS不起作用的问题
- 如何实现html5的摄像头的调用
- html5和css3的常用参考网
- Ajax与HTML5 history pushState/replaceState实例
- html5 Geolocation(地理位置定位)学习