用Sass创建MetaFizzy效果

来源:GBin1.com

用Sass创建MetaFizzy效果

Hugo发现了一个绚丽的css效果应用于web中并教会你如何聪明的重建和使用它。两天前,我看见笔者Hugo在css帮助下重写MetaFizzy的效果,Hugo帮助我们找到了一个用于理解Sass的JavaScript源代码。但我认为他的代码仍有可改之处,它比原版本的css多出了许多重复代码,我们找到了一种方法使其更加效率。重点:这是一个实验,如果你想要实验,请使用JavaScript。css版本需要500个线程,占用很多的CPU。所以这是一个Sass实验,只是为了好玩。

你从哪儿开始

对 于这个问题如果一开始没有Hugo的Demo我还不知道从哪儿开始。以下是我们需要做的。给我们的文本一个长长的影子,渐变到黑色。岁颜色的阴影随着时间 的变化盘旋,快速的彩虹动画,最后我们需要做以下几点,一个动画光影,一个动画鼠标悬停,一个列表的颜色鼠标悬停差不多就是这样。

平滑阴影

用Sass创建MetaFizzy效果

数据帧

我们会做简单的光影效果,我们做的是让文本阴影颜色逐渐变黑。然后我们需要一个动画,随着时间改变颜色,这个效果需要hsl().因为我们希望Sass代码成为可能。我们将使用一个叫做mixin的关键帧在处理这些文本阴影。首先,纲要。

