当前位置: 首页 > Web前端 > CSS

带有CSS3SVG的可爱动物哈士奇和狐狸动画

时间:2023-03-30 18:51:36 CSS

我想向您展示如何巧妙地使用HTML、CSS排序动画和SVG过滤器将生活中最可爱的事物之一——动物——带到网络上。我们将探索两种绘制动物的技术:一种使用纯HTML和CSS,另一种使用内联SVG背景图像。涉及的动画也很复杂,因此本教程将重点介绍创建这些动物及其栩栩如生的动作所涉及的不同技术。尽情发挥您的创造力,创造属于您自己的独特而有趣的动物动画。事不宜迟,让我们开始吧!塑造动物演示使用两种不同的技术来创建动物不同身体部位的形状。哈士奇使用CSSborder-radius属性,而狐狸使用内联背景SVG图像,因为后者具有更复杂的形状。HTML标记这两种动物都使用嵌套的HTML部分来对身体部位进行分组。分组的概念对于创建逼真的动画非常重要——当头部移动时,眼睛和耳朵也应该一起移动,因为它们是贴在头部上的。

web前端开发学习Q-q-u-n:767273102,分享开发工具,零基础,进阶视频教程,希望新手少走弯路每个部分都可以独立移动,随着父元素的移动而移动,会产生更逼真的效果。不知道你发现没有,尾巴被其他尾巴组件深深嵌套了。当每个尾巴部分相对于其父项定位,然后旋转相同的量时,就会创建一条均匀曲线的视觉感知。使用CSS塑造图形CSS的border-radius属性被大量用于塑造哈士奇的形象。对于许多元素特征,需要根据具体情况控制每个边界半径。例如,这里是如何构建哈士奇的后腿:.husky-hind-leg{//...border-top-left-radius:35%100%;border-top-right-radius:40%100%;}第一个数字表示曲线从上/下边缘的深度,第二个数字表示曲线从左/右边缘的深度。其他形状,比如前腿,不能单独用border-radius整形,需要用transform整形:.husky-leg:before{transform:skewY(-30deg)skewX(10deg);transform-origin:topright;}一旦shape变成了bit,每个元素都可以在其父元素中被赋予一个基于百分比的绝对位置。这确保了每个身体部位的精确放置和响应。使用SVG塑造形状至于狐狸,Sass-SVG用于为每个身体部位创建复杂的SVG形状。SVG图像可以用作背景图像,更好的是,只要它们是base-64或UTF-8编码,就可以内联写入(以获得最大的浏览器支持)。然而,SVG代码很难手工编写。我使用Adob??eIllustrator创建初始形状:然后我将每个身体部位保存为SVG图像。SVG代码通过Sass-SVG传输到SCSS样式表。例如,这是一只狐狸的鼻子:.fox-nose:before{@includesvg((viewBox:(00168168))){//鼻子@includesvg('path',(fill:$色鼻,d:'M83.7,86.7c3.3,0,11.6-3.9,11.6-7.1c0-3.2-9.4-3.2-11.6-3.2c-2.2,0-11.6,0-11.6,3.2C72.1,82.8,80.4,86.7,83.7,86.7z'));//连接鼻子和嘴巴的线@includesvg('path',(stroke:$color-nose,fill:none,d:'M83.7,102.3V86.7'));//嘴@includesvg('path',(stroke:$color-nose,fill:none,d:'M94.5,104.9c0,0-5.2-2.7-10.8-2.7c-5.6,0-10.8,2.7-10.8,2.7'));这将在url()中生成编码的内联SVG字符串,如下所示:.fox-nose:before{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg...》);}Web前端开发学习Q-Q-U-N:767273102,分享开发工具,零基础,进阶视频教程,希望新手少走弯路,因为SVG是背景图片,所以可以变形动画,就像HTML一样元素。使用Sass-SVG,Sass$variables可用于完全控制SVG填充和描边颜色。使用内联SVG使狐狸具有响应性很简单。viewbox属性值((viewBox:(00168168)))直接来自SVG文件,但包含SVG背景图像的元素可以是任何大小,只要保持高/宽比即可。fox-head的所有部分都是绝对定位的,并且具有与.fox-head相同的高度和宽度。“Squigglevision”和SVG过滤器Squigglevision是一种通过摆动形状轮廓来模拟手绘动画的动画技术。这使得狐狸和哈士奇等场景看起来更加动态和手绘,即使动物没有移动。SVG有一个名为的过滤器,它会在应用该过滤器的任何地方产生“噪音”。结合过滤器来指定像素在每个过滤器中移动的距离。任何元素上的属性以创建“squigglevision”效果,关键帧动画一次快速设置一个过滤器@keyframessquigglevision{0%{-webkit-filter:url('#squiggly-0');过滤器:url('#squiggly-0');}25%{-webkit-filter:url('#squiggly-1');过滤器:url('#squiggly-1');}50%{-webkit-filter:url('#squiggly-2');过滤器:url('#squiggly-2');}75%{-webkit-filter:url('#squiggly-3');filter:url('#squiggly-3');}100%{-webkit-filter:url('#squiggly-4');filter:url('#squiggly-4');}}注意:这些SVG过滤器现在似乎在Firefox中不起作用,所以将像这样的过滤器动画视为一个渐进增强过程。使用CSS关键帧制作动物动画并没有给我们一种方便的方式来排序和组合动画。解决这个问题的最佳方法就是要有动画策划(故事板)作为时间轴并使用预处理器(如Sass)生成关键帧。例如狐狸,在勾勒出每个动画应该发生的故事板之后,变换和绝对时间偏移(以秒为单位)用于为每个身体部位制作动画。下面是SCSS中狐狸鼻子概览的示例:$animations:(//...'nose':(//静止位置(4s,5s,7s):rotateY(-4deg),//鼻子向下4.5s:rotateY(-4deg)rotateX(-3deg),//狐狸向左看(7.5s,9s):rotateX(-3deg)rotateY(-28deg)rotateZ(-11deg),//狐狸向右看(9.5s,12s):rotateY(7deg),//狐狸直视前方13s:rotateY(0),),//...);在这里,$animations是一种Sass映射,其中键是动画的名称(例如“鼻子”)。每个动画名称的值是另一个映射,其中键是以秒为单位的偏移量或偏移量列表(例如(7.5s,9s)),值是每个偏移键的变换属性。那么,我们如何将这张地图变成@keyframe动画呢?首先,设置全局$duration:17s变量——这将是每个动画的总持续时间。然后,使用嵌套的Sass@each...in...循环,我们可以通过遍历$animations映射为每个动画生成预期的CSS@keyframe声明:@each$animation-name,$animationin$animations{//关键帧声明@keyframes#{$animation-name}{@each$offsets,$transformin$animation{@each$offsetin$offsets{//偏移声明块#{percentage($offset/$duration)}{//变换属性变换:#{$transform};这将生成如下所示的关键帧:@keyframesnose{14.70588%{transform:rotateY(-4deg);}23.52941%{变换:rotateY(-4deg);}29.41176%{变换:rotateY(-4deg);}41.17647%{变换:rotateY(-4deg);}26.47059%{变换:rotateY(-4deg)rotateX(-3deg);}44.11765%{变换:rotateX(-3deg)rotateY(-28deg)rotateZ(-11deg);}52.94118%{变换:rotateX(-3deg)rotateY(-28deg)rotateZ(-11deg);}55.88235%{变换:rotateY(7deg);}70.58824%{变换:rotateY(7deg);}76.47059%{变换:rotateY(0);}}Web前端开发学习Q-Q-U-N:767273102,分享开发工具,零基础,进阶视频教程,希望新手少走弯路,在不使用SCSS的情况下,这些百分比的计算会很繁琐。它们表示每个所需时间值相对于动画每个步骤的总$duration的百分比偏移量。然后可以将动画应用于它们各自的身体部位,例如动画:nose$durationnoneinfinite;。每个动画的持续时间需要相同,以便它们无缝循环。逼真的缓动曲线动画的另一个重要部分是看起来逼真,因此请仔细选择(或创建)动画的每个部分的缓动曲线。最生动的缓动曲线是“正弦曲线”——换句话说,平滑起伏的缓动曲线。这样自然运动就不会僵硬地开始和停止,动画计时功能应该反映出来。对于狐狸和哈士奇,我使用cubic-bezier(0.645,0.045,0.355,1)(在此处预览)。这条曲线(见下文)开始时速度稍快,然后平稳地趋于平稳。当然,最好对曲线进行试验以找到最适合动画的曲线。最后:在Chrome中,您可以直观地检查所有顺序动画以确保它们在正确的时间发生。您所要做的就是打开控制台,单击“样式”选项卡,然后单击播放按钮:希望本教程能激发您创建更多连续CSS动物动画的灵感!