请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 马黑黑 于 2023-11-13 23:24 编辑
defs用于定义页面中需要重复使用的图形元素,包括实体图形(如 rect、circle、polygon、path等)和一些修饰机制(如滤镜、渐变等)。它和g标签同类,但各自功用不同:g标签用于分组,实时呈现其内定义的实体;defs标签内的实体则是隐形的,仅在调用实体id后方能复现,可以多次使用;defs标签也极其单纯,它是它自身,基本没有别的东东,包括id都没有。
应该注意的是,defs内定义的东东不同,引用对象和方式也不同。比如滤镜,调用滤镜的实体元素要通过 filter 引用其内的滤镜id,且现在的浏览器,滤镜要不要defs都可以;而渐变,调用者使用的是fill;实体元素呢,通过 <use> 标签的 xlink: href 或 href 属性调用。
以下示例,defs 标签包裹了两个实体元素:一个polygon绘制的菱形和一个circle绘制的小圆点。然后,两个 use 标签通过 xlink:href="#id标识" 调用实体元素,呈现出defs定义的图形元素。use 标签有自己的x和y属性,用于设置呈现内容左上角位于svg画布的xy坐标(具体还要参照defs内实体元素的位置),含义相当于CSS的left和top属性。
<svg width="200" height="200" style="border: 1px solid gray;">
<defs>
<polygon id="poly" points="100 50, 50 100, 0 50, 50 0" fill="none" stroke="red" />
<circle id="circ" cx="50" cy="50" r="5" fill="green" />
</defs>
<use xlink:href="#poly" x="50" y="50" />
<use xlink:href="#circ" x="20" y="20" />
</svg>
小结:defs非常简单,应注意的是,defs内的内容,如果不被调用,它永远不会显示出来。要显示它定义的图形,需要将其实例化,比如 filter="url(#id)"、fill="url(#id)"、use 标签的 xlink:href="#id" 或 href="#id" 等方式引用其内的图形或修饰类元素。
|