Page 101 - css揭秘
P. 101

缘接近某个实色的背景图案。假如我们想设置其他类型的背景(比如纹理、
                                              平铺图案或一道线性渐变),又该如何?
                                                  有另外一种方法不存在这种局限,但有着它自已独有的局限。还记得我
                                              们在“菱形图片”中用到的 clip-path 属性吗? CSS 裁切路径最神奇的地
                                不完全支持
                                              方在于我们可以同时使用百分比数值(它会以元素自身的宽高作为基数度进
                                              行换算)和绝对长度值,从而提供巨大的灵活性。
                                                  举个例子,如果用裁切路径将一个元素切出 20px 大小(以水平方向度
                                              量)的斜面切角,代码可能如下:

                                                  background: #58a;
                                                  clip-path: polygon(
                                                      20px 0, calc(100% - 20px) 0, 100% 20px,
                                                      100% calc(100% - 20px), calc(100% - 20px) 100%,
                                                      20px 100%, 0 calc(100% - 20px), 0 20px
                                                  );

                                                  尽管这种方法的代码确实短了很多,但这并不意味着它是 DRY 的。如
                                              果你不用预处理器,这就是它最大的缺陷。实际上,它是本节所述的所有
                                              纯 CSS 方案中最不 DRY 的,因为如果要改动切角的尺寸,我们需要修改八
                                              处!不过另一方面,改变背景倒是变得比较方便,只需修改一处即可。

                                                  这个方法最大的好处在于,我们可以使用任意类型的背景,甚至可以对
                                              替换元素(比如图片)进行裁切。看看图 3-38 的这个例子,它给一张图片
                                              设置了斜面切角样式。前面提到的任何一种方法都做不到这一点。此外,这
                    图 3-38
                                              种方法还是支持动画效果的,我们不仅可以用动画的方式来改变切角的尺
                    运用 clip-path 属性给一张图片
                    设置斜面切角样式                  寸,还可以彻底变换裁切形状。我们只需要为动画的终止状态指定另一条裁
                                              切路径即可。

                                                  暂且不提代码不够 DRY 以及浏览器支持程度上的不足,它还有一个更
                                              大的缺点,就是当内边距不够宽时,它会裁切掉文本,因为它只能对元素做
                                              统一的裁切,并不能区分元素的各个部分。与此不同的是,渐变方案允许文
                                              字溢出并超出切角区域(因为它只是背景图案);而 border-image 方案则
                                              会起到普通边框的作用,令文字折行。




                    关于未来        切角效果

                    未来,我们再也不需要费尽心机地动用 CSS 渐变、裁切或 SVG 来实现这个效果了。CSS 背景与边框(第
                    四版) (http://dev.w3.org/csswg/css-backgrounds-4/)将引入一个全新的属性 corner-shape,可以彻
                    底解决这个痛点。这个属性需要跟 border-radius 配合使用,从而产生各种不同形状的切角效果,而切
                    角的尺寸正是 border-radius 的值。举例来说,为容器的四个角指定 15px 的斜面切角就是如此简单:

                        border-radius: 15px;
                        corner-shape: bevel;




                   70   第 3 章 形状







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