Page 99 - css揭秘
P. 99

border: 15px 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>');

                                                  请注意,我们使用的切片尺寸是 1。这并不表示 1 像素;它所对应的是
                                              SVG 文件的坐标系统(因此不需要单位)。如果我们用百分比来指定这些长
                                              度,就只能采用 33.34% 这样的值来近似地获得图像尺寸的三分之一。近似
                                              值总是有风险的,因为不是所有的浏览器都使用相同的计算精度。但如果使
                                              用 SVG 文件的坐标系统作为度量单位,我们就不用为此头痛了。

                                                  它的效果展示在图 3-33 中。如你所见,我们的切角效果出来了,但还
                                              缺少整片背景。我们有两种办法可以解决这个问题:要么提供一个背景色,
                                              要么给 border-image 属性值加上 fill 关键字——这样它就不会丢掉 SVG
                                              中央的那个切片了。在这个例子中,我们决定指定一个背景色,因为它还可
                                              以发挥回退的作用。

                    图 3-33                        顺便一提,你可能已经注意到了,我们的切角跟前面的技巧相比要小
                    把我们的 SVG 应用到 border-      一些,这令人有些困惑。我们明明已经指定 15px 作为边框宽度了啊!其
                    image 属性中
                                              实原因在于,在渐变中,这个 15px 是沿着渐变轴来度量的,它的方向与
                                              渐变推进的方向一致。边框宽度并不是斜向度量的,而是以水平或垂直方
                                              向来度量的。你能看出它们的差别吗?对,我们又要请出万能的勾股定理
                                              了,我们在“条纹背景”一节中就已经见过它了。图 3-34 应该可以很好地
                                              解释这个问题。简而言之,为了得到相同的尺寸,我们需要把渐变中的尺
                                              寸乘以 2 ,然后才能用在边框宽度属性中。在这个例子中,它实际上就是
                                              15×  2 ≈  21.213 203 436像素;可以取近似值 20px,除非我们绝对要求斜向
                    图 3-34
                                              尺寸严格接近 15px:
                    把 border-width 指定为 15px,
                    所产生的切角尺寸(斜向度量结
                          15                      border: 20px solid transparent;
                    果)为    2  ≈ 10.606 601 718 ,这  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;

                                                  但是,我们在图 3-35 中会发现,这实际上并没有得到我们期望的效果。
                                              我们费尽周折创建的切角效果去哪儿了啊?别担心,年轻人,我们的切角其
                                              实就在那儿。如果你把背景设置为另一种颜色,比如                           #655,就会比较容
                                              易理解事情的真相了。
                    图 3-35                        如图 3-36 所示,原来这是因为背景色和切角边框混成一团了。接下来
                    我们美美的切角效果去哪儿了
                                              要做的就是请出 background-clip 来修复这个问题,避免背景色蔓延到边
                                              框区域:




                   68
                        第 3 章 形状






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