利用SVG和CSS3实现炫酷的边框动画

这篇文章主要介绍了利用svgcss3来实现一个炫酷的边框动画,不使用javascript使得编写过程轻松了不少,需要的朋友可以参考下

今天我们来探索一下Carl Philipe Brenner的网站上一个微妙而有趣的动画效果。当鼠标经过网格元素时,会有一个微妙的动画发生——网格元素变得透明,每条边有个顺时针的动画,创造了非常好的效果。这种效果是通过JS给span标签的宽或者高做了动画。我们待会会用SVG和CSS渐变来完成。注意,这个技术还是实验性的。

首先,让我们来看看基本的概念,然后我们会朝着这个方向努力。

请注意,我们将在SVG上使用CSS过渡,可能无法得到所有浏览器的支持。

乍眼一看可能不明白这个效果是怎么完成的。我们先仔细看看上面的边就会发现,白色的边的宽度不断从右边往左边延伸,而一条稍微延时的边紧跟着一起移动。每条边都有这样的做法。看起来就像上面的边经过拐角移动到了左边,并以此类推。

立即学习“前端免费学习笔记(深入)”;

不用SVG也能完成这样的效果,甚至只用伪元素。但是我们想探索一下怎样用CSS而不是JavaScript来控制SVG。

现在,来思考一下要怎么创建出这样的效果。我们可以改变矩形的troke-dashoffset或者直接画线。我们尝试不用JavaScript的解决方案。我们发现,CSS过渡stroke-dashoffset 和 stroke-dasharray的值会触发很多BUG。所以我们要尝试不同的解决方案,利用线条和它们的动画,这在CSS里很容易理解和实现。这也给我们更多机会去探索不同的动画效果。

我们将要使用的线的特别之处是,它们在这个动画里将有三种状态。它们是方盒边长的三倍,其中中间一截是与边等长的间隙。我们将通过设置stroke-dashoffset的值来实现与方盒的边等长。现在,这个动画实现的关键在于线的位置转换:
2015722165434429.gif (600×369)

SVG与方盒大小一致,就不会看到超出虚线的部分。

我们先完成第一条线:

这个p长宽20px,和SVG一样。把SVG位置设为absolute,线宽度为10,stroke-dasharray为200。

p {       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;   }     p:hover svg line {       -webkit-transform: translateX(-400px);       transform: translateX(-400px);   }

当数鼠标悬浮在p上时,线也有一个过渡。我们要把线移动到它的三分之二处,所以要在x轴上移动到-400px处,你可以看看这个效果。因为translation不能在这里用百分比做单位,所以用px。

接着添加其余三条线,gif效果:
2015722165612818.gif (600×369)

我们需要实现以下效果:线的第一部分移出方盒后,旁边的线的最后一部分移动进来,,这将传进直线在转角处转弯的假象,

来看看坐标系的定义:
2015722165651126.png (600×442)

左边的线的坐标是(0,200) 到 (0,-400),底部的是(200,200) 到 (-400,200),右边的是right one (200,0) 到 (200,600):

给每条线加上不同的hover效果:

p:hover svg line.top {     -webkit-transform: translateX(-400px);     transform: translateX(-400px);   }     p:hover svg line.bottombottom {     -webkit-transform: translateX(400px);     transform: translateX(400px);   }     p:hover svg line.left {     -webkit-transform: translateY(400px);     transform: translateY(400px);   }     p:hover svg line.rightright {     -webkit-transform: translateY(-400px);     transform: translateY(-400px);   }

看看现在的效果。

现在方盒大小改为300 x 460,再给它添加一些内容:

D

2012 Broccoli, Asparagus, Curry

为了实现Carl Philipe Brenner的网站上的效果,我们还要添加颜色过渡效果、盒子阴影等:

.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;   }

给线的过渡加上延时:

.box:hover svg line {       -webkit-transition-delay: 0.1s;       transition-delay: 0.1s;   }

之前我们定义的stroke-dasharray只有一个值,但是现在要因尺寸变化而修改

.box svg line.top,   .box svg line.bottombottom {       stroke-dasharray: 330 240;    }     .box svg line.left,   .box svg line.rightright {       stroke-dasharray: 490 400;   }

如果你尝试这些值,你就能看到这些线条不同的显示效果。

最后,我们要个hover过渡设置相应的值。因为现在元素是300px宽,所以水平线条改为900px,竖线同理改变:

.box:hover svg line.top {       -webkit-transform: translateX(-600px);       transform: translateX(-600px);   }     .box:hover svg line.bottombottom {       -webkit-transform: translateX(600px);       transform: translateX(600px);   }     .box:hover svg line.left {       -webkit-transform: translateY(920px);       transform: translateY(920px);   }     .box:hover svg line.rightright {       -webkit-transform: translateY(-920px);       transform: translateY(-920px);   }

