Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

Robin Rendle 于2017年1月11日

前几天,我遇到了一个特别有趣的问题。我想用random animation-duration 做一个动画元素。下面是个开始,当然是非随机的。

参见:Random numbers CSS(By Robin Rendle):http://codepen.io/robinrendle/pen/1acd2c123621a542aa223022d402b6eb

这是我写的CSS动画代码:

看起来,目前一切都很完美!但是,这并不是随机的,动画活动的周期时间是固定的2秒。

我希望将这固定的2秒钟的动画时间变成随机时长。于是我改写成这样:

其中$randomNumber 是程序化随机化的。像Sass等CSS预处理器都提供了一个随机函数(random())

或许,你会认为这已经很完美了。但是,我认为还不够完美。在预处理过程中产生的随机数会显示一个警告。

引用jake albaugh (@jake_albaugh) 的话说,“Sass中的随机数就像是从一个故事中随机的挑选主要人物的名字一样。这些名字只有在作者写作的时候是随机的給人物命名的,之后这些人物名就不会改变”。

也就是说,只要CSS一执行完毕,随机化就自然而然的结束了。随机值也就永远的被锁定了(除非预处理器再度重新运行)。

这也不同于JavaScript中的随机数类型,在JavaScript中,如Math.random(),随机数是在JavaScript运行过程中生成的。

一番唉声叹气之后,我意识到这是使用CSS内置变量(自定义属性)的绝好机会。当然,内置变量自身是不会生成随机数的。不过,我们很快就会见到,它们对我们依旧有很大的帮助。

如果你对这些随机变量还不是很熟悉,也不必担心。实际上,它们是CSS语言本身内置的变量。不过,相比于你可能比较熟悉的Sass或者Less等预处理器中的变量而言,它们肯定有所不同。Chris很快就列出了一堆优点:你可以在没有预处理器(preprocessor)的情况下使用内置变量(native CSS variables)。

多层联动。可以在任何选择器中设置变量以设置或者覆盖其当前值。

当它们的值发生改变时(如媒体查询—media query或者其他的状态),浏览器会根据需要重新绘制。

你可以在JavaScript中对它们进行访问和操作。

对我们来说,最后那一条才是最重要的。我们将在JavaScript中生成随机数,然后将它通过自定义属性应用到CSS中。

首先在,在CSS中创建一个我们需要的自定义属性变量,并设置默认值:

现在,我们可以这样在CSS中使用我们定义的变量:

非戏剧性的是,看起来我们现在依然处在问题的起点。然而,尽管演示和之前的SVG动画毫无差别,但是这次我们用的是CSS变量。我们可以通过更改CSS中的变量然后对比动画的变化来证明我们所做的一切都是有效的。

接下来,我通过JavaScript访问和操作我们所设置的自定义属性。

此时,我可以看到在SVG中会显示出一个红色的圆。然后我们通过setProperty方法来改变CSS中变量—animation-time的值。

现在好了,这就是在CSS中生成的随机数在SVG动画中得到应用。

参见:Random numbers CSS(By Robin Rendle):http://codepen.io/robinrendle/pen/397deea9cfff5c5973d0051765ae7bef

毫无疑问,这是一个很好的进步。因为在JavaScript运行过程中生成随机数,所以每次是不同的。这已经相当接近我们的目标了,不过我们要让它再高级一点,就是让变量animation-duration在运行的过程中实现周期性随机化。

借助JavaScript我们可以随时更新我们的自定义属性。下面是一个我们让变量animation-duration每秒实现一次更新的例子:

不错,这就是我想要的结果。

参见:Random numbers CSS(By Robin Rendle):http://codepen.io/robinrendle/pen/f3d3c2ff0ab6cd4aef12bed7c59386de

需要记住的一点是CSS自定义属性方法的可用性有些牵强,所以一定要注意。当然,我们也可以慢慢改近这个动画方法,比如:

如果不支持CSS变量(自定义属性),那么就会显示动画,自然这就不是我们想要的结果。

当然,如果CSS变量(自定义属性)方法不是动画时间(animation-duration)随机化的唯一方法,那么我们之前的做法就变得毫无意义。我们可以通过JavaScript调用DOM元素,并将其产生的随机值直接引入style中:

如果有必要,你甚至可以等到动画结束之后再设置新的动画时间。

顺便提示另一个可能的方法,就是用EQCSS来实现:

你希望随机化能够在CSS中就能直接实现吗?我不确定是否有确切的方法,不过即使有这样的方法,可能我们也不得不再等一段时间才可以使用。沿着这些思路,Philip Walton最近写道,在CSS中为随机数写一个真正的填充工具(polyfill)真的很难。 而在JavaScript中实现就容易多了。

