svg 绘制魔法阵 by chatgpt
chatgpt 使用 svg 绘制魔法阵
使用 SVG 绘制魔法阵
本文包含 15 个循序渐进的 SVG 示例,从三个同心圆开始,逐步加入几何骨架、元素复用、主题颜色、渐变、发光和动画,最终完成一个会漂移、浮现并归位的魔法阵。
所有示例都使用原生 SVG,不依赖图片、框架或第三方动画库。可以直接用浏览器打开,也可以嵌入 HTML。
为什么使用 SVG
SVG 很适合绘制魔法阵,因为它具有以下特点:
- 图形可以任意缩放,不会失真。
- 圆、线、多边形和路径适合构造规则几何图案。
- 相同元素可以定义一次,再旋转复用。
- 颜色、透明度和线宽可以通过 CSS 统一控制。
- 支持渐变、滤镜、文字路径和动画。
- 每个图层都可以单独移动、旋转、显现或隐藏。
魔法阵看起来复杂,但通常只是少量基础图形经过同心排列、旋转复制和分层叠加后的结果。
基础结构
一个常见的魔法阵可以分成四层:
- 外环:确定整体边界,放置刻度、符号或文字。
- 几何层:使用三角形、六芒星或多边形建立主体结构。
- 能量层:使用虚线、渐变和光晕增强空间感。
- 核心:用小圆、渐变或脉动动画形成视觉焦点。
基础画布通常将坐标原点放在中心:
<svg width="600" height="600" viewBox="-300 -300 600 600">
这样所有圆都可以直接使用 cx="0"、cy="0",旋转也会自然围绕中心进行。
常用 SVG 能力
| 元素或属性 | 用途 |
|---|---|
<circle> | 同心圆、节点和能量核心 |
<polygon> | 三角形、六芒星和规则几何骨架 |
<path> | 自定义轮廓、符文路径和复杂连线 |
<g> | 将外环、内环和核心组织为独立图层 |
<defs> | 保存可复用图形、渐变、滤镜和文字路径 |
<use> | 重复刻度、光点和符号 |
transform | 平移、旋转和缩放图层 |
currentColor | 使用 CSS 统一控制描边和填充颜色 |
stroke-dasharray | 制作虚线,也可隐藏整条路径 |
stroke-dashoffset | 推动虚线或实现路径逐渐绘制 |
pathLength | 将不同路径的长度统一为便于控制的数值 |
<linearGradient> | 制作沿某个方向变化的颜色 |
<radialGradient> | 制作由中心向外扩散的能量光核 |
<filter> | 制作模糊、发光和阴影 |
<textPath> | 让文字沿圆形路径排列 |
15 个演进步骤
Step 01:基础圆阵
文件:step-01.svg
使用 <rect> 绘制深色背景,再用三个 <circle> 建立外环、中环和核心区域。这一步主要理解 viewBox、中心坐标和同心圆。
Step 02:几何骨架
文件:step-02.svg
加入两个方向相反的三角形,组成六芒星。重点是使用 <polygon> 的顶点坐标构造对称图形。
Step 03:径向重复
文件:step-03.svg
在 <defs> 中定义一个刻度和一个节点,再通过 <use> 与 rotate() 围绕中心复制。复杂感开始由重复而不是大量手写代码产生。
Step 04:图层分组
文件:step-04.svg
使用 <g> 将图形拆成外环、中环和核心。分组之后,可以给每一层独立设置样式、变换和动画。
Step 05:主题换色
文件:step-05.svg
使用 CSS 变量控制主色和背景色,并提供火焰、寒冰和奥术主题。修改根元素上的类名即可切换整体配色。
<svg class="magic fire">
可将 fire 改为 ice 或 arcane。
Step 06:线条层次
文件:step-06.svg
通过线宽、透明度、虚线和圆形线帽区分不同结构。即使不增加新图形,也能让魔法阵产生更丰富的层次。
Step 07:渐变核心
文件:step-07.svg
使用线性渐变改变轮廓颜色,使用径向渐变制作从中心向外消散的能量核心。
Step 08:霓虹发光
文件:step-08.svg
使用 <feGaussianBlur> 模糊轮廓,再通过 <feMerge> 将模糊层和清晰原图合并,形成霓虹光晕。
Step 09:整体旋转
文件:step-09.svg
使用 <animateTransform> 让整个法阵围绕中心旋转。这是最基础的 SVG 原生动画。
Step 10:分层反向旋转
文件:step-10.svg
外环、中间几何层和核心使用不同速度与方向旋转。相对运动让结构看起来更精密,但每一层仍然只是独立的 <g>。
Step 11:呼吸与闪烁
文件:step-11.svg
通过半径、透明度和颜色变化,让核心产生周期性呼吸效果。这一步展示同一个元素可以同时动画多个属性。
Step 12:路径流光
文件:step-12.svg
使用 stroke-dasharray 将描边切分,再改变 stroke-dashoffset,形成能量沿路径流动的效果。
Step 13:符文圆环
文件:step-13.svg
在 <defs> 中定义圆形路径,并通过 <textPath> 让文字沿圆周排列。替换文字内容即可制作符文、咒语或装饰环。
Step 14:交互式漂移浮现
文件:step-14.svg
图层从不同方向漂移到中心,同时描边由无到有逐渐绘制。动画完成后保持静止。
- 单击法阵:切换颜色主题。
- 双击法阵:重新播放动画。
这里通过 pathLength="1" 统一路径长度,再将描边从完全偏移变为零:
.trace {
stroke-dasharray: 1;
stroke-dashoffset: 1;
}
@keyframes draw {
to { stroke-dashoffset: 0; }
}
Step 15:完整漂移归位
文件:step-15.svg
最终版本整合了图形复用、颜色变量、滤镜、符文和组合动画。
开场时,各图层具有不同的平移、旋转和缩放状态。它们在移动过程中同步绘制轮廓、增强透明度,最后精确回到中心,组成完整且静止的魔法阵。
最终效果不是持续打散或循环旋转,而是一次完整的形成过程:
- 图层从不同方向漂移而来。
- 圆环与星形沿路径逐渐浮现。
- 刻度、符文和核心延迟出现。
- 所有结构回到准确位置。
- 动画停止,保留完整魔法阵。
漂移与浮现的实现
漂移归位由 transform 动画完成:
.outer {
--start: translate(-90px, -65px) rotate(-28deg) scale(.82);
}
@keyframes settle {
0% {
opacity: 0;
transform: var(--start);
}
100% {
opacity: 1;
transform: translate(0, 0) rotate(0) scale(1);
}
}
路径浮现由描边动画完成:
.trace {
stroke-dasharray: 1;
stroke-dashoffset: 1;
animation: draw 3.6s ease-out forwards;
}
@keyframes draw {
to { stroke-dashoffset: 0; }
}
同一个元素可以同时播放 settle 和 draw,因此它会一边移动,一边逐渐形成。
修改最终版本
修改颜色
编辑 step-15.svg 顶部的 CSS 变量:
.magic-circle {
--magic: #67e8f9;
--accent: #c084fc;
--bg: #030712;
}修改动画速度
调整 .arrive 和 .trace 的 animation-duration。持续时间越长,聚合和浮现过程越缓慢。
修改漂移方向
每个图层都有独立的 --start:
--start: translate(75px, -35px) rotate(22deg) scale(1.12);
改变 translate 控制初始位置,改变 rotate 控制初始角度,改变 scale 控制初始大小。
修改光晕
调整滤镜中的 stdDeviation:
<feGaussianBlur stdDeviation="5"/>
数值越大,光晕越宽、越柔和,但图形边缘也会显得更模糊。