01
设计系统
核心思路是隔离:所有样式作用域到 .prismglass,
组件类用 .prismglass .btn 这样的高优先级选择器覆盖站点全局同名类,
元素级规则则用 :where() 降权,避免污染评论组件等第三方样式。
:root {
--bg-deep: #0b1020;
--glass-medium: rgba(255, 255, 255, 0.06);
--accent-cyan: #22d3ee;
--z-sticky: 200;
}
--bg-deep: #0b1020;
--glass-medium: rgba(255, 255, 255, 0.06);
--accent-cyan: #22d3ee;
--z-sticky: 200;
}
"设计系统的价值在于复用,复用的前提是隔离——改一处而不影响他处。"
02
组件拆分
按照原 HTML 的区块边界拆成 20 个组件:基础组件负责视觉(按钮、卡片、徽章), 交互组件负责行为(弹窗、提示、进度条),全部通过 props 暴露配置项。
- 基础组件:GlassPanel / Button / Badge / Card / InputField / GlassTable / Navbar……
- 交互组件:Modal / Toast / Tooltip / Dropdown / Progress / Spinner……
- 运行时:PrismGlassRuntime(事件委托,单例保护)
GlassPanel Button Modal Toast
03
交互运行时
页面上不需要手写任何 JS:打开弹窗、弹 toast、切换下拉都靠
data-pg-* 属性声明,运行时在 document 上做一次事件委托即可。
import PrismGlassLayout from '../../layouts/PrismGlassLayout.astro';
import Button from '../../components/PrismGlass/Button.astro';
<!-- 交互靠 data-pg-* 属性驱动,无需写 JS -->
<Button data-pg-open="demoModal">打开弹窗</Button>
import Button from '../../components/PrismGlass/Button.astro';
<!-- 交互靠 data-pg-* 属性驱动,无需写 JS -->
<Button data-pg-open="demoModal">打开弹窗</Button>