Page 113 - css揭秘
P. 113

stroke-dasharray: 0 189;


                    图 3-60
                    不同的 stroke-dasharray 值
                    及其效果;从左到右分别是:0
                    189、40 189、95 189 和 150 189





                                                  其结果就是图 3-60 中的第一个图形。我们可以看到,它完全去除了描
                                              边效果,只剩下绿色的圆形。不过,当我们开始增加第一个值时,好玩的事
                                              情就开始了(参见图 3-60):因为虚线的间隙太大,我们根本就看不到连续
                                              的虚线效果,只能得到虚线的第一段线段,而它在整个圆周上覆盖的长度正
                                              是我们给它指定的长度值。
                                                  你可能已经开始思考下一步该怎么办了:如果我们把这个圆形的半径减
                                              小到一定程度,它就会被描边完全覆盖,而我们最终会得到一个非常接近饼
                    图 3-61                    图的图形。举例来说,当我们把圆形的半径设为 25 并且把 stroke-width
                                ①
                    我们的 SVG 图形 终于开始接近         指定为 50 时,所需要的代码如下所示(你可以在图 3-61 看到这段代码的效
                    饼图的样子了
                                              果):  1

                                                  <svg width="100" height="100">                           SVG
                                                      <circle r="25" cx="50" cy="50" />
                                                  </svg>


                                                  circle {
                                                      fill: yellowgreen;
                                                      stroke: #655;
                                                      stroke-width: 50;
                                                      stroke-dasharray: 60 158; /* 2π × 25 ≈ 158 */
                                                  }

                                                  现在,把它转换成前一种方案所呈现的那种饼图就非常简单了:我们
                                              只需要在描边的下层再绘制一个稍大些的圆形,然后把描边以逆时针方向
                                              旋转 90°,以便让扇区的起点出现在最顶部。由于 <svg> 元素本身也是一个
                                              HTML 元素,我们可以给它设置样式:

                                                  svg {
                                                      transform: rotate(-90deg);
                                                      background: yellowgreen;
                                                      border-radius: 50%;
                                                  }

                                                  你可以在图 3-62 中看到最终效果。这个技巧还可以让饼图从 0 到

                    图 3-62                    ①  请记住:SVG 在绘制描边时总是会把一半绘制在元素外部,另一半绘制在元素内部。在未来,
                    最终的 SVG 饼图                  我们将有能力控制这种行为。



                   82   第 3 章 形状







          ඀ࠡ  JOEC
   108   109   110   111   112   113   114   115   116   117   118