Page 171 - css揭秘
P. 171

请 注 意 我 们 是 用 viewBox 来 定 义 它 的 单 位 的, 而 不 是 用 width 和
                                              height 属性。这允许我们不需要指定一个固定的尺寸就可以设置坐标系统
                                              和图形的宽高比。这个写法不仅更加紧凑,还可以节省几行 CSS 代码,因
                                              为我们已经不需要对这个 <svg> 元素应用值为 100% 的宽度和高度了:它自
                                              己就可以自动地适应外层容器的尺寸。

                                                  如果你没看懂路径的语法,也别怀疑自己的智商,因为根本没人能看
                                              懂。即使真的有人费尽心思领略到了 SVG 路径语法的一丝神秘魅力,也会
                                                                    ①
                                              在几分钟内忘得一干二净 。如果你还是很好奇,那我就来讲解一下这串神
                                                                    1
                                              秘代码所包含的三个指令。
                                                     „ M 0,50:移动到点 (0,50)。
                                                     „ a 50,50 0 1,1 0,1:以当前所在的这个点为起点,以当前点右侧 0
                                                     单位、下方 1 单位的那个点为终点,画一段圆弧。这段圆弧的水平
                                                     半径和垂直半径都必须是 50。如果存在两种可能的圆弧度数,选择
                                                     度数较大的那一种;同时,如果存在两种可能的圆弧方向,选择画
                                                     在这两个点右侧的那一种,而不是左侧的。
                                                     „ z:用一条直线线段闭合这条路径。
                                                  到目前为止,我们的路径还只是一个黑色的圆(参见图 5-43)。我们通
                                              过 <text> 和 <textPath> 元素来添加文本,并通过 xlink:href 属性来把它
                                              链接到这个圆上:


                                                  <div class="circular">                                  SVG
                                                      <svg viewBox="0 0 100 100">
                                                          <path d="M 0,50 a 50,50 0 1,1 0,1 z"
                                                                id="circle" />
                                                          <text><textPath xlink:href="#circle">
                                                              circular reasoning works because
                                                          </textPath></text>
                    图 5-43                            </svg>
                    我们的路径现在是一个圆,并默                </div>
                    认填上了黑色
                                                  在图 5-44 中可以看到,尽管在视觉效果和文本可读性方面还有很多工
                                              作要做,但我们已经达成了某些有史以来 CSS 完全无法企及的效果!

                                                  接下来的一步,就是把黑色的填充效果从路径中去掉。在任何情况下
                                              我们都不希望这个圆形路径被人看到;我们只希望它发挥一个基准线的作
                                              用,来引导这段文本。有很多方法可以做到这一点,比如把它嵌套进一个
                                              <defs> 元素中(该元素就是专门为这个目的而设计的)。不过,这里我们希
                                              望尽可能减少实现这个效果所需的 SVG 代码量,因此我们将用 CSS 来给它
                                              应用一个 fill: none 样式:

                    图 5-44
                    尽管还有很多事情要做,但我们
                    已经达成了某些 CSS 完全无法做         ①  为什么 SVG 路径的语法如此晦涩?追溯到它的诞生之初,大家都坚信没有人会手工编写
                    到的效果                        SVG 文件,于是 SVG 工作组为了减小文件体积,就直奔最紧凑的语法去了。



                  140   第 5 章 字体排印







          ඀ࠡ  JOEC
   166   167   168   169   170   171   172   173   174   175   176