Page 100 - css揭秘
P. 100

border: 20px solid transparent;
                        border-image: 1 url('data:image/svg+xml,\
                            <svg xmlns="http://www.w3.org/2000/svg"\
                                 width="3" height="3" fill="%2358a">\
                            <polygon points="0,1 1,0 2,0 3,1 3,2 2,3 1,3 0,2"/>\
                            </svg>');
                        background: #58a;
                        background-clip: padding-box;
                                                                                         图 3-36
                                                                                         把背景色设置为另一种颜色,终
                        这样一来,问题就解决了,我们的容器现在看起来完全就是图 3-29 中
                                                                                         于解开了“切角消失”的谜团
                    的效果了。终于,我们做到了在改变切角尺寸时只改一处:只需修改边框宽
                    度就可以了。我们甚至可以给它加上动画,因为 border-width 属性是支持
                    动画的!我们还做到了在改变背景色时只改两处,而不是五处。此外,由于
                    背景效果跟切角效果是相互独立的,我们甚至可以把背景设置为一层渐变图
                    案或者其他图案,只要图案边缘处的颜色是                      #58 就行。来看看图 3-37 这
                    个例子吧,它就使用了一幅由 hsla(0,0%,100%,.2) 过渡到 transparent 的
                    径向渐变图案。
                                                                                         图 3-37
                        我们只剩下最后一个小问题了。在不支持 border-image 的环境下,回
                                                                                         切角与径向渐变背景组合之后的
                    退的结果就不仅是没有切角效果了。由于背景裁切,它看起来好像在容器的                                    效果
                    边缘和内容之间缺了一圈空隙。为了修复这个问题,我们可以给边框指定与
                    背景一致的颜色:

                        border: 20px solid #58a;
                        border-image: 1 url('data:image/svg+xml,\
                            <svg xmlns="http://www.w3.org/2000/svg"\
                                 width="3" height="3" fill="%2358a">\
                            <polygon points="0,1 1,0 2,0 3,1 3,2 2,3 1,3 0,2"/>\
                            </svg>');
                        background: #58a;
                        background-clip: padding-box;

                        当 border-image 属性生效时,这个边框色就会被忽略;但当 border-
                    image 不支持时,边框色就可以提供一个更加平稳的回退措施,此时的结果
                    如图 3-35 所示。不过随之来而的一个缺点就是,当我们改变背景色时要修
                    改的地方会增加到三处。


                     试一试 play.csssecrets.io/bevel-corners

                        向 Martijn Saly(http://twitter.com/martijnsaly)脱帽致敬,感谢他在 2015 年
                    1 月 5 日 的 一 条 推 文(http://twitter.com/martijnsaly/status/552152520114855936)
                    中首次提出用 border-image 和内联 SVG 实现斜面切角的创意。                                  致 敬


                    裁切路径方案

                        前面所述的 border-image 方案确实非常紧凑,也比较 DRY,但它还是
                    存在一些局限。举个例子,我们要么指定某个实色的背景,要么指定一个边



                                                                                               12 切角效果         69







          ඀ࠡ  JOEC
   95   96   97   98   99   100   101   102   103   104   105