Page 108 - css揭秘
P. 108

.pie::before {
                            content: '';
                            display: block;
                            margin-left: 50%;
                            height: 100%;
                        }

                        可以在图 3-52 中看到,我们的伪元素现在相对于整个饼图进行了重叠。
                    不过现在还没有设置任何样式,它还起不到遮盖的作用:暂时只是一个透明
                    的矩形。在开始为它设置样式之前,我们还要再做一些观察和分析。
                           „ 我们希望它能遮盖圆形中的棕色部分,因此应该给它指定绿色背景。                              图 3-51
                           在这里使用 background-color:  inherit 声明可以避免代码的重                   用一个简单的线性渐变来把图形
                           复,因为我们希望它的背景色与其宿主元素保持一致。                                      的右半部分设置为棕色
                           „ 我们希望它是绕着圆形的圆心来旋转的,对它自己来说,这个点就
                           是它左边缘的中心点。因此,我们应该把它的 transform-origin
                           设置为 0 50%,或者干脆写成 left。
                           „ 我们不希望它呈现出矩形的形状,否则它会突破整个饼图的圆形范
                           围。因此要么给 .pie 设置 overflow:  hidden 的样式,要么给这个
                           伪元素指定合适的 border-radius 属性来把它变成一个半圆。

                        综合上面的思路,这个伪元素的 CSS 就确定下来了:

                        .pie::before {
                            content: '';                                                 图 3-52
                            display: block;                                              把伪元素当作遮盖层来用,它的
                            margin-left: 50%;                                            位置用虚线框标示
                            height: 100%;
                            border-radius: 0 100% 100% 0 / 50%;
                            background-color: inherit;
                            transform-origin: left;
                        }                                                                !
                                                                                             不要在这里用 background:
                                                                                         inherit;, 而应该用 backgr-
                        我们的饼图看起来就是图 3-53 中的样子了。接下来,美好的事情即将                               ound-color:  inherit;,否则渐
                    发生!我们现在可以通过一个 rotate() 变形属性来让这个伪元素转起来。                               变背景也会被继承过来。
                    如果我们要显示出 20% 的比率,我们可以指定旋转的值为 72deg(0.2 ×
                    360 = 72),写成 .2turn 会更加直观一些。在图 3-54 中,你还可以看到其
                    他一些旋转值的情况。

                        你可能以为这就大功告成了,但事实上我们才刚刚开了个头。我们的饼
                    图在显示 0 到 50% 的比率时运作良好,但如果我们尝试显示 60% 的比率时
                   (比如指定旋转值为 .6turn 时),结果就变成如图 3-55 所示了。不过也别泄
                    气,我们一定能够排除万难修复这个问题!
                        如果把 50%~100% 的比率看作另外一个问题,我们就会发现,可以使
                    用上述技巧的一个反向版本来实现这个范围内的比率:设置一个棕色的伪                                     图 3-53
                    元素,让它在 0 至 .5turn 的范围内旋转。因此,要得到一个 60% 比率的饼                           设置好样式之后的伪元素,用虚
                                                                                         线框标示
                    图,伪元素的代码可能是这样的:



                                                                                             14 简单的饼图          77







          ඀ࠡ  JOEC
   103   104   105   106   107   108   109   110   111   112   113