cluster-focus-demo.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  1. <!doctype html>
  2. <html lang="zh-CN">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>知识点聚类连线 - PDF场景复刻</title>
  7. <style>
  8. :root {
  9. --bg: #f5f7fb;
  10. --card: #ffffff;
  11. --line: #0f172a; /* 连线颜色(独立于标签文字) */
  12. --line-dense: #111827; /* 密集场景更深线色 */
  13. --text: #0f172a;
  14. --muted: #64748b;
  15. --tag-text: #92400e; /* 标签文字色 */
  16. --dot-mastered: #22c55e;
  17. --dot-weak: #f59e0b;
  18. --dot-beginner: #ef4444;
  19. --dot-unlearned: #d1d5db;
  20. }
  21. * { box-sizing: border-box; }
  22. body {
  23. margin: 0;
  24. font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif;
  25. color: var(--text);
  26. background: var(--bg);
  27. padding: 24px;
  28. }
  29. .wrap { max-width: 1420px; margin: 0 auto; }
  30. h1 { margin: 0 0 8px; font-size: 34px; }
  31. .legend { margin-bottom: 18px; color: var(--muted); font-size: 18px; }
  32. .legend .dot {
  33. width: 13px; height: 13px; border-radius: 999px; display: inline-block; margin: 0 6px 0 16px;
  34. vertical-align: middle;
  35. }
  36. .grid {
  37. display: grid;
  38. grid-template-columns: 1fr 1fr;
  39. gap: 16px;
  40. }
  41. .card {
  42. background: var(--card);
  43. border: 1px solid #dfe4ea;
  44. border-radius: 16px;
  45. padding: 14px 16px 16px;
  46. min-height: 250px;
  47. }
  48. .card h2 { margin: 0 0 10px; font-size: 38px; }
  49. .group {
  50. border-left: 3px solid #e5e7eb;
  51. margin-bottom: 10px;
  52. padding-left: 10px;
  53. position: relative;
  54. padding-right: 230px; /* 右侧留给标签区 */
  55. }
  56. .group-title { font-size: 34px; font-weight: 700; margin-bottom: 6px; line-height: 1.25; }
  57. .points {
  58. display: flex;
  59. gap: 7px;
  60. align-items: center;
  61. flex-wrap: wrap;
  62. min-height: 20px;
  63. position: relative;
  64. }
  65. .point {
  66. width: 16px;
  67. height: 16px;
  68. border-radius: 4px;
  69. border: 1px solid #bfc7d1;
  70. position: relative;
  71. flex: 0 0 auto;
  72. }
  73. .mastered { background: var(--dot-mastered); }
  74. .weak { background: var(--dot-weak); }
  75. .beginner { background: var(--dot-beginner); }
  76. .unlearned { background: var(--dot-unlearned); }
  77. .point.focus {
  78. box-shadow: 0 0 0 3px rgba(253, 224, 71, .45);
  79. }
  80. .focus-tag {
  81. position: absolute;
  82. left: 138px; /* 与最右侧方块拉开安全间距 */
  83. top: 50%;
  84. transform: translateY(-50%);
  85. border: 2px solid var(--line);
  86. border-radius: 999px;
  87. padding: 2px 10px;
  88. font-size: 27px;
  89. line-height: 1.3;
  90. color: var(--tag-text);
  91. background: #fff7ed;
  92. white-space: nowrap;
  93. max-width: none;
  94. overflow: visible;
  95. text-overflow: clip;
  96. }
  97. .focus-tag.dense { left: 178px; top: 50%; }
  98. .focus-tag.bottom { left: 148px; top: 44%; }
  99. .focus-svg {
  100. position: absolute;
  101. left: 0;
  102. top: -36px;
  103. width: 162px;
  104. height: 64px;
  105. overflow: visible;
  106. pointer-events: none;
  107. }
  108. .focus-svg path {
  109. fill: none;
  110. stroke: var(--line);
  111. stroke-width: 2.2;
  112. stroke-linecap: round;
  113. }
  114. .focus-svg.dense {
  115. width: 170px;
  116. height: 58px;
  117. top: -30px;
  118. }
  119. .focus-svg.dense path { stroke: var(--line-dense); }
  120. .note {
  121. margin-top: 16px;
  122. padding: 10px 14px;
  123. border: 1px dashed #cbd5e1;
  124. border-radius: 10px;
  125. color: #334155;
  126. background: #fff;
  127. font-size: 16px;
  128. }
  129. .span-2 { grid-column: 1 / -1; min-height: 170px; }
  130. .mini { min-height: 190px; }
  131. </style>
  132. </head>
  133. <body>
  134. <div class="wrap">
  135. <h1>二、知识点掌握聚类视图(PDF场景复刻)</h1>
  136. <div class="legend">
  137. <span class="dot" style="background:var(--dot-mastered)"></span>已掌握
  138. <span class="dot" style="background:var(--dot-weak)"></span>薄弱
  139. <span class="dot" style="background:var(--dot-beginner)"></span>未入门
  140. <span class="dot" style="background:var(--dot-unlearned)"></span>未学习
  141. 按“模块 -> 子模块 -> 知识点”聚类展示
  142. </div>
  143. <div class="grid">
  144. <section class="card">
  145. <h2>函数</h2>
  146. <div class="group">
  147. <div class="group-title">二次函数</div>
  148. <div class="points">
  149. <span class="point weak"></span><span class="point weak"></span><span class="point beginner"></span><span class="point beginner"></span><span class="point beginner"></span><span class="point unlearned"></span>
  150. </div>
  151. </div>
  152. <div class="group">
  153. <div class="group-title">锐角三角函数</div>
  154. <div class="points">
  155. <span class="point beginner"></span>
  156. <span class="point beginner focus">
  157. <svg class="focus-svg" viewBox="0 0 150 64" aria-hidden="true">
  158. <!-- 普通场景:起点锚定点中心(8,40),终点进入标签内侧(136,40) -->
  159. <path d="M8,40 C16,40 22,26 40,20 C84,16 114,34 130,39 L136,40" />
  160. </svg>
  161. <span class="focus-tag">三角函数的应用</span>
  162. </span>
  163. <span class="point unlearned"></span>
  164. </div>
  165. </div>
  166. <div class="group">
  167. <div class="group-title">反比例函数</div>
  168. <div class="points">
  169. <span class="point mastered"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  170. </div>
  171. </div>
  172. </section>
  173. <section class="card">
  174. <h2>相似与勾股</h2>
  175. <div class="group">
  176. <div class="group-title">相似三角形判定</div>
  177. <div class="points">
  178. <span class="point mastered"></span><span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  179. </div>
  180. </div>
  181. <div class="group">
  182. <div class="group-title">相似三角形性质</div>
  183. <div class="points">
  184. <span class="point weak"></span><span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  185. </div>
  186. </div>
  187. <div class="group">
  188. <div class="group-title">勾股定理与直角三角形</div>
  189. <div class="points">
  190. <span class="point beginner focus">
  191. <svg class="focus-svg" viewBox="0 0 150 64" aria-hidden="true">
  192. <path d="M8,40 C16,40 22,26 38,20 C80,16 110,34 130,39 L136,40" />
  193. </svg>
  194. <span class="focus-tag">直角三角形性质</span>
  195. </span>
  196. <span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  197. </div>
  198. </div>
  199. <div class="group">
  200. <div class="group-title">相似与勾股在压轴题中的整合</div>
  201. <div class="points">
  202. <span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  203. </div>
  204. </div>
  205. </section>
  206. <section class="card span-2 mini">
  207. <h2>图形变化与度量 / 图形度量</h2>
  208. <div class="group">
  209. <div class="group-title">立体几何度量(表面积与体积)</div>
  210. <div class="points">
  211. <span class="point beginner focus">
  212. <svg class="focus-svg bottom" viewBox="0 0 150 64" aria-hidden="true">
  213. <!-- 跨列底部场景:弧线更高,避免贴近点阵 -->
  214. <path d="M8,40 C16,40 22,24 40,18 C82,15 112,33 130,39 L136,40" />
  215. </svg>
  216. <span class="focus-tag bottom">立体几何展开图</span>
  217. </span>
  218. <span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  219. </div>
  220. </div>
  221. </section>
  222. <section class="card">
  223. <h2>方程与不等式</h2>
  224. <div class="group">
  225. <div class="group-title">一元二次方程</div>
  226. <div class="points">
  227. <span class="point beginner"></span><span class="point beginner"></span><span class="point beginner"></span>
  228. <span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  229. </div>
  230. </div>
  231. <div class="group">
  232. <div class="group-title">分式方程</div>
  233. <div class="points">
  234. <span class="point beginner focus">
  235. <svg class="focus-svg" viewBox="0 0 150 64" aria-hidden="true">
  236. <path d="M8,40 C16,40 22,26 38,20 C80,16 110,34 130,39 L136,40" />
  237. </svg>
  238. <span class="focus-tag">分式方程的应用</span>
  239. </span>
  240. <span class="point unlearned"></span><span class="point unlearned"></span>
  241. </div>
  242. </div>
  243. </section>
  244. <section class="card">
  245. <h2>数与代数</h2>
  246. <div class="group">
  247. <div class="group-title">数的认识与运算</div>
  248. <div class="points">
  249. <span class="point beginner"></span><span class="point beginner"></span><span class="point weak"></span>
  250. <span class="point beginner focus">
  251. <svg class="focus-svg dense" viewBox="0 0 150 64" aria-hidden="true">
  252. <!-- 密集场景:前段快速抬升 + 终点内插,避免擦到后续灰块 -->
  253. <path d="M8,40 C14,40 20,26 34,22 C78,18 124,26 154,34 L162,36" />
  254. </svg>
  255. <span class="focus-tag dense">幂与指数</span>
  256. </span>
  257. <span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  258. <span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  259. </div>
  260. </div>
  261. <div class="group">
  262. <div class="group-title">代数式与整式运算</div>
  263. <div class="points">
  264. <span class="point beginner"></span><span class="point beginner"></span><span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span><span class="point unlearned"></span>
  265. </div>
  266. </div>
  267. </section>
  268. </div>
  269. <div class="note">
  270. 这版覆盖了 PDF 中常见情况:长标题换行、密集点阵、上下卡片、多个关注点位置、右侧标签区。你确认这页视觉后,我再同步回正式模板。
  271. </div>
  272. </div>
  273. </body>
  274. </html>