Page 138 - css揭秘
P. 138

„ 如果要保留对角线的 2em 长度,就要将 background-size 乘以 2 。
                           „ 如果要保留水平和垂直方向上的 2em 长度,就要用切角渐变的角标
                           位置值除以 2 。
                        由于 background-size 需要把这个长度重复两次,而且绝大多数的
                    CSS 度量都不是在对角线上进行的,因此第二种方案更加合适。色标的位置
                             2                                                           图 4-28
                    值将变成       =  2 ≈  1.414 213 562 ,我们可以将其取整为 1.5em:
                              2                                                          在改变了蓝色渐变的色标位置之
                                                                                         后,我们的折角效果最终达成
                        background: #58a; /* 回退样式 */
                        background:
                            linear-gradient(to left bottom,                              !
                                transparent 50%, rgba(0,0,0,.4) 0)                           请确保该元素已经留出了不
                                no-repeat 100% 0 / 2em 2em,                              小于折角尺寸的内边距,否则文
                            linear-gradient(-135deg,                                     本将有可能重叠在折页部分之上
                                transparent 1.5em, #58a 0);
                                                                                        (因为它只是背景),这将会破坏
                                                                                         折角的整体效果。
                        正如图 4-28 所示,我们最终得到了一个美观、灵活、简约的折角效果。

                     试一试 play.csssecrets.io/folded-corner



                    其他角度的解决方案

                        现实生活中的折角往往不是精确的 45°。如果我们希望它看起来更真实一
                    些,可以稍稍改变一下角度,比如 -150deg 可以产生 30°的切角。不过,如果
                    我们只是改变斜面切角的角度,那么表示翻折部分的三角形并不会跟着改变,
                    这将导致整体效果被破坏,如图 4-29 所示。此外,调整这个三角形的尺寸并
                    不容易。它的尺寸并不是由角度来定义的,而是由宽度和高度来定义的。我
                    们怎样才能得到需要的宽度和高度呢?好的,这回该请出三角函数了!
                        我们当前的代码是这样的:


                        background: #58a; /* 回退样式 */
                        background:
                            linear-gradient(to left bottom,                              图 4-29
                                transparent 50%, rgba(0,0,0,.4) 0)                       改变切角的角度将会破坏整体效果
                                no-repeat 100% 0 / 2em 2em,
                            linear-gradient(-150deg,
                                transparent 1.5em, #58a 0);

                                                                                 ①
                        在图 4-30 中可以发现,当我们知道这两个 30-60-90 直角三角形 的某
                                                                   1
                    一条直角边的长度时,基本上就可以算出斜边的长度。 图4-31 所示的三角函
                    数示意圆告诉我们,只要知道了直角三角形的角度和某一条边的长度,就可
                    以通过正弦函数、余弦函数以及勾股定理计算出另外两条边的长度。我们在
                                                                                         图 4-30
                                                                                         切角渐变的放大图(图中用灰色
                    ①  30-60-90 直角三角形表示两个锐角分别为 30°和 60°的直角三角形。                           标出的锐角为 30°)



                                                                                               19 折角效果        107







          ඀ࠡ  JOEC
   133   134   135   136   137   138   139   140   141   142   143