SVG_18_a标签_clipPath标签_限制路径效果

本文介绍SVG中的a标签如何创建超链接,并通过示例代码展示其使用方法,包括目标窗口打开链接的设置。同时,深入探讨clipPath标签的作用,即定义图形的可见范围,配合动画实现如镂空填色等视觉效果。文章还提供了通过clipPath和rect动画展示文字渐现的具体案例。

知识点:

  • <a>标签

  • <clipPath>标签

先说a标签

使用 SVG 的锚元素 (<a>) 定义一个超链接。

由于这个元素和 HTML 的 <a> 标签 使用了相同的标签名,当使用 CSS 或 querySelector 选择"a"时,可能应用到错误的元素上。 可以尝试使用 @namespace规则 来区分两者。

a标签中值得一提的是 target="_blank"属性,表示在新的页面打开标签中的链接地址。如果不设置target属性,默认是在当前页打开。

示例用法,上代码

<svg width="140" height="30"     xmlns="http://www.w3.org/2000/svg"      xmlns:xlink="http://www.w3.org/1999/xlink">
  <a xlink:href="https://www.baidu.com/">    <rect height="30" width="120" y="0" x="0" rx="15"/>    <text fill="white" text-anchor="middle"           y="21" x="60">Xi说SVG</text>  </a></svg>
运行效果

 

借着a标签的引子,我整理了之前的文章,但由于在微信中展示不出来效果,只能截图以示之。

 

使用a标签的同时,使用defs标签定义了linearGradient标签,增强感官印象。

 

再说clipPath标签。

<clipPath> 标签定义了一个限制路径,其他控件可通过clip-path 属性引用这个路径,这样,二者结合,再辅以动画,可以实现镂空填色或者燃烧鞭炮引线的效果。

 

PS:这个限制路径,限制了图形的可见范围,超出限制范围的,则不可见。

 

利用这个特点,可以通过path画出各种图形,然后再通过动画的移动,展示出美妙的效果,这里简单举个栗子:通过clipPath制定出限定区域,然后通过rect矩形动画改变矩形宽度,实现文字从左向右展示出来。文字背景同时使用了linearGradient标签,实现颜色渐变。

看效果:

效果还是被吞,上视频

clipPath限制路径之文字展现

 

Xi说孔方兄认证

### 回答问题 **不一定。** `SVG_FOLDER_NAME` 指定的 SVG 文件夹(例如 `SVG_SOURCE`)**只需要存在于你配置的每一个“主目录”下即可**,也就是说: - ✅ 如果你在 `config.ini` 中列出了多个主目录(如 `project_A`, `project_B`),那么: - `project_A/SVG_SOURCE/` 可以有 `.svg` 文件 - `project_B/SVG_SOURCE/` 也可以有自己的 `.svg` 文件 - ❌ 但如果某个主目录下没有这个 SVG 子文件夹,或该文件夹为空,则 **那个主目录下的子文件夹将无法匹配并复制 SVG 文件**。 --- ### 🔍 详细解释 在你的代码中,这一段决定了 SVG 文件来源: ```python svg_dir = os.path.join(main_dir, SVG_FOLDER_NAME) ``` 这意味着: 👉 对于每一个 `main_dir`,程序都会去查找其内部名为 `SVG_FOLDER_NAME` 的子目录(比如 `SVG_SOURCE`),然后从中提取 `.svg` 文件用于后续匹配。 #### 所以结论是: | 场景 | 是否需要存在 SVG 文件夹 | |------|--------------------------| | 你想处理 `project_A` 下的子文件夹 | ✅ 必须存在 `project_A/SVG_SOURCE/` | | 你想跳过某个项目 | ⚠️ 可以不存在,脚本会打印错误并继续下一个 | | 所有主目录共用同一组 SVG 文件? | ❌ 当前结构不支持,除非做修改 | --- ### ✅ 示例说明 假设你的配置如下: ```ini main_dirs = ./工厂项目 ./商场项目 ./学校项目 ``` 则期望结构为: ``` . ├── 工厂项目/ │ ├── SVG_SOURCE/ │ │ └── 工厂照明.svg │ └── 工厂照明模块/ ├── 商场项目/ │ ├── SVG_SOURCE/ │ │ └── 商场灯光.svg │ └── 商场照明区/ └── 学校项目/ └── 教学楼灯光/ ← 没有 SVG_SOURCE,不会复制任何 SVG ``` ➡️ 结果: - `工厂项目/工厂照明模块/` → 会复制 `工厂照明.svg` - `商场项目/商场照明区/` → 会复制 `商场灯光.svg` - `学校项目/教学楼灯光/` → ❌ 不会复制,因为无 `SVG_SOURCE` --- ### 💡 如何优化:让所有主目录共享一个全局 SVG 库? 如果你希望 **只在一个地方存放 SVG 文件**,而被所有主目录使用,可以稍作修改: #### 修改前(每个主目录都要有 SVG 文件夹): ```python svg_dir = os.path.join(main_dir, SVG_FOLDER_NAME) ``` #### 修改后(统一从一个路径读取): ```python GLOBAL_SVG_PATH = config.get('Paths', 'global_svg_path') # 新增配置项 # 在 copy_svgs_by_fuzzy_match 函数中: svg_files = {} for f in os.listdir(GLOBAL_SVG_PATH): if f.lower().endswith('.svg'): base_name = os.path.splitext(f)[0] svg_files[base_name] = os.path.join(GLOBAL_SVG_PATH, f) # 然后对每个子目录都使用这同一个 svg_files 字典进行匹配 ``` 这样就不需要在每个主目录下都有 SVG 文件夹了。 --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King·Forward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值