英文原文:https://css-tricks.com/random-numbers-css/

译者:Skull_ageles

css 加随机数 引用_在CSS中生成随机数相关推荐

  1. python随机数种子通俗_在种子中生成随机数

    python相对较新,因此对任何糟糕的代码表示歉意.在 我使用blender创建随机刺激集,使用sapling插件创建类似 我还想定义一个随机相机的位置和角度在一个半球以上的平面,我做的是产生两个随机 ...

  2. python生成多个随机数列表_在python中生成1到6之间的6个随机数的列表

    使用 list comprehension: import random def startTheGame(): mylist=[random.randint(1, 6) for _ in range ...

  3. golang 字符串随机数_在Go中生成随机数和字符串

    golang 字符串随机数 While completely random is not really possible, we still can have pseudorandom numbers ...

  4. php项目css加载失败,浅谈CSS加载失败的6个原因

    在页面布局时,都主张结构与样式分离,但是有些时候,css样式不能成功加载,这是为什么呢?这篇文章主要讲了CSS加载失败的6个原因,有需要的朋友可以参考一下,希望对你有用. 有很多刚刚接触css的新手有 ...

  5. 在VB.NET中生成随机数

    这些是有关在Visual Basic中生成随机数的一些"随机"想法. 维基百科会比我提供更好的介绍,请参见 http://en.wikipedia.org/wiki/Random_ ...

  6. java 随机数生成实现_Java中生成随机数的实现方法总结

    搜索热词 在实际开发工作中经常需要用到随机数.如有些系统中创建用户后会给用户一个随机的初始化密码.这个密码由于是随机的,为此往往只有用户自己知道.他们获取了这个随机密码之后,需要马上去系统中更改.这就 ...

  7. 在VB6中生成随机数

    VB6版本 在VB6中生成随机数有些不同. 我不说哪个更好,因为我只熟悉VB6方法. 但是肯定会产生一个随机数(更正确地说是一个伪随机数)是 在VB6中更简单 . 您只需调用Rnd()函数. 此示例表 ...

  8. iOS开发中生成随机数

    有时候我们需要在程序中生成随机数,但是在Objective-c中并没有提供相应的函数,好在C中提供了rand().srand().random().arc4random()几个函数.那么怎么使用呢?下 ...

  9. ios 中生成随机数

    ios 中生成随机数 ios 有如下三种随机数方法: 1.    srand((unsigned)time(0));  //不加这句每次产生的随机数不变         int i = rand() ...

最新文章

  1. MYSQL基础语法的使用
  2. Heron:来自Twitter的新一代流处理引擎应用篇
  3. 计算机专业知识多选题证监会,2019年国家公务员考试中国证监会(计算机类)专业科目考试大纲...
  4. python tkinter button_[转载]Python Tkinter之Button(转载)
  5. php session 跨子域,PHP session 跨子域问题总结
  6. Google开放最大目标检测数据集,还要为它举办AI挑战赛
  7. cloudstack基础知识
  8. 自然语言处理NLP + 知识图谱
  9. C语言的数学运算函数
  10. python发送邮件发件人_在python电子邮件的from字段中添加发件人的名称
  11. leetcode1480.一维数组的动态和
  12. 再生龙linux多挂载点备份,利用Clonezilla(再生龙)对Linux系统备份与恢复
  13. 别让职场形象毁了你的职场前程
  14. 抽样中误差的相关概念和种类
  15. php访问opc ua,什么是OPC网关?OPC UA有什么特点
  16. Google新闻vs门户新闻:决裂还是共存
  17. 公交来了 1.3.0 发布
  18. Java:IO流的概念、作用、分类
  19. 基于VB图书管理系统的设计与实现
  20. 拉我室友打了一把英雄联盟搞会了IntelliJ IDEA的安装与配置

热门文章

  1. android 添加安装权限白名单
  2. mtk camera 移植步骤
  3. ros消息服务器,ROS服务和消息
  4. (笔记)Linux内核学习(五)之中断推后处理机制
  5. 用Ant实现Java项目的自动构建和部署
  6. 网络配置之ifconfig及Ip命令详解
  7. AppSettings和ConnectionStrings的使用。
  8. linux Firefox汉化
  9. 【正一专栏】俄罗斯世界杯来了——抽签概述
  10. 【正一专栏】欧洲五大联赛猜想(一)德法意班霸集结寻求欧冠突破