前端星盘 SVG 渲染开发文档

通用规范与坐标系

前端真正能改/能做的事
• 通过 CSS 变量覆盖 95%+ 的视觉样式(颜色、粗细、透明度、字体大小、虚线等)
• 完全支持暗黑模式、品牌主题、A/B 人物独立配色(双盘)
• JS 读取 data-* 参数,在 overlay 层自由追加自定义元素(行运线、动画、高亮、额外标注等)
• 轻松实现 hover 高亮、点击 tooltip、相位过滤、动态动画等交互
• SVG 自带 viewBox,支持任意缩放,天然响应式
布局几何参数为固定契约,不可修改
所有半径、间距、角度分桶宽度等几何布局参数已在后端预计算并固定(data-* 属性为只读)。
前端 JS 无法通过修改这些值来重新排布行星、宫位或改变整体结构(因为所有坐标已在 SVG 输出时硬编码)。

单位规范

所有 data-* 布局参数和 CSS 长度值均基于 SVG viewBox 单位(720×720),等同于像素单位。无特殊说明时均为绝对数值。

行星命名规则(data-object-id)

统一使用小写英文名 + 连字符格式:

  • 单盘:planet-sun、planet-moon 等
  • 双盘:planet-sun-a、planet-sun-b 等(严格追加 -a/-b)

单盘模式

本SVG星盘渲染器采用现代、可主题化的架构设计,原生支持完美响应式,完全分离几何结构与视觉样式,便于前端深度定制。

1. SVG 整体结构概述

  • 根元素:<svg class="astrology-chart" data-layout-version="1.3">
  • 主容器:<g class="chart" data-layout-token="chart-root">
  • 分层结构(推荐通过 data-layer 控制显隐/动画):
    • background:圆环与中心十字
    • zodiac:黄道十二宫符号
    • house:宫位线与数字(非轴线)
    • axis:轴线(ASC/DC、MC/IC)
    • aspect:相位线
    • planet:行星符号、度数、星座、逆行R

2. CSS 主题化(纯CSS即可完成)

.astrology-chart {
  --chart-ring-stroke: #333;
  --chart-aspect-hard-color: #ff4444;
  --chart-aspect-soft-color: #44aa44;
  --chart-connector-opacity: 0.6;
}

可控制的CSS变量列表(精选)

变量名 默认值 描述 适用元素
--chart-text-colorcurrentColor全局文字颜色所有 text
--chart-ring-strokecurrentColor所有环与线的描边颜色.ring, .house-cusp-line 等
--chart-ring-outer-width1.8最外环粗细.ring-outer
--chart-ring-inner-min-width / -opacity0.5 / 0.6最内侧最小环粗细与透明度.ring-inner-min
--chart-aspect-hard-color#d00硬相位颜色(合/冲).aspect-conjunction, .aspect-opposition
--chart-aspect-soft-color#0a0软相位颜色(六合/拱).aspect-sextile, .aspect-trine
--chart-planet-symbol-size20px行星符号大小.planet-symbol

3. JS 高级自定义与交互属性(只读)

后端在渲染 SVG 时,已经为行星和宫位注入了极为丰富的占星数据,非常适合前端通过 JS 实现高级交互(例如:鼠标悬浮某宫位,高亮显示该宫内的所有行星)。

行星与宫位高级属性

  • 精确经度data-longitude="203.63"(附带于所有行星节点,可用于精确定位与运算)
  • 落宫标识data-house="1" 或类名 .in-house-1(附带于行星节点,表示该星落在第 1 宫)
  • 四轴虚点:自带类名 .is-axis-point(专属于 ASC, MC, IC, DC,方便进行特殊样式过滤)

四轴与重点选择器

  • 四轴宫位组.house.is-axis(包含第 1, 4, 7, 10 宫的线条与数字节点,用于提取并加粗四轴线)
  • 单个行星:#planet-sun[data-object-id="planet-sun"]
  • 单个相位:[data-aspect-type="square"][data-aspect-group="hard"]

行星专属交互热区与文本拆解

  • 隐形交互热区:每个行星节点内包含一个 <circle class="planet-hit-area" data-interactive="planet" r="18" opacity="0">。这是专门为前端鼠标 Hover、Tooltip 或 Click 事件预留的扩大热区。因为行星文本和连线通常较细,很难精准悬停,绑定在这个 hit-area 上可以获得极佳的交互体验。
  • 标签内容分块控制:行星旁边的信息组(符号、度数、星座、逆行标志)在 <g class="planet-label"> 内部被精确打上了 data-label-part 标签:
    • [data-label-part="symbol"]:天体符号(如 Su, Mo)
    • [data-label-part="position"]:精确度分(如 24°28')
    • [data-label-part="sign"]:所在星座符号(如 ♈)
    • [data-label-part="retrograde"]:逆行标识(R)
    应用场景:你可以通过极简的 CSS 规则(例如 .astrology-chart [data-label-part="position"] { display: none; })动态隐藏盘面上的杂乱度数信息,或者通过 JS 精确提取需要的特定文本进行二次渲染。

双盘模式

注意:双盘的 data-outer-radius 语义与单盘不同(为黄道外环边界)。

双盘模式与单盘模式架构完全统一,支持相同主题化方式,额外提供内外盘独立颜色控制。目前仅绘制 A↔B 互动相位(inter)。

1. SVG 整体结构概述

  • 分层结构(新增):
    • planet-a:内盘(Person A),data-person="a"
    • planet-b:外盘(Person B),data-person="b"

2. CSS 主题化(双盘专属差异部分)

变量名 默认值 描述 适用元素
--color-person-a#000内盘文字与引线主色.planet-person-a
--color-person-b#555外盘文字与引线主色.planet-person-b
--chart-connector-stroke-avar(--color-person-a)内盘行星引导线颜色.planet-person-a .planet-connector
--chart-connector-stroke-bvar(--color-person-b)外盘行星引导线颜色.planet-person-b .planet-connector

3. JS 高级自定义(双盘专属)

  • 双盘专属相位范围 (Scope):双盘的根节点 <g class="chart"> 包含了 data-aspect-scope="inter" 属性。这明确标识了当前渲染层级的数据物理含义,即目前绘制的相位线纯粹是 Person A 与 Person B 之间的交叉互动(inter)相位,而非单人的本命相位。
  • 双盘专属相位连线属性:双盘的相位连线区分了内外盘,使用 data-planet-a="{code}"data-planet-b="{code}" 属性(单盘为 data-planet1 和 data-planet2)。例如选中 A 盘太阳的相位:[data-planet-a="0"]
  • 内盘行星:[data-layer="planet-a"]
  • 单个行星(区分内外):#planet-sun-a(内盘太阳)、#planet-sun-b(外盘太阳)

自定义演示工具

以下是一个实时互动的样式自定义演示,支持单盘与双盘模式切换。你可以直接拖动滑块、选择颜色,立即看到视觉反馈。

📂 源码下载提示
如果你希望在本地离线环境下进行更深度的 UI 定制或逻辑研究,可以点击 此处下载该演示工具的参考 HTML 源码

参数控制台

切换图表类型

🎨 全局样式

⭕ 单盘圆环粗细

🔳 环背景填充

⚡ 相位样式

🪐 行星与标签

🧩 Layer控制

✨ 高级交互演示