Page 61 - css揭秘
P. 61

#fb3 50%, #58a 0);
                                                  background-size: 30px 30px;

                                                                                                        1①
                                                  可以发现,这个办法行不通。原因在于我们只是把每个“贴片” 内部的
                                              渐变旋转了 45°,而不是把整个重复的背景都旋转了。试着回忆一下我们以
                                              前用位图来生成斜向条纹时是怎么做的吧,做法类似图 2-30。单个贴片包
                    图 2-30                    含了四条条纹,而不是两条,只有这样才有可能做到无缝拼接。它正是我们
                    只有这种可以无缝拼接的图像才            需要在 CSS 代码中重新实现的贴片,因此我们需要增加一些色标:
                    能生成斜向条纹;是不是很眼熟
                                                  background: linear-gradient(45deg,
                                                                #fb3 25%, #58a 0, #58a 50%,
                                                                #fb3 0, #fb3 75%, #58a 0);
                                                  background-size: 30px 30px;

                                                  我们可以在图 2-31 中看到结果。如你所见,我们成功地创建了斜向条
                                              纹,但这些条纹看起来要比我们在前面制作的水平和垂直条纹细一些。为了
                    图 2-31                    理解这其中的道理,我们需要再次回忆起在学校里学过的勾股定理,用它来
                    我们得到的 45°条纹;图中的虚          计算直角三角形的斜边长度。这个定理表示,当 a 和 b 是直角三角形的直角
                    线框标示出了单个贴片的位置                                      2   2
                                              边时,则斜边的长度等于 a +             b 。对于一个 45°的直角三角形来说,它的
                                              两条直角边是等长的,因此这个算式会变成 2a =                    a  2 。在我们的斜向条纹
                                              中,背景尺寸指定的长度值决定了直角三角形的斜边长度,但条纹的宽度实
                                              际上是直角三角形的高。在图 2-32 中可以看到图形化的解释。

                                                  这意味着,如果想让条纹的宽度变化为我们原本想要的 15px,就需要
                                              把 background-size 指定为 2152×     ≈  42.426 406 871 像素:

                    图 2-32                        background: linear-gradient(45deg,
                    背景尺寸设置为 30px 时,产生的条                         #fb3 25%, #58a 0, #58a 50%,
                            15                                  #fb3 0, #fb3 75%, #58a 0);
                    纹宽度将是     ≈ 10.606 601 718
                             2                    background-size: 42.426406871px 42.426406871px;
                    像素
                                                  你可以在图 2-33 中看到最终效果。但是,除非有人拿枪顶着你的脑袋
                                              威胁你必须把斜向条纹的宽度设置为完全精确的 15 像素,我会强烈推荐你
                                              把这一长串数字取整,写成 42.4px,或者甚至是 42px。(当然,在上述情
                                              形之下,你还是会被干掉。因为 2 不是整数,我们最终得到的条纹宽度永
                                              远都只能是一个近似值——尽管它已经相当精确了。)
                    图 2-33
                    我们最终得到的 45°条纹;请注           试一试 play.csssecrets.io/diagonal-stripes
                    意现在条纹的宽度跟前面的例子
                    是一样的
                                              更好的斜向条纹


                                                  在前面的段落中展示的方法还不够灵活。假设我们想让条纹不是 45°而


                                              ①  原文 tile,表示平铺图案中的每个基本单元。——译者注



                   30   第 2 章 背景与边框







          ඀ࠡ  JOEC
   56   57   58   59   60   61   62   63   64   65   66