大功告成。希望能通过这些效果激发你的创意,实现更多的效果~

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

CSS实现文字环绕图片的效果

关于HTML5和CSS3实现时钟的效果

利用CSS3制作的鼠标悬停时边框旋转

以上就是利用SVG和CSS3实现炫酷的边框动画的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1610623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 01:35:34
下一篇 2025年12月24日 01:35:54

相关推荐

  • 利用CSS3实现了八组超炫酷鼠标滑过图片动画

    这篇文章主要为大家分享了8组超炫酷纯css3鼠标滑过图片动画效果,每一个动画效果都很精彩,值得大家学习借鉴,感兴趣的小伙伴们可以参考一下 这是一款效果超酷的纯CSS3鼠标滑过图片动画效果,它共分为8组不同的效果,它们分别在鼠标滑过图片时,以不同的方式显示遮罩层和图片标题。每一组效果又分为3种不同的鼠…

    2025年12月24日 好文分享
    000
  • CSS3实现的图片放大镜特效

    一款用纯css3实现的图片放大镜特效。页面打开五个小图显示于页面。当鼠标经过图片时,当前图片以灰色背景图的形式展示,需要的朋友不要错过 今天要给大家分享的的一款用纯css3实现的图片放大镜特效。页面打开五个小图显示于页面。当鼠标经过图片时,当前图片以灰色背景图的形式展示。效果非常不错。   实现的代…

    2025年12月24日
    000
  • 关于css3弹性盒模型的介绍

    这篇文章主要介绍了关于css3弹性盒模型的介绍,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 Css3引入了新的盒模型——弹性盒模型决定一个盒子在其他盒子中的分布方式以及如何处理可用的空间,使用该模型,可以很轻松的创建自适应浏览器窗口的流动布局或自适应字体大小的弹性布局 Css3引入…

    2025年12月24日
    000
  • 如何使用css3画个同心圆

    这篇文章主要给大家介绍了利用css3如何画个同心圆的相关资料,文中给出了详细的示例代码,并对代码进行了详细的解析方法大家理解和学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 基本思路 首先你得画三个圆吧,那三个圆怎么重叠到一块呢?这个就得靠-margin来控制了。 css 立即学…

    2025年12月24日
    000
  • 关于CSS3中的calc() 方法

    这篇文章主要介绍了详解css 3 的 calc() 方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下 下面一段代码给大家介绍css3中的calc()方法,具体内容如下所示: [Ctrl+A 全部选择 提示:您可先修改部分代码,再按运行] 如上代码,预览可以看出红色框超出了,因为在标准的 CSS…

    好文分享 2025年12月24日
    000
  • css3中移动属性的分析

    这篇文章主要介绍了css3学习系列之移动属性详解,内容挺不错的,现在分享给大家,也给大家做个参考。 transform功能 放缩 使用sacle方法实现文字或图像的放缩处理,在参数中指定缩放倍率,比如sacle(0.5)表示缩小50%,例子如下: scale方法使用示例 p { width: 300…

    2025年12月24日 好文分享
    000
  • 使用CSS3编写灰阶滤镜来制作黑白照片效果

    这篇文章主要介绍了使用css3编写灰阶滤镜来制作黑白照片效果的方法,css3中的filter十分强大,文中还介绍了对ie兼容的方法,需要的朋友可以参考下 CSS3 中的滤镜(filter)功能让我们轻松方便简单的处理图片,而不需要使用 PhotoShop 或者使用很多 JavaScript、PHP …

    2025年12月24日
    000
  • 利用CSS3制作的鼠标悬停时边框旋转

    本文给大家分享一段css3代码实现鼠标悬停时边框旋转的效果,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下 下面以2017年新年祝福语为例给大家展示下效果。 纯CSS3实现的鼠标悬停时边框旋转的效果: 实现代码如下,代码中注释已经比较详细,就不再多说了: Document body { …

    2025年12月24日
    000
  • 两种CSS3圆角和渐变的常用功能

    这篇文章主要介绍了css3圆角和渐变2种常用功能详解 的相关资料,需要的朋友可以参考下 Css3圆角讲解:想必大家对于图片,背景圆角,都不陌生吧, 圆角语法:border-radius:圆角值; CSS3圆角的优点 传统的圆角生成方案,必须使用多张图片作为背景图案。CSS3的出现,使得我们再也不必浪…

    2025年12月24日 好文分享
    000
  • 关于HTML5和CSS3实现时钟的效果

    利用html5,css实现钟摆效果 ,在项目中经常会遇到,今天把基于html5+css3实现简单的时钟效果的实现代码分享到本站平台,需要的朋友参考下吧 目的: 利用html5,css实现钟摆效果 知识点: 1) 利用position/left/top和calc()实现元素的水平和垂直居中; 立即学习…

    好文分享 2025年12月24日
    000
  • CSS3中使用RGBa来调节透明度的方法

    这篇文章主要介绍了css3中使用rgba来调节透明度的教程,rgba是rgb色彩模型的一个扩展,这个缩写词代表红绿蓝三原色的首字母,alpha值代表颜色的透明度或者说不透明度,需要的朋友可以参考下 在 CSS3 中,增加了一个 opacity 属性,允许开发者设置元素的透明度,现在 opacity …

    2025年12月24日
    000
  • 使用 css3 实现圆形进度条的方法

    本篇文章主要介绍了使用 css3 实现圆形进度条的示例,这里整理了详细的代码,非常具有实用价值,需要的朋友可以参考下 在开发微信小程序的时候,遇到圆形进度条的需求。使用canvas绘图比较麻烦: 1、为了实现在不同屏幕上面的适配,必须动态的计算进度条的大小; 2、在小程序中,canvas的画布具有最…

    2025年12月24日
    000
  • CSS3实现背景透明文字不透明的效果

    这篇文章主要介绍了css3实现背景透明文字不透明的示例代码的相关资料,内容挺不错的,现在分享给大家,也给大家做个参考。 最近遇到一个需求,要在图片上显示带有半透明背景的文字,效果如下图所示: 需求.png 看到这个需求之后,第一反应是使用CSS3中的opacity设置元素的透明度。 背景透明,文字也…

    2025年12月24日 好文分享
    000
  • 利用css3设置没有上下边的列表间隔线的方法

    这篇文章主要给大家介绍了利用css3如何设置没有上下边的列表间隔线,文中分享了两种解决方法,分别是利用通用兄弟选择器( ~ )和伪类选择器( :first-of-type / :last-of-type )来实现的,给出了详细的示例代码供大家参考学习,下面来一起看看吧。 本文主要介绍了关于利用css…

    2025年12月24日
    000
  • CSS3 3D旋转rotate效果的使用介绍

    这篇文章主要为大家详细介绍了css3 3d旋转rotate效果实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了CSS3 3D旋转rotate效果实例,供大家参考,具体内容如下 效果图: 示例代码 立即学习“前端免费学习笔记(深入)”; 3D旋转的Demo #experim…

    2025年12月24日 好文分享
    000
  • CSS3和jQuery实现跟随鼠标方位的Hover特效

    这篇文章主要介绍了基于css3和jquery实现跟随鼠标方位的hover特效的相关资料,需要的朋友可以参考下 今天我们来学习如何通过CSS3的特性和jQuery来创建一个感知鼠标滑动方向的hover效果。当鼠标滑进的时候,遮罩层会从上次鼠标滑出的方向滑入,当鼠标滑出的时候,遮罩层会跟随鼠标,从鼠标滑…

    好文分享 2025年12月24日
    000
  • js和CSS3实现卡牌旋转切换效果

    这篇文章主要为大家详细介绍了js css3实现卡牌旋转切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 我们经常会在游戏里看到一些几张卡牌左右切换的效果,中间的一张最突出醒目,向左或向右滑动可切换到另一张,今天我们就用CSS3来实现下这种效果。 我们先来看个demo,具体的样式各位可以自己…

    2025年12月24日
    000
  • 如何利用CSS3实现3D翻书效果

    这篇文章主要介绍了css3实现3d翻书效果,基于css3新属性animation及transform实现类似翻书效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 先上效果图:(样式有点丑,可以忽略一下下,效果出来了就好,后期加到其他项目中方便更改0.0) 类似翻书效果,原本的意思是使用JS来控…

    2025年12月24日
    000
  • 利用CSS3来匹配横屏竖屏的方法

    这篇文章主要介绍了使用css3来匹配横屏竖屏的简单方法,主要使用到了css3中新加入的@media,需要的朋友可以参考下 写在同一个CSS中  @media screen and (orientation: portrait) { /*竖屏 css*/ } @media screen and (or…

    好文分享 2025年12月24日
    000
  • 用css3实现走马灯的效果

    这篇文章主要介绍了纯css3实现走马灯效果,主要用到的css3技术有:keyframes、perspective、perspective-origin、transform(translate、rotate)、animation、transform-origin,有需要的小伙伴参考下 纯css3实现了…

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信