Page 76 - css揭秘
P. 76

图 2-55
                                                                                         我们最终的条纹图案使用了质数,
                                                                                         从而增加了随机的真实感







                        根据这个逻辑,要让这种随机性更加真实,我们得把贴片的尺寸最大
                    化。感谢数学,我们不需要苦苦思索如何做到这一点,因为我们已经知道答
                                                                           1①
                    案了。为了让最小公倍数最大化,这些数字最好是“相对质数” 。在这种情
                    况下,它们的最小公倍数就是它们的乘积。举例来说,3、4 和 5 是相对质
                    数,因此它们的最小公倍数就是 3×4×5=60。要达成相对质数,最简单的办
                    法就是尽量选择质数,因为质数跟其他任意数字都是相对质数。在网上可以
                    找到质数的清单,它们有的非常大。
                        为了进一步增加随机性,我们甚至可以用质数来指定各组条纹的宽度。
                    于是我们的代码变为:

                        background: hsl(20, 40%, 90%);
                        background-image:
                            linear-gradient(90deg, #fb3 11px, transparent 0),
                            linear-gradient(90deg, #ab4 23px, transparent 0),
                            linear-gradient(90deg, #655 41px, transparent 0);
                        background-size: 41px 100%, 61px 100%, 83px 100%;

                        是的,我们的代码算不上完美,但想要在图 2-55 中找到任何平铺接缝
                    可不容易。平铺贴片的尺寸现在是 41×61×83=207 583 像素,比任何我们所
                    能想像出的屏幕分辨率都要大!

                        这个技巧被 Alex Walker 定名为“蝉原则”,他最先提出了通过质数来
                    增加随机真实性的想法。请注意这个方法不仅适用于背景,还可以用于其他
                    涉及有规律重复的情况。
                           „ 在照片图库中,为每幅图片应用细微的伪随机旋转效果时,可以使
                           用多个 :nth-child(a) 选择符,且让 a 是质数。

                           „ 如果要生成一个动画,而且想让它看起来不是按照明显的规律在
                           循环时,我们可以应用多个时长为质数的动画。(可以在 play.
                           csssecrets.io/cicanimation 看到一个示例。)

                     试一试 play.csssecrets.io/cicada-stripes


                    ①  质数是一些整数,除了 1 和自身之外,它们无法被其他任何数字整除。举例来说,最小的
                      10 个质数分别是 2、3、5、7、11、13、17、19、23 和 29。另一方面,相对质数是一种数字
                      之间的关系,而不是单个数字自身的属性。构成相对质数的这些数字没有公约数,但它们自
                      己是可以有多个约数的(比如说,10 和 27 是相对质数,但它们都不是质数)。很显然,一
                      个质数跟其他所有数字都可以构成相对质数。



                                                                                              7 伪随机背景          45







          ඀ࠡ  JOEC
   71   72   73   74   75   76   77   78   79   80   81