@mixin text-3d($hue) {/* Output crazy text-shadows */
}@keyframes text-3d-animation {@for $i from 0 through 10 {#{$i * 10%} {@include text-3d($i * 36);        }}
}

我们所做的就是创建一个text-3d-animation CSS动画与11个明确关键帧(0%,10%,……90%,100%)。在每一个关键帧,我们调用一个名为text-3d mixin,传递我* 36色相参数(36,72,108,144,156,…)。如果您熟悉hsl()符号,你应该能看到事情会怎样进展。

混合

现在我们已经创建了动画调用mixin,是时候去构建混合!希望输出一串文本阴影。我觉得50是相当巨大的了,但是你可以选择你要的号码(虽然你不得不硬编码这个,我没有定义一个参数)。再一次,我们不会手动写阴影;Sass列表和循环都能实现。

@mixin text-3d($hue) {$ts: ();@for $i from 1 through 50 {$ts: $ts, $i*2px $i*2px hsl($hue + $i*1, 100%, 50% - $i);            }text-shadow: $ts, 0 0 50px, 0 0 55px;
}

别惊慌失措呢!这实际上是简单的。在进入我们的循环,我们定义一个空列表名为$ts(代表区分开)。然后我们进入循环。在每次运行, 我们添加一个新的阴影到我们的列表:两个水平和垂直偏移量设置为$ i * 2 px把阴影越来越大我们没有定义任何模糊,但是你可以设置一个,你喜欢颜色是定义在HSL与色调,为给定的参数(多个36)+ $ i * 1、饱和度和明度100%到50%,这意味着我逐步去黑然后一旦循环终于结束了,我们简单地输出我们列表作为一个列表作为文本阴影。我们还添加两个阴影手 动为酷白光环。我们做的非盘旋MetaFizzy效应!它应该让工作更有魅力。

炫丽的彩虹

用Sass创建MetaFizzy效果

在大多数情况下,悬停动画作品一样是非盘旋动画。我们将继续我们之前做的,从关键帧开始。

关键帧

@keyframes crazy-rainbow-animation {      @for $i from 1 through 50 {#{$i * 2%} {@include crazy-rainbow($i, tomato yellow green blue purple);}}}

正如您可以看到的,几乎与上面类似我们使用3d文字动画,除了我们不会使用的11关键帧除了50。其实如果我们希望阻止51,让我们添加0%的关键帧(循环当然)。

@keyframes crazy-rainbow-animation {      0% {@include crazy-rainbow(50, tomato yellow green blue purple);}@for $i from 1 through 50 {#{$i * 2%} {@include crazy-rainbow($i, tomato yellow green blue purple);}}
}

我们通过我们的疯狂彩虹mixin两个参数:

  1. $i再次作为一个数字值(我们将会看到这一点后)
  2. 列表的颜色我们想看到悬停文本移动(这是正确的,我们可以定制颜色!)

力学

事情变得复杂。徘徊的动画基本上看起来像一个条纹阴影(没有意义了):一种颜色,然后另一个,然后另一个颜色,等等……但是太多,如同颜色在移动。

这个想法是这样的:

@keyframes crazy-rainbow-animation {0% {text-shadow: 2px 2px   color1, 4px 4px   color1, 6px 6px   color1, 8px 8px   color1,10px 10px color2, 12px 12px color2, 14px 14px color2, 16px 16px color2,18px 18px color3, 20px 20px color3, 22px 22px color3, 24px 24px color3;}2% {text-shadow: 2px 2px   color3, 4px 4px   color1, 6px 6px   color1, 8px 8px   color1,10px 10px color1, 12px 12px color2, 14px 14px color2, 16px 16px color2,18px 18px color2, 20px 20px color3, 22px 22px color3, 24px 24px color3;}/* And so on... */
}

在每一个新的关键帧、颜色(不偏移)必须是1列表中的索引。最后的颜色列表出现在第一,每一个颜色被选到正确的位置。所以到最后,我们有相同数量的阴影与相同的偏移量除了他们的颜色变化。

构建颜色数组

正因为如此,我们需要一个颜色列表只要数量的阴影是我们想输出的。如果我们想使用50的影子,我们需要一份列表列出50个颜色。手动创建该列表是很痛苦的, 所以我们创建一个函数来实现。这个功能的目的是将一个列表的颜色映射一个列表的颜色。但返回的列表应该匹配我们想要的长度,所以我们可以把列表5颜色转为 50的列表,像这样:

$given-colors: tomato yellow green blue purple;
$returned-colors: create-list($colors);
/*
$returned-colors: tomato, tomato, tomato, tomato, tomato, tomato, tomato, tomato, tomato, tomato,yellow, yellow, yellow, yellow, yellow, yellow, yellow, yellow, yellow, yellow, green, green, green, green, green, green, green, green, green, green, blue, blue, blue, blue, blue, blue, blue, blue, blue, blue, purple, purple, purple, purple, purple, purple, purple, purple, purple, purple;
*/

不幸的是,我意识到50阴影对于这个动画并不总是一个好的号码。这让我想起了颜色的数量取决于你想要的,动画可能不是很好,有时颜色仅仅完成“跳越”。这是因为我们需要阴影从最后一个关键帧匹配到第一个阴影。

总之,我们需要找到一个号码是:

  • 小于或等于50(关键帧的数量)
  • 一个多种长度的颜色列表(使动画循环没有任何跳越)
  • 尽可能的接近50(使动画尽量流畅,)

我们有6种元素的列表,该函数应该返回8(因为9会超过50自从9 * 6 = 54)。一个列表的元素应该返回7 7(因为7 * 7 = 49)。

@function define-max($n) {@for $i from 1 through 50 {@if $i * $n > 50 {@return $i - 1;}}
}

现在回到 create-list()函数。我们有一个列表的几个颜色,想把它变成一个列表大约50个颜色

@function create-list($colors) {$max: define-max( length($colors) );$l: ();@each $c in $colors {@for $i from 1 through $max {$l: append($l, $c);}}@return $l;
}

混合

所以我们创建一个函数来将一个列表的颜色变成一个更长的列表的颜色。让我们深入研究混合。

@mixin crazy-rainbow($n, $colors) {$colors: create-list($colors);$ts: (); @for $i from 1 through length($colors) {$n: if($n > length($colors) or $n == 0, 1, $n);$ts: $ts, $i*2px $i*2px 0 nth($colors, $n);$n: $n + 1;}text-shadow: $ts;
}

与前面相同,我定义一个$ts空列表来存储前面的映射,然后我们进入循环添加映射到$ts列表的指针索引($n:$n+1)。如果超出索引范围,返回1。这是它的工作原理,接下来让我们总结一下我们做了什么:

  1. 我们计算了映射的数量(x),我们需要输出我们想要运行的基本颜色。这只是没有任何故障的让动画循环。
  2. 我们生成了包含X总颜色的巨大数组,根据我们之前计算的数量和颜色运行。
  3. 每个关键帧我们从不同的索引数组中实时输出X的映射,让色彩产生运动的效果。

改善位

既然我们已经完成了所有的力学,我们可以改进一点。为什么不做一个metafizzy mixin分配几个样式?

@mixin metafizzy($size, $duration: 10s) {font-family: 'MetafizzyLogoRegular', cursive;color: white;line-height: .9em;font-weight: normal;font-size: $size;animation: text-3d-animation $duration linear infinite;  &:hover {animation: crazy-rainbow-animation 1s linear infinite; animation-direction: reverse; }
}

这个mixin定义所有排版的东西,包括字体组(你需要的字体文件),字体大小,字体粗细,行高等等。让我们继续前进。如何生成混合两个关键帧动画?我们可以通过它颜色列表编辑我们想使用在盘旋效果。

@mixin metafizzy-animations($hover-colors) {@keyframes text-3d {@for $i from 0 through 10 {#{$i*10%} {@include text-3d($i * 36); }}}  @keyframes crazy-rainbow {      @for $i from 1 through 50 {0% { @include crazy-rainbow(50, $hover-colors); } #{$i*2%} {@include crazy-rainbow($i, $hover-colors);}}}
}

不幸的是,我们不可以包括这个mixin的metafizzy一因为后者包含在一个选择器(如h1)。实际上我们可以做到,但这行不 通;@keyframes动画将被内部输出儿不是在根文件下。在Sass 3.3,我们将有@at-root指令,会让这种事情(@directive冒泡)变成可能,但是现在,这是不可能的。所以我们必须包括在根目录下。

使用&演示

@include metafizzy-animations(red orangered yellow lightgreen green deepskyblue);h1 {@include metafizzy(25em, 5s);  /* Other styles that please you */   
}

这是我们所得到的,希望你喜欢它,欢迎阅读。

via 极客标签

来源:用Sass创建MetaFizzy效果

转载于:https://www.cnblogs.com/gbin1/p/3302361.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 823. 带因子的二叉树(动态规划)

文章目录1. 题目2. 解题1. 题目 给出一个含有不重复整数元素的数组,每个整数均大于 1。 我们用这些整数来构建二叉树,每个整数可以使用任意次数。 其中:每个非叶结点的值应等于它的两个子结点的值的乘积。 满足条件的二叉树一共有多少个&…

动态规划问题之背包模型(18题)

背包问题是动态规划问题的一大类型,下面我们对这个进行总结。 以 Acwing y中总结的 几个类型,我写了几个题解 应用知识点 01背包、完全背包 空间压缩的写法多维费用的背包问题,以及状态的不同表示对复杂度的 影响完全背包问题的三种求解方法…

LeetCode LCP 22. 黑白方格画

文章目录1. 题目2. 解题1. 题目 小扣注意到秋日市集上有一个创作黑白方格画的摊位。 摊主给每个顾客提供一个固定在墙上的白色画板,画板不能转动。 画板上有 n * n 的网格。绘画规则为,小扣可以选择任意多行以及任意多列的格子涂成黑色,所选…

ubuntu server安装hadoop和spark,并设置集群

安装server请看本人的上一篇博客 Ubuntu Server 20.04.2 安装 先前准备工作 创建 hadoop用户 创建用户之后,输入一下指令重启 shutdown -r now登录 hadoop 用户 安装 ssh 和 vim 首先更新一下 apt 工具 sudo apt-get update然后安装vim sudo apt-get install…

LeetCode 第 35 场双周赛(216/2839,前7.61%)

文章目录1. 比赛结果2. 题目1. LeetCode 5503. 所有奇数长度子数组的和 easy2. LeetCode 5505. 所有排列中的最大和 medium3. LeetCode 5504. 使数组和能被 P 整除 medium4. LeetCode 5506. 奇怪的打印机 II hard1. 比赛结果 做出来3题。继续加油! 全国排名&#…

Linux Ubuntu 安装 anaconda3和 Pycharm 社区版本

恰巧大数据实验安装 Anaconda & Pycharm,借此机会写篇博客分享一下 Anaconda 下载 Anaconda 清华镜像网站看一看 下载之后,放入 linux文件夹中 安装 Anaconda bash 下载的文件名 之后,按照提示进行输入信息(大多数都是 回车) 一定…

LeetCode 第 207 场周赛(245/4115,前5.95%)

文章目录1. 比赛结果2. 题目1. LeetCode 5519. 重新排列单词间的空格 easy2. LeetCode 5520. 拆分字符串使唯一子字符串的数目最大 medium3. LeetCode 5521. 矩阵的最大非负积 medium4. LeetCode 5522. 连通两组点的最小成本 hard1. 比赛结果 做出来3题,第四题试了…

《软件工程》individual project开发小记(一)

今天周四没有想去上的课,早八点到中午11点半,下午吃完饭后稍微完善了一下,目前代码可以在dev c和vs2012上正常运行,性能分析我看资料上一大坨,考虑到目前状态不太好,脑袋转不动了,决定先放一放去看看邹老师以前的软工博客以及学长学姐们的经验…

JavaScript中九九乘法表制作

练习一下表格&#xff0c;利用Javascript制作出来&#xff1a; 代码赏析&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…

机器学习算法--协同过滤算法

0. 关键词 推荐算法长尾理论UserCFItemCF 1. 推荐算法 互联网的飞速发展使我们进入了信息过载的时代&#xff0c;搜索引擎可以帮助我们查找内容&#xff0c;但只能解决明确的需求。为了让用户从海量信息中高效地获得自己所需的信息&#xff0c;推荐系统应运而生。 推荐系统…

利用JavaScript制作星星金字塔

主要练习&#xff1a; 代码赏析&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv&q…

机器学习算法--ALS

本文转载自&#xff1a;endymecy|ALS 一、什么是ALS ALS是交替最小二乘&#xff08;alternating least squares&#xff09;的简称。在机器学习中&#xff0c;ALS特指使用交替最小二乘求解的一个协同推荐算法。它通过观察到的所有用户给商品的打分&#xff0c;来推断每个用户…

04.卷积神经网络 W2.深度卷积网络:实例探究(作业:Keras教程+ResNets残差网络)

文章目录作业1&#xff1a;Keras教程1. 快乐的房子2. 用Keras建模3. 用你的图片测试4. 一些有用的Keras函数作业2&#xff1a;残差网络 Residual Networks1. 深层神经网络的问题2. 建立残差网络2.1 identity恒等模块2.2 卷积模块3. 建立你的第一个残差网络&#xff08;50层&…

安装Python第三方库的常用方法和注意事项

安装Python的库 这里&#xff0c;我来介绍一下平时我们安装python库的几种常用方法和一些注意事项。 第一种&#xff0c;使用我们的pip工具 第二种&#xff0c;使用IDE中集成的功能进行一键安装(以Pycharm 为例) 第三种&#xff0c;使用Anaconda进行安装 使用 pip 工具安装第三…

LeetCode 968. 监控二叉树(DFS)

文章目录1. 题目2. 解题1. 题目 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所有节点所需的最小摄像头数量。 示例 1&#xff1a; 输入&#xff1a;[0,0,null,0,0] 输出&#xff…

LeetCode 576. 出界的路径数(动态规划)

文章目录1. 题目2. 解题1. 题目 给定一个 m n 的网格和一个球。 球的起始坐标为 (i,j) &#xff0c;你可以将球移到相邻的单元格内&#xff0c;或者往上、下、左、右四个方向上移动使球穿过网格边界。 但是&#xff0c;你最多可以移动 N 次。 找出可以将球移出边界的路径数量…

04.卷积神经网络 W3.目标检测

文章目录1. 目标定位2. 特征点检测3. 目标检测4. 滑动窗口的卷积实现5. Bounding Box预测&#xff08;YOLO&#xff09;6. 交并比7. 非极大值抑制8. Anchor Boxes9. YOLO 算法10. 候选区域作业参考&#xff1a; 吴恩达视频课 深度学习笔记 1. 目标定位 定位分类问题&#xff…

LeetCode 988. 从叶结点开始的最小字符串(DFS)

文章目录1. 题目2. 解题1. 题目 给定一颗根结点为 root 的二叉树&#xff0c;树中的每一个结点都有一个从 0 到 25 的值&#xff0c;分别代表字母 a 到 z&#xff1a;值 0 代表 a&#xff0c;值 1 代表 b&#xff0c;依此类推。 找出按字典序最小的字符串&#xff0c;该字符串…

Humble Numbers USCAO chapter 3.1

...目测我自己写坑定超时,就去NOCOW看了下,题解,官方是每个质数与已有的humble想乘取大于最大humble的最小数即是新的最大humble, 然后我就写了个个,开始嫌麻烦用set存,超时的飞起。然后全部改成数组,结果case 6还是超时,想了半天感觉和别人的题解也没啥差别,为什么运行时间差这…

LeetCode 636. 函数的独占时间(栈)

文章目录1. 题目2. 解题1. 题目 给出一个非抢占单线程CPU的 n 个函数运行日志&#xff0c;找到函数的独占时间。 每个函数都有一个唯一的 Id&#xff0c;从 0 到 n-1&#xff0c;函数可能会递归调用或者被其他函数调用。 日志是具有以下格式的字符串&#xff1a;function_id…